Python3 函数基础2
发布时间:2020-12-20 10:38:37 所属栏目:Python 来源:网络整理
导读:目录 可变长参数 可变长形参: *args 可变长实参: *容器类 可变长形参: **kwargs 可变长实参: **字典 函数对象 引用 当做容器类型元素 当做参数传给一个函数 当做函数的返回值 函数对象应用 名称空间和作用域 名称空间 内置名称空间 局部名称空间 全局名称空
目录
可变长参数可变长形参: *args形参中的* 会将溢出的位置实参全部接收,然后以元祖的形式存储,并将元祖赋值给*后面的args # 我们习惯把*后面的形参叫做args def func(a,*args): print(args) func(1,2,3,4) # (2,4) 可变长实参: *容器类实参中的*会将其后面的容器类型的元素(列表,集合,元祖,字典)依次取出,变成位置实参 def func(a,b,c,d): print(a,d) tup = (2,3) func(1,*tup,4) # 1 2 3 4 可变长形参: **kwargs形参中的**会将溢出的关键字实参全部接收,然后以字典的形式存储,并赋值给后面的kwargs # 我们习惯把**后面的形参叫做kwargs def func(a,**kwargs): print(kwargs) func(1,b=2,c=3) # {'b': 2,'c': 3} 可变长实参: **字典实参中的**会将其后面的字典类型key:value取出,转化为关键字实参(key=value) def func(a,**kwargs): print(**kwargs) dic = {'c':3,'d':4} func(1,**dic) # {'c': 3,'d': 4} 函数对象我们可以把函数看做一种数据类型,函数名就是这个函数的函数对象 引用def func(): print('from func') print(func) # <function func at 0x00000000024C1E18> f = func f() # from func 当做容器类型元素def func(): print('from func') lis = [func,1,3] lis[0]() # from func 当做参数传给一个函数def func1(): print('from func1') def func2(x): x() func2(func1) # from func1 当做函数的返回值def func(): print('from func1') def func2(x): return x res = func2(func1) res() # from func1 函数对象应用# 简易购物系统 def register(): print('注册') def login(): print('登录') def shopping(): print('购物') func_dict = { '1': register,'2': login,'3': shopping } while True: print(''' 1 注册 2 登录 3 购物 ''') choice_inp = input('请选择你需要的功能(输入q退出): ') if choice_inp == 'q': break func_dict[choice_inp]() 名称空间和作用域名称空间用来存储名称的空间(变量名/函数名等) 内置名称空间存储了Python内置方法的名称 局部名称空间存储了函数内部定义的名称 全局名称空间除了内置和局部的名称都存储在全局名称空间 空间名称的生成顺序
名称空间搜索顺序比如我们现在要 搜索顺序: 先从当前名称空间开始寻找,找不到会按着 作用域全局作用域全局有效,全局存活,包含内置名称空间+全局名称空间 局部作用域局部有效,临时存储,只包含局部名称空间 注意事项
def func(): x = 1 print(f'局部作用域x: {x}') x = 2 func() # x = 1 print(f'全局作用域x: {x}') ''' 局部作用域x: 1 全局作用域x: 2 '''
def func1(): x = 1 def func2(): x = 2 print(f'局部作用域2中x: {x}') func2() # x = 2 print(f'局部作用域1中x: {x}') func1() ''' 局部作用域2中x: 2 局部作用域1中x: 1 ''' 补充
x = 1 def func(): global x # global声明x为全局变量 x = 2 func() print(x) # 2
def func1(): x = 1 def func2(): nonlocal x # nonlocal声明x为顶层函数的局部作用域变量 x = 2 f2() print(x) func1() # 2
lis = [] def func(): lis.append(1) print(f"调用函数前: {lis}") func() print(f"调用函数后: {lis}") ''' 调用函数前: [] 调用函数后: [1] ''' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |