使变量有条件地全局化

2024-05-15 08:13:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

举个例子:

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

Tags: 函数loopreturnvaluelocaldefcheck条件
2条回答

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

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

它会让你的语法警告消失

我对上下文了解不多,似乎您想要一个python2.7答案(python3.?)有nonlocal

记住while statement can also have a ^{} clause

你可以写:

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

附言:你给x的作业中有一个拼写错误:(calcuation>calculation

相关问题 更多 >