Python学习笔记(八):函数参数、函数嵌套、闭包函数、作用域

Python学习笔记

函数相关

1,函数参数:args与kwargs
		1)使用demo
				def index(a, b):
					print(a, b)
				def func(*args, **kwargs):
					index(*args, **kwargs)
				fun(1, 2)
				
		2)个人总结
				函数定义的时候,形参位置的 *args 表示把普通参数保存到元组, **kwargs 表示把关键字参数保存到字典
				实参位置的 *args 表示把元组类型打散,**kwargs 表示把字典转换成关键字实参
				如上demo:
						func(1, 2) 函数调用,*args会把参数全部存到元组中,即args = [1, 2]。如果是 func(1, b='aaa') **kwargs 会把关键字参数存到字典中,即 args = [1],kwargs = {'b':'aaa'}
						注意:func会把接收的参数当作实参传递给index(),所以参数会被打散成index的形参格式,要求index的形参不许有重名,并且参数打散后需要和index的形参个数保持一致

2,函数嵌套
		1)函数的嵌套定义: 在函数内又定义了一个函数
				定义在函数内部的内容有一个效果:函数外无法访问,只有在函数内才可以访问到
				# def f1():
				#     def f2():
				#         print('from f2')
				#     f2()

3,函数对象
		def foo():  # foo->函数的内存地址
   		print('from foo')

		1)可以被赋值
				# f = foo
		2)可以当做参数传入
				# def f1(func):
				#     print('====>f1')
				#     func()
				# f1(foo)  # f1(函数的内存地址)
		3)可以当做返回值
				# def f1(func):
				#     return func
				#
				# f = f1(foo)
				# print(f)
		4)可以当做容器类型的元素
				# x = 10
				# l = [x,foo,foo()]
				# print(l)
				# l[1]()
    	5)定义一个方法集合
    			def login():
				    print('登录功能'.center(50, '*'))
				def register():
				    print("注册功能".center(50, '*'))
				def transfer():
				    print("转账功能".center(50, '*'))
				def withdraw():
				    print("提现功能".center(50, '*'))
				
				func_dic = {
				    "1": ['登录功能', login],
				    "2": ['注册功能', register],
				    "3": ['转账功能', transfer],
				    "4": ['提现功能', withdraw],
				}
				
				while True:
				    print("0 退出")
				    for k in func_dic:
				        print(k,func_dic[k][0])
				    choice = input("请输入命令编号:").strip()
				    if choice == "0":
				        break
				    if choice in func_dic:
				        func_dic[choice][1]()
				    else:
				        print("输入的指令错误")

4,名称空间与作用域
		# 名称空间Namespace:存放名字与内存地址绑定关系的地方
		# 内置名称空间:存放python解释器自带的名字
		局部Local-》外层函数Enclosing-》全局Global-》内置Builtin
			#          L->E->G->B
		名称空间的嵌套关系是在函数定义阶段、扫描语法时就确定好的,与调用位置无关
		global关键字
			# l = []
			# x = 100
			# def foo():
			#     l.append(333)
			#     global x
			#     x = 200
			# print(x) 200
		nonlocal关键字
			x = 111
			def f1():
			    x = 222
			    def f2():
			        nonlocal x
			        x = 333
			    f2()
			    print('==========>f1肚子里的x: ',x) # 333
			
			# f1()
			# print(x) # 111
		
5,闭包函数
		1)闭函数:定义在函数内部的函数
		2)包函数: 内部函数引用了一个来自于外层函数的变量
		3)为函数体传参的两种方案
				1、直接通过参数传入即可
				2、闭包函数
						def outter(x):
						    def wrapper():
						        print('====>wrapper',x)
						    return wrapper  # 不要加括号
						
						wrapper = outter(111)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值