Python 基础 7 函数 作用域 全局变量 局部变量

作用域
作用域指的是变量在程序中的可应用范围。
作用域按照变量的定义位置可以划分为4类即LEGB:
Local(函数内部)局部作用域。
Enclosing(嵌套函数的外层函数内部)嵌套作用域(闭包)。
Global(模块全局)全局作用域。
Built-in(内建)内建作用域。

Python搜索4个作用域[本地作用域(L)之后是上一层结构中def或者lambda的本地作用域(E),之后是全局作用域(G)最后是内置作用域(B)(即python的内置类和函数等)]
并且在第一处能够找到这个变量名的地方停下来。如果变量名在整个的搜索过程中都没有找到,Python就会报错。

注意:
在python中,模块(module),类(class)、函数(def、lambda)会产生新的作用域,其他代码块是不会产生作用域的,也就是说,类似条件判断(if……else)、循环语句(for x in data)、异常捕捉(try…catch)等的变量是可以全局使用的。

b = 20  #b变量声明了全局的的作用域,因此可以再全局使用
def func():
	a =10    # a变量在局部作用域中,a变量的作用域范围就是整个函数体
	print(a)
	print(b)
print(a)  #报错   因为a变量已经出了自己作用域的范围
func()
print(b)   #能正常运行
c = 30
def outter():
	a = 10
	def inner():
		b = 20
		print(b)
		print(a)   #访问嵌套作用域中的内容
		print(c)   #访问全局作用域中的内容
	inner
	#print(b)  #出了自己的范围
	print(a)
print(c)
#print(a)   #报错
outter()

3,变量的搜索范围

a = 1
def outter():
	a = 10
	def inner():
		a = 20
		#print(a)  #20-->10-->1
	inner()
	#print(a) #  10 -->1
outter
print(a) #1

全局变量和局部变量
在函数中定义的变量称为局部变量,只在函数内部生效
在程序一开始定义的变量称为全局变量,全局变量的作用域是整个程序

name = 'zs'  # 全局变量

def func():
    name = 'ls'  # 局部变量
    print(name)

func()

全局变量是不可变数据类型,函数无法修改全局变量的值
全局变量是可变数据类型,函数可以修改全局变量的值

a = 10
lst =[12,3]
def func(c,lst):
	c = 20
	lst1.append(4)
	print(c,lst1)
func(a,lst)
print(a,lst)
结果:
20 [12, 3, 4]
10 [12, 3, 4]
a = 10
lst = [1, 2, 3]
def func():
    a = 30
    print(a)
    lst.append(4)
func()
print(a)
print(lst)
结果:
30
10
[1, 2, 3, 4]

猜你喜欢

转载自blog.csdn.net/weixin_44303465/article/details/85801106