相关疑难解决方法(0)

范围规则的简短描述?

Python范围规则究竟是什么?

如果我有一些代码:

code1
class Foo:
   code2
   def spam.....
      code3
      for code4..:
       code5
       x()
Run Code Online (Sandbox Code Playgroud)

在哪里x找到?一些可能的选择包括以下列表:

  1. 在封闭的源文件中
  2. 在类命名空间中
  3. 在函数定义中
  4. 在for循环索引变量中
  5. 在for循环中

在执行期间,当函数spam在其他地方传递时,也存在上下文.也许lambda函数的传递方式有点不同?

某处必须有简单的参考或算法.对于中级Python程序员来说,这是一个令人困惑的世界.

python scope dynamic-languages

451
推荐指数
8
解决办法
24万
查看次数

是否可以在python中修改外部但不是全局范围的变量?

给出以下代码:

def A() :
    b = 1

    def B() :
        # I can access 'b' from here.
        print( b )
        # But can i modify 'b' here? 'global' and assignment will not work.

    B()
A()
Run Code Online (Sandbox Code Playgroud)

对于B()函数变量中的代码,b在外部作用域中,但不在全局作用域中.是否可以bB()函数内修改变量?当然我可以从这里读取它print(),但是如何修改呢?

python python-2.7

95
推荐指数
3
解决办法
5万
查看次数

操作变量时UnboundLocalError会产生不一致的行为

在Python中,以下代码有效:

a = 1
b = 2

def test():
    print a, b

test()
Run Code Online (Sandbox Code Playgroud)

以下代码有效:

a = 1
b = 2

def test():
    if a == 1:
        b = 3
    print a, b

test()
Run Code Online (Sandbox Code Playgroud)

但是,下列情况工作:

a = 1
b = 2

def test():
    if a == 1:
        a = 3
    print a, b

test()
Run Code Online (Sandbox Code Playgroud)

最后一个块的结果是一条UnboundLocalError消息,说a在分配之前被引用.

我知道我可以做的最后一块工作如果我添加global atest()定义,所以它知道哪些a我在说什么.

为什么在分配新值时不会出错b

我是否创建了一个局部b变量,它并没有对我大喊大叫,因为我不是在分配之前尝试引用它?

但如果是这种情况,为什么我可以print a, b在第一个区块的情况下,而不必global …

python scope

2
推荐指数
1
解决办法
117
查看次数

标签 统计

python ×3

scope ×2

dynamic-languages ×1

python-2.7 ×1