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