函数的基本语法----作用域

文章详细阐述了Python编程中的变量作用域,包括全局变量(作用于整个模块)、局部变量(限于函数内部)以及如何通过global和nonlocal关键字来引用和修改外部作用域的变量。全局变量通常用于常量,应避免过度使用以保持代码可读性和模块间独立性。nonlocal关键字允许在内嵌函数中修改上级函数的局部变量。
摘要由CSDN通过智能技术生成

一 变量的作用域

变量声明的位置不同,其可以被访问的范围也不同。变量的可被访问范围称为变量的作用域。变量按其作用域大致可以分为全局变量、局部变量和类成员变量。

全局变量
在一个源代码文件中,在函数和类定义之外声明的变量称为全局变量。全局变量的作用域为其定义的模块,从定义的位置起,直到文件结束位置

通过 import 语句导入模块,也可以通过全限定名称“模块名.变量名”访问;或者通过 from…import 语句导入模块中的变量并访问。不同的模块都可以访问全局变量,这会导致全局变量的不可预知性。如果多个语句同时修改一个全局变量,则可能导致程序产生错误,且很难发现和更正。

全局变量降低了函数或模块之间的通用性,也降低了代码的可读性。在一般情况下,应该尽量避免使用全局变量。全局变量一般作为常量使用。

局部变量

在函数体中声明的变量(包括函数参数)称为局部变量,其有效范围(作用域)为函数体。
全局代码不能引用一个函数的局部变量或形式参数变量;一个函数也不能引用在另一个函数中定义的局部变量或形式参数变量。如果在一个函数中定义的局部变量(或形式参数变量)与全局变量重名,则局部变量(或形式参数变量)优先,即函数中定义的变量是指局部变量(或形式参数变量),而不是全局变量。

全局语句 global
在函数体中可以引用全局变量,但如果函数内部的变量名是第一次出现且在赋值语句之前(变量赋值),则解释为定义局部变量。

如果要为定义在函数外的全局变量赋值,可以使用 global 语句,表明变量是在外面定义的全局变量。
global语句可以指定多个全局变量,例如 global x, y, z 。一般应该尽量避免这样使用全局变量,全
局变量会导致程序的可读性差。


pi = 3.141592653589793
e = 2.718281828459045
	def my_func():
	global pi
	pi = 3.14
	print('global pi = ', pi)
	e = 2.718
	print('local e = ', e)
print('module pi = ', pi)
print('module e = ', e)
my_func()
print('module pi = ', pi)
print('module e = ', e)


结果:
module pi =  3.141592653589793
module e =  2.718281828459045
global pi =  3.14
local e =  2.718
module pi =  3.14
module e =  2.718281828459045

非局部语句 nonlocal

在函数体中可以定义嵌套函数,在嵌套函数中如果要为定义在上级函数体的局部变量赋值,可以使用nonlocal语句,表明变量不是所在块的局部变量,而是在上级函数体中定义的局部变量。nonlocal语句可以指定多个非局部变量,例如 nonlocal x,y,z 。


def outer_func():
	tax_rate = 0.17
	print('outer func tax rate = ', tax_rate)
	def inner_func():
		nonlocal tax_rate
		tax_rate = 0.05
		print('inner func tax rate = ', tax_rate)
	inner_func()
	print('outer func tax rate = ', tax_rate)
outer_func()


结果:
outer func tax rate =  0.17
inner func tax rate =  0.05
outer func tax rate =  0.05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想做程序猿的员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值