神奇语言 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()查看当前作用域中的内容


猜你喜欢

转载自www.cnblogs.com/zhangguangpei/p/10252428.html