01
在程序中设置的
sum_Logical
属于全局变量
,
而在函数
calculate
中没有
sum_Logical
的定义
,
根据
python
访问局部变量和全局变量的规则:当搜索一个变量的时候,
python
先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,那样
python
就在全局变量中找这个变量,如果找不到抛出异常
(
NAMEERROR
或者
Unbound
-
LocalError
,这取决于
python
版本。
)
02
如果内部函数有引用外部函数的同名变量或者全局变量
,
并且对这个变量有修改
.
那么
python
会认为它是一个局部变量
,
又因为函数中没有
sum_Logical
的定义和赋值,所以报错。
03 从下面两个程序看 单独的访问或者修改全局变量,并不报错 ~
04 #!/usr/bin/python
05 import sys
06 sum = 5
07 def add ( a = 1 , b = 3 ):
08
print
a
,
b
09
print
sum
--
仅仅访问
10 add ( 4 , 8 )
11 print sum
12 [ root @rac3 python ] # python local.py
13 4 8
14 5
15
16 #!/usr/bin/python
17 import sys
18 sum = 5
19 def add ( a = 1 , b = 3 ):
20
print
a
,
b
21
sum
=
b
+
a
--
在函数内部修改
22
print
sum
23 add ( 4 , 8 )
24 [ root @rac3 python ] # python local.py
25 4 8
26 12
27 下面的程序就会因为“如果内部函数有引用外部函数的同名变量或者全局变量 , 并且对这个变量有修改 . 那么 python 会认为它是一个局部变量 , 又因为函数中没有 sum_Logical 的定义和赋值,所以报错”
28 #!/usr/bin/python
29 import sys
30 sum = 5
31 def add ( a = 1 , b = 3 ):
32
print
a
,
b
33
print
sum
34
sum
=
b
+
a
35
print
sum
36 add ( 4 , 8 )
37 print sum
38 [ root @rac3 python ] # python local.py
39 4 8
40 Traceback ( most recent call last ):
41
File
"local.py"
,
line
10
,
in
?
42
add
(
4
,
8
)
43
File
"local.py"
,
line
6
,
in
add
44
print
sum
45 UnboundLocalError : local variable 'sum' referenced before assignment
46 遇到在程序中访问全局变量并且要修改全局变量的值的情况可以使用: global 关键字,在函数中声明此变量是全局变量
47 #!/usr/bin/python
48 import sys
49 sum = 5
50 print '改变之前:sum=' , sum
51 def add ( a = 1 , b = 3 ):
52
global
sum
53
print
'add 函数中:sum='
,
sum
54
sum
=
b
+
a
55
print
'函数中改变之后:sum= '
,
sum
56 add ( 4 , 8 )
57 print '改变之后 sum=' , sum
58 [ root @rac3 python ] # vim local.py
59 改变之前: sum = 5
60 add 函数中 : sum = 5
61 函数中改变之后 : sum =
12
62 改变之后 sum = 12
02
03 从下面两个程序看 单独的访问或者修改全局变量,并不报错 ~
04 #!/usr/bin/python
05 import sys
06 sum = 5
07 def add ( a = 1 , b = 3 ):
08
09
10 add ( 4 , 8 )
11 print sum
12 [ root @rac3 python ] # python local.py
13 4 8
14 5
15
16 #!/usr/bin/python
17 import sys
18 sum = 5
19 def add ( a = 1 , b = 3 ):
20
21
22
23 add ( 4 , 8 )
24 [ root @rac3 python ] # python local.py
25 4 8
26 12
27 下面的程序就会因为“如果内部函数有引用外部函数的同名变量或者全局变量 , 并且对这个变量有修改 . 那么 python 会认为它是一个局部变量 , 又因为函数中没有 sum_Logical 的定义和赋值,所以报错”
28 #!/usr/bin/python
29 import sys
30 sum = 5
31 def add ( a = 1 , b = 3 ):
32
33
34
35
36 add ( 4 , 8 )
37 print sum
38 [ root @rac3 python ] # python local.py
39 4 8
40 Traceback ( most recent call last ):
41
42
43
44
45 UnboundLocalError : local variable 'sum' referenced before assignment
46 遇到在程序中访问全局变量并且要修改全局变量的值的情况可以使用: global 关键字,在函数中声明此变量是全局变量
47 #!/usr/bin/python
48 import sys
49 sum = 5
50 print '改变之前:sum=' , sum
51 def add ( a = 1 , b = 3 ):
52
53
54
55
56 add ( 4 , 8 )
57 print '改变之后 sum=' , sum
58 [ root @rac3 python ] # vim local.py
59 改变之前: sum = 5
60 add 函数中 : sum = 5
61 函数中改变之后 : sum =
62 改变之后 sum = 12