Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使变量条件全局化_Python_Python 2.7_Global Variables - Fatal编程技术网

Python 使变量条件全局化

Python 使变量条件全局化,python,python-2.7,global-variables,Python,Python 2.7,Global Variables,假设我需要运行一个带有循环的函数,直到满足一个条件。为了使函数正常工作,我只允许在函数中返回一个值,但一旦条件清除,我希望将我执行的一些计算带入全局范围。我不允许使用return命令来执行此操作,因此我决定在post中全球化变量。这提出了一个警告,但似乎效果不错。这是做事情的最好方式吗 下面是一个例子: def check_cond(x,cond): return (x - cond,3) def loop(x,func): relevant_value = 0 whi

假设我需要运行一个带有循环的函数,直到满足一个条件。为了使函数正常工作,我只允许在函数中返回一个值,但一旦条件清除,我希望将我执行的一些计算带入全局范围。我不允许使用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

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

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

如果您绝对坚持将it作为一个全球品牌,您可以通过改变产品线来实现这一点:

global local_expensive_calculation
致:

它会让你的警告消失

我对上下文了解不多,似乎您想要一个Python2.7的答案(Python3.?)是
非本地的

请记住

你可以写:

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

PS:你给
x
的作业中有一个输入错误:(
计算-->
计算

你不能返回一个包含多个值的对象,比如元组吗?另外,“我只允许在函数中返回一个值…”似乎与“我不允许使用return命令”相矛盾。好吧,我使用scipy的newton函数来实现这一点。它要求您在其中使用的函数只返回一个浮点,不允许使用元组。至于我的矛盾,我指的是在我被允许的范围之外使用返回。这当然有效,并且不会引起任何错误,所以我接受它。
while x>0:
    # do calculation and stuff
else:
    # make calculation result global