在下面的程序中,我尝试在函数内部分配具有不同值的oct,然后打印它。在outer_function()中,我指定oct = 10(第10行),这是私有变量。但我添加"全球oct"在第20行。所以我得到了一个Syntaxwarning。虽然奇怪的是我得到第19行的输出" oct在outer_function 2 = ABC"。这一行在全局声明之前,我认为它应该在第10行指定。
1 #! /usr/bin/env python
2
3 """
4 Program: function_scope.py
5 Function: Program for working through scope rules
6
7 """
8
9 def outer_function():
10 oct = 10
11 print "oct in outer_function 1 =", oct
12 def inner_function():
13 global oct
14 oct = "ABC"
15 print "oct in inner_function =", oct
16
17
18 inner_function()
19 print "oct in outer_function 2 =", oct
20 global oct
21 #del oct
22
23 oct = 0
24 print "oct in module before =", oct
25
26 outer_function()
27
28 print "oct in module after =", oct
29
30 print "That's all folks!"
我得到的结果是:
In [245]: run ch05_03_function_scope.py
/home/sherlock/Desktop/IntroductionPython/Ch05_functions/ch05_03_function_scope.py:20: SyntaxWarning: name 'oct' is assigned to before global declaration
global oct
oct in module before = 0
oct in outer_function 1 = 10
oct in inner_function = ABC
oct in outer_function 2 = ABC
oct in module after = ABC
That's all folks!
答案 0 :(得分:0)
global
的{{1}}声明是否在oct
的值分配之前或之后无关紧要。这里oct
将是整个函数的全局名称。它暂时不能是局部变量,后来变成全局变量。您会收到语法警告,因为将oct
语句作为函数中的第一项内容是非常好的做法。
要自行检查,请将global
添加到您的功能中:
print locals()
现在,运行你的程序。它会打印出来:
{}
这意味着没有当地人。所以第10行中的def outer_function():
oct = 10
print locals()
没有创建
由于第20行中的oct = 10
而导致的局部变量。
现在,注释掉global oct
声明
global
再次运行您的程序。它会打印出来:
print "oct in outer_function 2 =", oct
#global oct
现在你有一个在第10行创建的局部变量。