本文介绍了我以为我会'全球'但......的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我以为我已经''得到'全局,但这个看起来很奇怪。

我希望我的示例函数''doIt''可以使用并可选择修改模块

变量''gname'',所以我在函数中声明''global gname'',但当

被修改时它不会被修改。


gname =''苏''

def doIt(name = gname):

global gname

gname = name

print''doIt name'',name,''gname'',gname


print''start gname'',gname

doIt()

doIt(name =''Lisa'')

doIt()

打印''完成gname'',gname


给...

start gname Sue

doIt name Sue gname Sue

doIt name Lisa gname Lisa

doIt name Sue gname Sue

完成gname Sue


变量gname已恢复为值''苏''


奇怪的是,无线在第三次doIt()调用中,它有效...

print''start gname'',gname

doIt()

doIt (name =''Lisa'')

#doIt()

打印''完成gname'',gname


给...

start gname Sue

doIt name Sue gname Sue

doIt name Lisa gname Lisa

完成gname Lisa


变量gname已被修改为''Lisa''


任何想法如何制作''Lisa''永远在第二次永久分配

doIt?谢谢


(注意:Contrived示例替代了Web类型的应用程序,如果在没有参数的情况下调用

页面,则显示全局默认值。

如果使用表单参数调用页面,那么它应该能够

更改全局默认值)

解决方案



这是一个FAQ,cf:



简要说明:默认args只在加载时被评估一次/导入时间。



def doIt(name = None):

global gname

如果名称为None:

name = gname

else:

gname = name



从函数中修改全局变量通常是一个非常糟糕的主意。

-

bruno desthuilliers

python -c" print''@''。join([''。''。join([w p.split(''。'')中的w的[:: - 1]])''o **** @ xiludom.gro'中的

p。分裂(''@ '')])"




谢谢Bruno,工作待遇...





感谢Bruno,作品一种享受...



但仍然很可能是一个坏主意。


-

bruno desthuilliers

python -c" print''@''。join([''。''。join([w [:: - 1] for p in p.split(' '。'')])''o **** @ xiludom.gro'中的

p。分裂(''@'')])"

I thought I had ''got'' globals but this one seems strange.
I want my example function ''doIt'' to use and optionally modify a module
variable ''gname'', so I declare ''global gname'' in the function, but when
modified it doesn''t stay modified.

gname = ''Sue''
def doIt(name = gname):
global gname
gname = name
print ''doIt name'', name, ''gname'', gname

print ''start gname'', gname
doIt()
doIt(name=''Lisa'')
doIt()
print ''finish gname'', gname

gives...
start gname Sue
doIt name Sue gname Sue
doIt name Lisa gname Lisa
doIt name Sue gname Sue
finish gname Sue

The variable gname has reverted back to value ''Sue''

Curiously though, without the third doIt() call, it works...
print ''start gname'', gname
doIt()
doIt(name=''Lisa'')
#doIt()
print ''finish gname'', gname

gives...
start gname Sue
doIt name Sue gname Sue
doIt name Lisa gname Lisa
finish gname Lisa

The variable gname has been modified to ''Lisa''

Any ideas how I can make the ''Lisa'' assignment permanent forever in 2nd
doIt? Thanks

(Note. Contrived example substitutes for a web-type app, where, if the
page is called without arguments then it displays the global defaults.
If the page is called with form arguments then it should be able to
change the global defaults)

解决方案

This is a FAQ, cf:
http://www.python.org/doc/faq/genera...etween-objects

Briefly : default args are eval''d only once at load/import time.

def doIt(name=None):
global gname
if name is None:
name = gname
else:
gname = name

Modifying globals from within a function is usually a very bad idea.
--
bruno desthuilliers
python -c "print ''@''.join([''.''.join([w[::-1] for w in p.split(''.'')]) for
p in ''o****@xiludom.gro''.split(''@'')])"


Thanks Bruno, works a treat...




Thanks Bruno, works a treat...

But still very probably a bad idea.

--
bruno desthuilliers
python -c "print ''@''.join([''.''.join([w[::-1] for w in p.split(''.'')]) for
p in ''o****@xiludom.gro''.split(''@'')])"


这篇关于我以为我会'全球'但......的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-14 05:43