动态传参 (重点)  *    ** 形参  * args在形参位置, *表示不定参数--接受的是位置参数   接受到的位置参数的动态传参:  都是元组 形参的顺序: 位置  *args 默认值  **kwargs   以后写参数,可以随意的进行搭配 def chi(zhushi, cai, fushi, tang, tiandian):     print(zhushi,cai,fushi,tang,tiandian)     chi("大碗大米饭", "火爆大头菜", "把子肉", "西红柿鸡蛋汤", "烤地瓜") chi("小碗大米饭", "火爆大头菜") # 参数不够   形参的顺序(重点):   位置  *args  默认值  **kwargs 以后写参数. 可以随意的进行搭配, 但是, 顺序不能串 **kwargs在形参表示动态传参--关键字参数,关键字动态传参接收到的是字典 **在形参表示动态传参-关键字参数 关键字动态传参接收到的是字典 def func(**kwargs):  # 也是聚合. ** 聚合成字典     print(kwargs)   # func(1,2,3,4,5,6,7) # 位置参数. 报错 func(a=1, b=2, c=3, haha="呵呵", good="not bad") 实参 *在实参的是打散,把列表,元组,字符串打散成位置参数进行传递 ** 在形参表示动态传参--关键字参数;打散,打散成关键字 关于*和**     形参:   聚合               位置参数*   ->元组               关键字**   ->  字典     实参:   打散               列表,字符串,元素   ->  *               字典         ->** 无敌传参 def func(*args, **kwargs): arguments参数  keyword-arguments关键字参数             pass 作用域(重要)和名称空间 名称空间:用来存放名字(变量,函数名,类名,引入的模块)的 1.全局名称空间:我们在py文件中自己写的变量, 函数..... 2.内置名称空间; 我们python解释器提供好的一些内置内容  (print,input..........) 3.局部名称空间: 在我们执行函数的时候,会产生一个局部名称空间.放的是:函数内部的内容 名称空间可能会有无数个,对于局部名称空间.相对是独立的,一般互不干扰 作用域: 1.全局作用域:  内置+全局 2.局部作用域:   局部 从全局找局部-> 找不到 从局部找全局-> 可以找到 怎么查看全局或局部中的内容:   globals  全局作用域: 内置+全局名称空间   locals  查看当前作用域的内容 def chi():     a = 20     b = 30     print(locals()) # 查看当前作用域中的内容     print(globals()) # alex,老男孩儿, 武sir, 全局作用域中的内容 chi() print(locals()) # 全局 print(globals()) # 全局 函数的嵌套 nonlocal和global   关键字(重点) global  表示从全局把一个变量引入局部,后面使用的都是全局变量 nonlocal   在局部,寻找离他最近的外层的一个变量 如果没有global和nonlocal  ,查找的顺序:自己,上一层,上一层,上一层 函数的互相调用 def func1():     print("我是神器的func1")   def func2():     func1()     print("我是神器的func2")   def func3():     print("我是神器的func3")     # func5()   def func4():     func3()     print("我是神器的func4")   def func5():     func2()     func3()     print("我是神器的func5")   def func6():     func5()     print("我是神器的func6")     func3()     func1()   func6() def outer():     def inner():         print("我的天哪")     print("还可以这样写???")     inner()   outer()   inner() # 在全局不能找到局部的内容   def func1():     print("1")     def func2():         print("2")         def func3():             print("3")         print("4")         func3()         print(5)     print("6")     func2()     print("7")   func1()     全局变量一般是不能随意的修改的 a = 10 def func():     # 慎用.     global a  # global 表示从全局把一个变量引入到局部, 后面使用的a都是全局变量     a += 10 # ?? a = a + 10 # 现在的a是全局的, 你现在视图改全局变量     print("里面的打印",a) func() print("外面的打印", 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 查找的顺序: 自己, 上一层, 上一层, 上一层   def func0():     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) func0()     a = 1 def fun_1():     a = 2     def fun_2():         nonlocal a         a = 3         def fun_3():             a = 4             print(a)         print(a)         fun_3()         print(a)     print(a)     fun_2()     print(a) print(a) fun_1() print(a)   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("滚去登录")   login()   fatie() fatie() fatie() fatie()  
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄