10.函数基础扩展
1.动态传参
'''def chi(*food):
print ('我要吃',food)
chi ('白楼烤肉饭','丸子汤','方便面','可乐')
chi ('杨国福')
chi ('白楼烤肉饭','丸子汤','杨国福','方便面','可乐')
'''
#*food *表示的是不定参数,可以传递任意个信息,参数名是food,接收到的是元组
#*代表的是接收位置的动态传参
#传参的顺序
位置 *args 默认值 **kwargs
#如果默认值参数在*args前面 想让默认值生效 *args将永远接收不到值 # def func( a, b, *args,c = 5): # arguments参数 # print(a, b, c, args) # func(1,2,3,4,5,6,8,c = 10)
关键字的动态传参
# *args 位置参数 接收到的是元组 # **kwargs 关键字的动态传参,接收到的是字典 # def func(**kwargs): # print (kwargs) # func (a =10, b =20,jay = '周杰伦') #kwargs key word arguments # def func(*args,**kwargs): # print (args) # print(kwargs) # func (1,2,3,jj = '林俊杰',jay = '周杰伦') # 无敌模式,所有的参数都能接收
*args 和**kwargs
# def func(*args): #在形参位置把传进来的参数进行耦合,耦合成一个元组 # print (args) # # func(1,2,3,4,5,6) # lst = '娃哈哈' # func(*lst)# 在实参位置 * 表示打散, 打散的是可迭代对象 # def func(**kwargs):#**把接收到的关键字参数打包耦合成字典 # print (kwargs)#必须是字典 # dic = {"张无忌": "明教教主", "谢逊": "金毛狮王", "范瑶": "光明右使"} # func (**dic)#在这里 **是把字典打散,字典key作为参数的名字,字典的值作为参数的值传递给形参
# 在形参上 # # 1.位置参数 # 2.默认值参数 # 3.动态参数 # 1.*args 位置参数的动态传参,系统会自动把所有的位置参数耦合成元组 # 2.**kwargs 关键字的动态传参,系统会自动把所有的关键字耦合成字典 # 3.def func (*args,**kwargs): 无敌传参 # 4.顺序 位置参数 *args 默认值 **kwargs # 5.在使用的时候,可以任意进行搭配 # 4.在实参上,**表示打散 在形参上表示耦合 # # 位置 *args 默认值
2.名称空间
我们给存放名字和值的关系的空间起一个名字:命名空间,我们的变量在存储的时候就是储存在这片空间中的
命名的空间分类
全局命名空间--》我们在py文件中,函数外声明的文件都是全局命名空间
局部命名空间-》在函数中声明的变量会放在局部命名空间
内置命名空间--》存在Python解释器为我们提供的名字,list,str,tuple,int这些都是内置的命名 空间
函数中变量的分类
# 最开始会开辟一个自己的命名空间——内置空间名称 # # 在函数内部属于局部名称空间 # # 直接在py文件一个层面上是全局名称空间 # def func(): # lalala =10 # func() # 加载顺序 # 内置=》全局=》局部 # 取值顺序 # 局部=》全局=》内置
作用域
作用域:变量或者函数的声明周期 全局作用域:全局名称空间+内置名称空间 局部作用域:局部名称空间 qiao = "乔峰" def 抗收音机(): bgm = "难念的经" print("娃哈哈") print(locals()) 抗收音机() print (globals())查看全局作用域中的内容 print(locals()) 查看当前作用域中的内容
3.函数的嵌套
def func1(): print ('我是function1') def func2(): print('我是function2') func1() def func3(): func2() print('我是function3') func3() 这样的代码是互相调用,不是嵌套
def outer(): def inter(): print ('我是内部') print ('我是外部') inter() outer() def outer(): print ('我是外面的') def inter1(): def inter2(): print ('我是里边的2') inter2() print('我是里边的1') inter1() print ('我是外面的收尾') outer() a = 10 def func(): global a #表示的是在当前作用域中使用的a是全局中的变量\ # 结果就是把这个函数中的a的值给全局变量 a = 20 print (a) print (a) func() print (a)
nonlocal
# def outer(): # a = 10 # def inter(): # nonlocal a #a找的是局部当中,离他最近的上层中的那个变量 # a += 20 # print (a) # print (a) # inter() # print (a) # outer ()
需要完全搞懂的知识点
# a = 1 # def fun1(): # a = 2 # def fun2(): # nonlocal a # a = 3 # def fun3(): # a = 4 # print (a) # print (a) # fun3() # print (a) # print (a) # fun2 () # print (a) # print (a) # fun1 () # print (a) # global 引入的是全局变量,可以定义全局变量 # nonlocal 引入局部中离他最近的外部变量
浙公网安备 33010602011771号