相关疑难解决方法(0)

Python变量范围错误

以下代码在Python 2.5和3.0中按预期工作:

a, b, c = (1, 2, 3)

print(a, b, c)

def test():
    print(a)
    print(b)
    print(c)    # (A)
    #c+=1       # (B)
test()
Run Code Online (Sandbox Code Playgroud)

但是,当我取消注释行(B)时,我得到了UnboundLocalError: 'c' not assigned一行(A).的值ab被正确地打印.这让我感到困惑,原因有两个:

  1. 为什么在行(A)处抛出运行时错误,因为后面的行(B)语句?

  2. 为什么变量ab打印符合预期,同时c引发错误?

我能想到的唯一解释是,赋值创建了一个局部变量,即使在创建局部变量之前,它也优先于"全局"变量.当然,变量在存在之前"窃取"范围是没有意义的.cc+=1c

有人可以解释一下这种行为吗?

python variables scope

195
推荐指数
7
解决办法
6万
查看次数

为什么分配给我的全局变量不适用于Python?

我在尝试理解python范围规则时遇到了麻烦.

使用以下脚本:

a = 7

def printA():
    print "Value of a is %d" % (a)

def setA(value):
    a = value
    print "Inside setA, a is now %d" %(a)


print "Before setA"
printA()
setA(42)
print "After setA"
printA()
Run Code Online (Sandbox Code Playgroud)

给出了意想不到的(对我来说)输出:

    Before setA
    Value of a is 7
    Inside setA, a is now 42
    After setA
    Value of a is 7

我希望最后一次打印a的值为42,而不是7.我对Python的全局变量范围规则缺少什么?

python scope global-variables

64
推荐指数
3
解决办法
6万
查看次数

在函数外声明的变量

可能重复:
在赋值之前引用的python local var中的赋值错误
之前引用

好吧,我只是试着看看变量范围如何工作并在以下情况下运行.全部从终端跑:

x = 1
def inc():
    x += 5

inc()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in inc
UnboundLocalError: local variable 'x' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

所以我思考得很好也许我的方法无法访问x,所以我尝试了:

def inc():
    print(x)

1
Run Code Online (Sandbox Code Playgroud)

这样可行.现在我知道我可以这样做:

 def inc():
     global x
     x += 1
Run Code Online (Sandbox Code Playgroud)

这会奏效.但我的问题是为什么第一个例子失败了.我的意思是我希望自从print(x)工作以来x在函数内可见,那么为什么x + = 5失败?

python

43
推荐指数
3
解决办法
8万
查看次数

令人困惑的范围变化 - 发生了什么?

def Test(value):
    def innerFunc():
        print value
    innerFunc()

def TestWithAssignment(value):
    def innerFunc():
        print value
        value = "Changed value"
    innerFunc()

Test("Hello 1")
# Prints "Hello 1"

TestWithAssignment("Hello 2")
# Throws UnboundLocalError: local variable 'value' referenced before assignment
# on the "print value" line
Run Code Online (Sandbox Code Playgroud)

为什么第二个失败,因为唯一的区别是在print语句之后的赋值?我对此非常困惑.

python

3
推荐指数
1
解决办法
149
查看次数

python中的局部/全局变量混淆

可能重复:
在python中赋值错误之前引用

我在python中遇到一个奇怪的错误.以下ipython日志对其进行了总结:

In [10]: def confused(stuff):
   ....:     print huh
   ....:     return stuff
   ....: 

In [11]: confused(87)
0
Out[11]: 87

In [12]: def confused(stuff):
   ....:     print huh
   ....:     huh += 1
   ....:     return stuff
   ....: 

In [13]: confused(9)
---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
/home/max/verk/btr-email/build/x86_64/bin/ipython in <module>()
----> 1 confused(9)

/home/max/verk/btr-email/build/x86_64/bin/ipython in confused(stuff)
      1 def confused(stuff):
----> 2     print huh
      3     huh += 1
      4     return stuff

UnboundLocalError: local variable 'huh' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

有效的函数和抛出错误的函数之间的唯一区别是+ = 1行,即使这样,它也会在以前工作的行上抛出错误!如果我在方法的第二个版本中global huh …

python

3
推荐指数
1
解决办法
267
查看次数

标签 统计

python ×5

scope ×2

global-variables ×1

variables ×1