内容正文:
《Python应用程序设计》
Python变量作用域
计算机教科组
1
变量作用域
1.一个程序所有的变量并不是在哪个位置都可以访问的。根据变量位置和作用域将变量分为全局变量和局部变量。
a=1
def fun():
b=2
以上代码中a是全局变量,任何位置都可以访问;b是局部变量,只能在函数内访问。
2.定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
变量 作用域 访问情况
局部变量 局部作用域 局部变量只能在被定义的函数内访问
全局变量 全局作用域 全局变量赋值之后,可供后续的代码进行访问
2
局部变量
1.局部变量只能在其被声明的函数内部访问,而不能在函数外被访问。
函数退出后局部变量被释放
如以下代码:
def fun( ):
x=10 #函数内的局部变量x
print(x) #x是局部变量,不能在函数fun外被访问
运行结果:
NameError: name 'x' is not defined
3
局部变量
2.当一个变量既在函数外有声明,又在函数内部有声明时,可以把它们当成两个不同的变量来处理
(1)声明可以理解为赋值;
(2)以上结论对于可变参数和不可变参数都适用。
(3)这种情况下变量不需要区分是否在自身的基础上做修改
x=10
def fun():
x=10+10
fun()
print(x) #10
x=10
def fun(x):
x=x+10
fun(x)
print(x) #10
fr = []
def myf(fr):
fr = ['12']
myf(fr)
print( fr) #[]
4
变量作用域
1.全局变量一般只能在函数内进行读取,不能修改。如果需要修改,必须使用global关键字进行声明。可变参数除外。
2.一个global语句可以同时定义多个变量,如global x,y,z
函数内读取全局变量
x=10
def fun():
print(x)
fun()
运行结果:10
函数内修改全局变量不使用global
x=10
def fun():
x=x+10
print(x)
fun()
运行结果:
UnboundLocalError: local variable 'x' referenced before assignment
函数内修改全局变量使用global
x=10
def fun():
global x
x=x+10
print(x)
fun()
运行结果:20
5
变量作用域
3.全局变量如果为可变参数,如列表和字典,则在函数内可进行读取,可修改,无需须使用global关键字进行声明
ls = []
def fun():
ls.append(1)
fun()
print(ls)
输出:[1]
d = {1:2,3:4}
def fun():
d[3]=5
fun()
print(d)
输出:{1: 2, 3: 5}
6
变量作用域
4.变量不能同时作为global变量和函数之间传递的变量,否则会报语法错误
x=10
def fun(x):
global x
x=x+10
print(x)
fun(x)
运行结果:SyntaxError: name 'x' is parameter and global
7
变量作用域练习题
ls = []
def func(a,b):
ls.append(b)
return a * b
s = func('Hello!',2)
print(s,ls)
A. 出错
B. Hello!Hello!
C. Hello!Hello! [2]
D. Hello!Hello! []
8
变量作用域:全局变量为可变参数
def test( b = 2, a = 4):
global z
z += a * b
return z
z = 10
print(z, test(),z)
A. 18 None 18
B. 10 18 18
C. UnboundLocalError
D. 18 18 18
注意:函数执行顺序
9
变量作用域:全局变量为可变参数
def hub(ss, x = 2.0,y = 4.0):
ss += x * y
ss = 10
print(ss, hub(ss, 3))
A. 22.0 None
B. 10 None
C. 22 None
D. 10.0 22.0
注意:函数执行顺序
def hub(ss, x = 2.0,y = 4.0):
ss += x * y
retur