ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python——变量的作用域_局部变量_全局变量_global 语句

2021-11-28 22:02:38  阅读:208  来源: 互联网

标签:局部变量 函数 basis 作用域 global Python print 100 全局变量


变量的作用域

变量可分为局部变量全局变量,其作用域与变量是基本数据类型还是组合数据类型有关。

局部变量

局部变量指的是定义在函数内的变量其作用范围是从函数定义开始到函数执行结束。

局部变量定义在函数内,只在函数内使用,它与函数外具有相同名称的变量没有任何关系。

例 6-19 局部变量的作用域:

>>> def func1(x,y):
	x1=x
	y1=y
	z=100
	print("in func1(),x1=",x1)
	print("in func1(),y1=",y1)
	print("in func1(),z=",z)
	func2()
	return

>>> def func2():
	x1=10
	y1=20
	z=0
	print("in func2(),x1=",x1)
	print("in func2(),y1=",y1)
	print("in func2(),z=",z)

	
>>> func1('a','b')
in func1(),x1= a
in func1(),y1= b
in func1(),z= 100
in func2(),x1= 10
in func2(),y1= 20
in func2(),z= 0

全局变量

局部变量只能在声明它的函数内部访问,而全局变量可以在整个程序范围内访问。全局变量是定义在函数外的变量,它拥有全局作用域

全局变量可作用于程序中的多个函数,但其在各函数内部只是可访问的、只读的,全局变量的使用是受限的。

1.在函数中读取全局变量

例 6-20 函数外定义的全局变量在函数内读取:

#ex0620.py
basis = 100 #全局变量
def func1(x,y): #计算总分
    sum = basis + x + y
    return sum

def func2(x,y):
    avg = (basis+x*0.9+y*0.8)/3
    return avg

score1 = func1(75,62)
score2 = func2(75,62)
print("-----------------------------")
print("{:6.2f},{:6.2f}".format(score1,score2))
print(basis)
print("-----------------------------")

运行结果如下:

-----------------------------
237.00, 72.37
100
-----------------------------

2.在函数中定义了与全局变量同名的变量

例 6-21 函数中如果定义了与全局变量同名的变量,其实质是局部变量:

#ex0621.py
basis = 100 #全局变量
def func3(x,y):
    basis = 90  #该局部变量与全局变量同名,但与全局变量无关
    sum = basis+x+y
    return sum

print("{:6.2f}".format(func3(75,62)))
print(basis)    #全局变量的值仍为100
print("--------------------------------------")

运行结果如下:

227.00
100
--------------------------------------

3.不允许在函数中先使用与全局变量同名的变量

例 6-22 函数中使用局部变量,导致程序异常:

#ex0622.py
basis = 100 #全局变量
def func4(x,y):
    print(basis)
    basis = 90  #该局部变量与全局变量同名,但与全局变量无关
    sum = basis+x+y
    return sum

print("{:6.2f}".format(func3(75,62)))
print(basis)    #全局变量的值仍为100
print("--------------------------------------")

运行结果如下:

Traceback (most recent call last):
  File "D:/Desktop/Python3/PythonCode_test/Code/ex06/ex0622.py", line 9, in <module>
    print("{:6.2f}".format(func4(75,62)))
  File "D:/Desktop/Python3/PythonCode_test/Code/ex06/ex0622.py", line 4, in func4
    print(basis)
UnboundLocalError: local variable 'basis' referenced before assignment

global 语句

全局变量不需要在函数内声明即可在函数内部读取。

当在函数内部给变量赋值时,该变量将被 Python 视为局部变量,如果在函数中先访间全局变量,再在函数内定义与全局变量同名的局部变量的值,程序也会报异常

为了能在函数内部读/写全局变量, Python 提供了 global 语句,用于在函数内部声明全局变量。

例 6-23 global 语句的应用:

#ex0623.py
basis = 100 #全局变量
def func5(x,y):
    global basis    #声明 basis是函数外的全局变量
    print(basis)    #100
    basis = 90  #该局部变量与全局变量同名,但与全局变量无关
    sum = basis+x+y
    return sum

print("{:6.2f}".format(func5(75,62)))
print(basis)    #90
print("--------------------------------------")

运行结果如下:

100
227.00
90
--------------------------------------

因为在函数内部使用了 global 语句进行声明,所以代码中使用到的 basis 都是全局变量

Python 中还增加了 nonlocal 关键字,用于声明全局变量,但其主要应用在一个嵌套的函数中修改嵌套作用域中的变量。

标签:局部变量,函数,basis,作用域,global,Python,print,100,全局变量
来源: https://blog.csdn.net/XQC_KKK/article/details/121598508

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有