使变量有条件地全局



>假设我需要运行一个带有循环的函数,直到我满足条件。 为了使函数正常工作,我只允许在函数中返回一个值,但是一旦条件清除,我想将我执行的一些计算带入全局范围。 我不允许使用 return 命令来执行此操作,所以我决定在后期全球化变量。 这引发了警告,但似乎工作正常。 这是最好的做事方式吗?

下面是一个示例:

def check_cond(x,cond):
return (x - cond,3)
def loop(x,func):
relevant_value = 0
while x > 0:
local_expensive_calculation = 1 #use your imagination
x = func(x,local_expensive_calculation)[0]
relevant_value += func(x,local_expensive_calculation)[1]
if x == 0:
global local_expensive_calculation
return relevant_value
x = 4
loop(x,check_cond)
#then do stuff with local_expensive_calculation, which is now global

这可能会稍微滥用系统,但您可以将变量设置为函数的属性,然后稍后通过该命名空间访问它:

def check_cond(x,cond):
return (x - cond,3)
def loop(x,func):
relevant_value = 0
while x > 0:
local_expensive_calculation = 1 #use your imagination
x = func(x,local_expensive_calculation)[0]
relevant_value += func(x,local_expensive_calculation)[1]
if x == 0:
loop.local_expensive_calculation = local_expensive_calculation
return relevant_value
x = 4
loop(x,check_cond)
print loop.local_expensive_calculation

如果你绝对坚持把它作为一个全局的,你可以这样做的一种方法是改变行:

global local_expensive_calculation

自:

globals()['local_expensive_calculation'] = local_expensive_calculation

它使你的语法警告消失。

我对上下文了解不多,似乎你想要一个 Python 2.7 答案(Python 3.?(已经nonlocal了。

请记住,while 语句也可以有一个else子句

你可以写:

while x>0:
# do calculation and stuff
else:
# make calculation result global

PS:你的作业中有错别字x:(calcuation-->calculation(

最新更新