问题描述
我以为我已经''得到'全局,但这个看起来很奇怪。
我希望我的示例函数''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(''@'')])"
这篇关于我以为我会'全球'但......的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!