python函数名的作用_python函数篇:名称空间、作用域和函数的嵌套

一、名称空间:(有3类)

(1)内置名称空间(全局作用域)

(2)全局名称空间(全局作用域)

(3)局部名称空间(局部作用域)

关于名称空间的查询:

x=1

def func():

print('from func')

x=2

a=1

b=2

print(globals())#打印全局名称空间

print(locals())#打印局部名称空间

func()

执行结果是:

from func

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.sourcefileloader object at>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'E:/飞秋/徐圆圆课程视频/Python fullstack s4 基础篇-day21/day21/名称空间的查询.py', '__cached__': None, 'x': 1, 'func': }

{'b': 2, 'a': 1, 'x': 2}

查询名称空间的全局变量:globals()

查询名称空间的局部变量:locals()

查询局部变量,只能在局部使用,在全局使用时,局部变量的查询结果和全局变量的查询结果一致

示例:

x=1

def func():

print('from func')

x=2

a=1

b=2

print(globals())#在局部打印全局

print(locals())#在局部打印局部

func()

a=globals()

print(a)#在全局打印全局

b=locals()

print(b)#在全局打印局部

print(a == b)#判断在全局打印局部和全局的结果是否一致

执行结果是:(验证了:查询局部变量,只能在局部使用,在全局使用时,局部变量的查询结果和全局变量的查询结果一致)

from func

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.sourcefileloader object at>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'E:/飞秋/徐圆圆课程视频/Python fullstack s4 基础篇-day21/day21/名称空间的查询.py', '__cached__': None, 'x': 1, 'func': }

{'b': 2, 'a': 1, 'x': 2}

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.sourcefileloader object at>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'E:/飞秋/徐圆圆课程视频/Python fullstack s4 基础篇-day21/day21/名称空间的查询.py', '__cached__': None, 'x': 1, 'func': , 'a': {...}}

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.sourcefileloader object at>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'E:/飞秋/徐圆圆课程视频/Python fullstack s4 基础篇-day21/day21/名称空间的查询.py', '__cached__': None, 'x': 1, 'func': , 'a': {...}, 'b': {...}}

True

全局与局部变量

在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。

全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

当全局变量与局部变量同名时:

在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

示例:

x=1 #x=1为全局作用域

def foo():

x=20 #x=20为局部作用域

print(x)

foo() #函数执行时,首先去局部找x的变量值,故打印结果为20

print(x)#输出的x是全局变量内的x,函数内的x与全局的x无关,故打印结果为1

打印结果是:

20

1

总结:

关于函数的作用域找名称的查询顺序是:

先去局部找,局部没有的话,再去全局查找,全局没有的话,再去内置找(先局部在全局最后内置)

二、函数的嵌套:(2个方面)

(1)、函数的嵌套调用:(函数内调用之前定义好的函数)

示例:

# 函数的调用:

def my_max(x,y):

res=x if x>y else y#比较x和y的大小,取较大值

return res

def my_max4(a,b,c,d):

res1=my_max(a,b)#调用上面的函数,将最大值取出

res2=my_max(res1,c)#调用上面的函数,将最大值取出后和c比较取最大值

res3=my_max(res2,d)#调用上面的函数,将最大值取出后和d比较取最大值

return res3

print(my_max4(1,2,3,4))

执行结果是:

4

(2)、函数的嵌套定义:(即函数内再定义函数)

示例:

def foo1():

x=1

print("foo1",x)

def foo2():

x=2

print("foo2",x)

def foo3():

x=3

print("foo3",x)

foo3()

foo2()

foo1()

执行结果是:

foo1 1

foo2 2

foo3 3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值