奇怪的命名空间行为

时间:2016-10-17 09:20:07

标签: python

尝试运行以下代码时:

i = 0
def truc():
    print (i)
    if (False): i = 0
truc()

它会产生UnboundLocalError,但

i = 0
def truc():
    print (i)
    #if (False): i = 0
truc()

这是一种通缉行为吗?

有没有办法在不创建新变量的情况下修改变量的值?我可以使用一个元素的字典。它有效,但看起来很难看:

i = {0 : 0}
def truc():
    print (i[0])
    if (False): i[0] = 0
truc()

这不是更好的解决方案吗?

3 个答案:

答案 0 :(得分:0)

只需添加

global i

在方法truc()的开头声明i是全局变量

def truc():
    global i
    if (False):
        i = 0

查看此topic in Python's FAQ以获取更多信息

答案 1 :(得分:-1)

i = 0
def truc():
    global i
    print (i)
    if (False): i = 0
truc()

要引用函数的外部作用域变量,i应声明为全局。

答案 2 :(得分:-1)

您必须在功能中添加global i

i = 0
def truc():
    global i
    if (False):
        i = 0

处理此问题的其他方法是:

i大写你可以在没有global的情况下访问它,但是i然后i是不可更改的,这似乎在你的情况下是不合适的

#include <stdio.h> extern "C" { void fillArray(int* a, int len) { for (int i = 0; i<len; i++) { a[i] = i*i; } for (int j = 0; j < len; ++j) { printf("a[%d] = %d\n", j, a[j]); } } } 为参数。这使得代码不那么混乱,以后更容易调试。