python作用域的顺序_【Python】名称空间与作用域/函数的嵌套

201907105483_5533.png

Python名称空间与作用域/函数的嵌套>>>转到思维导图>>>转到

命名关键字参数

在函数定义阶段,写在*和**可变长参数之间的形参

在给命名关键字参数传值的时候,只能用关键字为期传值

在定义阶段 给你感觉好像是z是默认值参数,放在了m这个位置参数的前面了,应该报错

其实z和m都是命名关键字参数,不是默认值参数和位置参数def func(x,y=1,*args,z=3,m,**kwargs):

print(x,y)

print(args)

print(z,m)

print(kwargs)

func(1,2,1,2,3,4,5,6,7,78,8,9,0,z=69,m=999,o=666999,l = 999666)

函数对象

函数是第一类对象:函数名指向的值可以被当中的参数传递

1.函数名可以被传递name = 'jason'

x = name

print(x)

print(id(x))

def func():

print('from func')

# print(func)

print(id(func))

f = func

func()

print(f)

f() # 其实指向的也是函数func指向函数体代码的内存地址

2.函数名可以被党组参数传递给其他函数def func():

print('from func')

def index(args):

print(args)

args()

print('from index')

# index(1)

index(func)

3.函数名可以被当做函数的返回值def index():

print('index')

def func():

print('func')

return index

res = func()

print(res)

res()

4.函数名可以被当做容器类型的参数# def func():

# print('func')

# print(func())

# l = [1,2,func,func()] # [1,2,,None]

# print(l)

# 循环打印项目功能提示信息 供用户选择 用户选择谁就执行谁

def register():

username = input('username>>>:').strip()

pwd = input('password>>>:').strip()

print(username,pwd)

print('register ...')

def login():

print('login ...')

def transfer():

print('transfer ...')

def shopping():

print('shopping...')

def pay():

print('pay ...')

msg = """

1 注册

2 登陆

3 转账

4 购物

5 支付

"""

func_dict = {

'1':register,

'2':login,

'3':transfer,

'4':shopping,

'5':pay,

}

while True:

print(msg)

choice = input('请现在你想要执行的功能>>>:').strip()

if choice in func_dict:

func_dict.get(choice)() # 函数名()

# if choice == '1':

# register()

# elif choice == '2':

# login()

# elif choice == '3':

# transfer()

# elif choice == '4':

# shopping()

# elif choice == '5':

# pay()

else:

print('你输入的功能暂时没有')

函数的嵌套调用

在函数内部调用其他函数可以将复杂的逻辑简单化def my_max(x,y):

if x > y:

return x

return y

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

res1 = my_max(a,b)

res2 = my_max(res1,c)

res3 = my_max(res2,d)

return res3

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

函数的嵌套定义

写一个函数,该函数用户可以通过传参的不同控制函数执行不同的功能def outer():

x = 1

print('outer')

def inner():

print('inner')

# print(inner)

return inner

res = outer()

# print(res)

res()

名称空间

名称空间是存放的变量名与变量值的内存地址的绑定关系的地方

要想访问一个变量的值,必须先去名称空间中拿到对应的名字,才能够访问变量的值

名称空间分类

1.内置名称空间:Python解释器提前给你定义好的名字(已经存放到内置名称空间中了)len

max

min

2.全局名称空间:文件级别的代码x = 1

if 1 ==1 :

y = 2

print(y)

while True:

z = 3

#x,y,z都会放到全局名称空间

#if for while 无论嵌套多少层 它们内部所创建的名字都是全局名称空间的

3.局部名称空间:函数体内创建的名字都属于局部名称空间

生命周期

内置名称空间:只要python解释器已启动立马创建,关闭python解释器的时候内置名称空间自动销毁

全局名称空间:只要你右键运行py文件会自动创建 ,py文件程序运行结束自动销毁

局部名称空间:函数被调用的时候自动创建 函数指向结束立即销毁(动态创建动态销毁)

名称空间查找顺序

需要先确定你当前在哪

1.站在全局:全局 >>>内置

2.站在局部:局部>>>全局>>>内置

函数在定义阶段查找名字的顺序就已经固定了,不会因为函数的调用位置变化而改变x=111

def outer():

def inner():

print('from inner',x)

return inner

f=outer()

x = 222

f()

作用域

全局作用域:全局有效# global 在局部修改全局的不可变数据类型

# x = [] # 因为列表是可变类型

x = 1 # 不可变类型

username = 'jason'

def func():

# x.append('嘿嘿嘿')

global x,username # 修改全局变量 而不是创建局部名称空间

x = 999

username = 'egon'

func()

print(x)

print(username)

局部作用域:局部有效def func():

x = 1

def index():

nonlocal x

x = 2

index()

print(x)

func()

global:局部修改全局 如果想修改多个 逗号隔开

nonlocal:局部修局部 如果想修改多个 逗号隔开

END

本文标题:【Python】名称空间与作用域/函数的嵌套

本文链接:https://zhong-er.com/post/44.html

作者授权:除特别说明外,本文由 從出茳湖 原创编译并授权 中二青年 刊载发布。

版权声明:本文使用「署名-非商业性使用-相同方式共享 4.0 国际」创作共享协议,转载或使用请遵守署名协议。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值