相关疑难解决方法(0)

全球变量是否不好?

在C/C++中,全局变量和我的教授认为的一样糟糕吗?

c c++ global-variables

233
推荐指数
20
解决办法
10万
查看次数

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全局变量,本地变量和UnboundLocalError

UnboundLocalError最近碰到了这个案子,这看起来很奇怪:

import pprint

def main():
    if 'pprint' in globals(): print 'pprint is in globals()'
    pprint.pprint('Spam')
    from pprint import pprint
    pprint('Eggs')

if __name__ == '__main__': main()
Run Code Online (Sandbox Code Playgroud)

哪个产生:

pprint is in globals()
Traceback (most recent call last):
  File "weird.py", line 9, in <module>
    if __name__ == '__main__': main()
  File "weird.py", line 5, in main
    pprint.pprint('Spam')
UnboundLocalError: local variable 'pprint' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

pprint显然受到以下声明的约束globals,并将受到约束locals.有人可以解释为什么它不满意pprintglobals这里解决绑定?

编辑:由于回复良好,我可以用相关术语澄清我的问题:

在编译时,标识符pprint被标记为帧的本地.执行模型是否区分本地标识符绑定在框架内的哪个位置?它可以说,"引用全局绑定直到这个字节码指令,此时它已经反弹到本地绑定",或者执行模型没有考虑到这一点?

python binding scope identifier

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

Python范围问题

我有一个简单的例子:


def func1():
    local_var = None

    def func(args):
        print args,
        print "local_var:", local_var

        local_var = "local"

    func("first")
    func("second")

func1()
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

first local_var: None
second local_var: local

但是,我的实际输出是:

first local_var:
Traceback (most recent call last):
  File "test.py", line 13, in 
    func1()
  File "test.py", line 10, in func1
    func("first")
  File "test.py", line 6, in func
    print "local_var:", local_var
UnboundLocalError: local variable 'local_var' referenced before assignment

我对python范围规则的理解要求它应该按预期工作.我有其他代码,这可以按预期工作,但减少一个非工作代码片段到它上面的小部分情况也不起作用.所以我很难过.

python scoping

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

Python模块(在赋值之前引用的模块名称)

vm.pymain()脚本(getdata.py)在一个目录中.在getdata.py,我有

import vm
...
x = vm.Something()
Run Code Online (Sandbox Code Playgroud)

然后python抱怨

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

这是为什么?导入时没有错误.

UPDATE

我发现如果我这样做了

from vm import * 
Run Code Online (Sandbox Code Playgroud)

相反,它奏效了.另外对于我制作的另一个文件/模块,一个简单的import工作.我将完整代码上传到GitHub Gist https://gist.github.com/2259298

python python-3.x

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