相关疑难解决方法(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万
查看次数

if语句中的Python变量范围

在Python中,if语句中的变量范围是否在if语句之外可见?(来自Java背景,所以发现这有点奇怪)

在下面的例子中,name首先在if-block中定义,但变量在if-block之外也是可见的.我原以为会发生错误但是'joe'会打印出来.

if 1==1:
    name = 'joe'
print(name)
Run Code Online (Sandbox Code Playgroud)

python

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

为什么上下文在with语句后会出现?

我想知道为什么使用with语句或块中打开的文件对象在退出后仍在范围内.正在<closed file>对象曾经清理?

>>> with open('test.txt','w') as f:
...     f.write('test')
...
>>> f
<closed file 'test.txt', mode 'w' at 0x00E014F0>
>>> f.close()


>>> if True:
...     fal = open('demo.txt','w')
...     fal.write('stuff')
...     fal.close()
...
>>> fal
<closed file 'demo.txt', mode 'w' at 0x00E015A0>
Run Code Online (Sandbox Code Playgroud)

python file-io

8
推荐指数
1
解决办法
307
查看次数

为什么'ord'被视为未分配的变量?

我希望它不是重复的(同时很难说,鉴于这些错误的问题数量,但这是基本的错误),但我不明白这里发生了什么.

def f():
    c = ord('a')

f()
Run Code Online (Sandbox Code Playgroud)

运行,没有错误(ord将字符转换为ASCII代码,它是内置的).现在:

if False:
    ord = None
def f():
    c = ord('a')

f()
Run Code Online (Sandbox Code Playgroud)

也运行,没有错误(ord没有被覆盖,条件总是假的).现在:

def f():
    if False:
        ord = None
    c = ord('a')

f()
Run Code Online (Sandbox Code Playgroud)

我得到(在哪里c = ord('a'))

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

似乎仅引用左侧操作数使其成为局部变量,即使代码未运行.

显然我可以解决这个问题,但我非常惊讶,因为python的动态方面允许你定义一个变量,就像是一个整数,并在下一行定义为一个字符串.

它似乎与在if语句中初始化的变量的范围有什么关系

显然,解释器在编译为字节码时仍会记录未到达的分支,但究竟发生了什么?

(在Python 2.7和Python 3.4上测试)

python variables

4
推荐指数
1
解决办法
180
查看次数

Python如何打印超出范围的变量

我在 Python 中有以下函数,似乎可以正常工作:

def test(self):
    x = -1
    # why don't I need to initialize y = 0 here?
    if (x < 0):
        y = 23

    return y
Run Code Online (Sandbox Code Playgroud)

但要使其工作,为什么我不需要初始化变量 y?我以为 Python 具有块作用域,那么这怎么可能呢?

python block

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

为什么python函数在定义之前可以在全局范围内使用变量?

def foo(i):
  print len(A)
  return i < len(A)

if __name__ == '__main__':
  A = [12]
  print A 
  foo(10)
Run Code Online (Sandbox Code Playgroud)

怎么foo知道A

我写这篇是因为stackoverflow坚持我写了更多的单词.

python

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

if语句中的Python生命变量

有人能告诉我在哪里可以找到有关if语句中变量生命周期的一些信息吗?在这段代码中:

if 2 < 3:
   a = 3
else:
   b = 1
print(a)
Run Code Online (Sandbox Code Playgroud)

它打印变量a。但在我看来,它是if语句的局部变量。在 C infacts 中,如果我aif语句中创建变量,它会给我一个错误。

我认为这种行为是因为 Python 是一种解释型语言。我对吗?

python

0
推荐指数
1
解决办法
517
查看次数

标签 统计

python ×7

block ×1

dynamic-languages ×1

file-io ×1

scope ×1

variables ×1