神奇语言 python 函数的进阶
动态传参
def eat(*qwe): #*聚合 打包
print(qwe) #元祖
#形参位置: 位置参数> 动态位置参数
eat()
def eat(b= 1,**kargs): #b =1 b =2
print(kargs)
eat("a=1","c=4","d=5","f=22")
#动态关键字参数 默认参数> 动态默认参数
def func(a,b,*args): #聚合
print(a,b,*args) #打散 *
func(1,2,3,4,5,6,7)
def func (a=1,b=2,c=4,**kwargs): #聚合
print(a,b,c,kwargs) #
func(a=2,b=1,c=4,q=88)
形参的顺序(重点):
位置 *args 默认值 **kwargs
以后写参数. 可以随意的进行搭配, 但是, 顺序不能串
* 在形参位置. * 表示不定参数-接收的是位置参数
接收到的位置参数的动态传参: 都是元组
def chi(*food): # 在形参这里把传递过来的实参进行了聚合,聚合成了元组
print(food)
形参:
*->元组, **->字典 表示聚合
实参:
*->列表,字符串,元组, **->字典 表示打散
无敌传参 def func(*args, **kwargs): # 参数没有限制. 随便传递 print(args) print(kwargs) func(1,2,3,4, a=3,b=5)
函数的嵌套;
global a # global 表示从全局把一个变量引入到局部, 后面使用的a都是全局变量
a = 10 # def func(): # def inner(): # # 慎用. # global a # global 表示从全局把一个变量引入到局部, 后面使用的a都是全局变量 # a += 10 # ?? a = a + 10 # 现在的a是全局的, 你现在视图改全局变量 # print("里面的打印",a) # inner() # func() # print("外面的打印", a)
nonlocal 在局部, 寻找离他最近的外层的一个变量
a = 50 # def func1(): # # a = 10 # 局部 # def func2(): # nonlocal a # 不找全局, global找全局 # a += 10 # a = a + 10 python不让这么干 # print("func2", a) # func2() # print(a) # func1() # print(a) # 如果没有nonlocal和global 查找的顺序: 自己, 上一层, 上一层, 上一层
一般global 和nonlocal 用在那里
flag = False def login(): global flag uname = input("用户名:") upwd = input("密码:") if uname == "alex" and upwd == "123": flag = True else: flag = False def fatie(): if flag == True: print("可以发帖") else: print("滚去登录")
globals()全局查看局域内容
locals()查看当前作用域中的内容