day15
函数参数补充
1 # 1. 命名关键字参数(了解) 2 # 命名关键字参数:在定义函数时,*后定义的参数,如下所示,称之为命名关键字参数 3 # 特点: 4 # 1、命名关键字实参必须按照key=value的形式为其传值 5 # def func(x,y,*,a,b): # 其中,a和b称之为命名关键字参数 6 # print(x,y) 7 # print(a,b) 8 # 9 # # func(1,2,b=222,a=111) 10 11 # 示例 12 # def func(x,y,*,a=11111,b): 13 # print(x,y) 14 # print(a,b) 15 # 16 # func(1,2,b=22222) 17 18 # 2. 组合使用(了解) 19 # 形参混用的顺序:位置新参,默认形参,*args,命名关键字形参,**kwargs 20 # def func(x,y=111,*args,z,**kwargs): 21 # print(x) 22 # print(y) 23 # print(args) 24 # print(z) 25 # print(kwargs) 26 # 27 28 29 # 实参混用的顺序: 30 def func(x,y,z,a,b,c): 31 print(x) 32 print(y) 33 print(z) 34 print(a) 35 print(b) 36 print(c) 37 38 # func(111,y=222,*[333,444],**{'b':555,'c':666}) 39 # func(111,y=222,333,444,b=555,c=666) 40 41 # func(111,*[333,444],a=222,**{'b':555,'c':666}) 42 # func(111,333,444,a=222,b=555,c=66) 43 44 # func(111,*[333,444],**{'b':555,'c':666},a=222,) 45 func(111,3333,4444,b=555,c=666,a=222) 46 47 48 # func(1) 49 # func(x=1) 50 # func(1,x=1) 51 # func(*'hello') 52 # func(**{}) 53 # func(*'hell',**{})
名称空间与作用域
1 # 一:名称空间namespacs:存放名字的地方,是对栈区的划分 2 # 有了名称空间之后,就可以在栈区中存放相同的名字,详细的,名称空间 3 # 分为三种 4 # 1.1 内置名称空间 5 # 存放的名字:存放的python解释器内置的名字 6 ''' 7 >>> print 8 <built-in function print> 9 >>> input 10 <built-in function input> 11 ''' 12 # 存活周期:python解释器启动则产生,python解释器关闭则销毁 13 14 15 # 1.2 全局名称空间 16 # 存放的名字:只要不是函数内定义、也不是内置的,剩下的都是全局名称空间的名字 17 # 存活周期:python文件执行则产生,python文件运行完毕后销毁 18 19 # import os 20 # 21 # x=10 22 # if 13 > 3: 23 # y=20 24 # if 3 == 3: 25 # z=30 26 # 27 # # func=函数的内存地址 28 # def func(): 29 # a=111 30 # b=222 31 32 # class Foo: 33 # pass 34 35 36 37 # 1.3 局部名称空间 38 # 存放的名字:在调用函数时,运行函数体代码过程中产生的函数内的名字 39 # 存活周期:在调用函数时存活,函数调用完毕后则销毁 40 # def func(a,b): 41 # pass 42 # 43 # func(10,1) 44 # func(11,12) 45 # func(13,14) 46 # func(15,16) 47 48 49 # 1.4 名称空间的加载顺序 50 # 内置名称空间>全局名称空间>局部名称空间 51 52 # 1.5 销毁顺序 53 # 局部名称空间>全局名空间>内置名称空间 54 55 # 1.6 名字的查找优先级:当前所在的位置向上一层一层查找 56 # 内置名称空间 57 # 全局名称空间 58 # 局部名称空间 59 60 # 如果当前在局部名称空间: 61 # 局部名称空间—>全局名称空间->内置名称空间 62 # # input=333 63 # 64 # def func(): 65 # # input=444 66 # print(input) 67 # 68 # func() 69 70 71 # 如果当前在全局名称空间 72 # 全局名称空间->内置名称空间 73 # input=333 74 # def func(): 75 # input=444 76 # func() 77 # print(input) 78 79 80 # 示范1: 81 # def func(): 82 # print(x) 83 # x=111 84 # 85 # func() 86 87 # 示范2:名称空间的"嵌套"关系是以函数定义阶段为准,与调用位置无关 88 # x=1 89 # def func(): 90 # print(x) 91 # 92 # 93 # def foo(): 94 # x=222 95 # func() 96 # 97 # foo() 98 99 # 示范3:函数嵌套定义 100 # input=111 101 # def f1(): 102 # def f2(): 103 # # input=333 104 # print(input) 105 # input=222 106 # 107 # f2() 108 # 109 # 110 # f1() 111 112 113 # 示范4: 114 # x=111 115 # def func(): 116 # print(x) # 117 # x=222 118 # 119 # func() 120 121 122 # 二:作用域-》作用范围 123 # 全局作用域:内置名称空间、全局名称空间 124 # 1、全局存活 125 # 2、全局有效:被所有函数共享 126 127 # x=111 128 # 129 # def foo(): 130 # print(x,id(x)) 131 # 132 # def bar(): 133 # print(x,id(x)) 134 # 135 # foo() 136 # bar() 137 138 # print(x,id(x)) 139 140 # 局部作用域: 局部名称空间的名字 141 # 1、临时存活 142 # 2、局部有效:函数内有效 143 144 # def foo(x): 145 # def f1(): 146 # def f2(): 147 # print(x) 148 149 150 151 # LEGB 152 # # builtin 153 # # global 154 # def f1(): 155 # # enclosing 156 # def f2(): 157 # # enclosing 158 # def f3(): 159 # # local 160 # pass
global与nonlocal
1 # 示范1: 2 # x=111 3 # 4 # def func(): 5 # x=222 6 # 7 # func() 8 # print(x) 9 10 # 示范2:如果再局部想要修改全局的名字对应的值(不可变类型),需要用global 11 # x=111 12 # 13 # def func(): 14 # global x # 声明x这个名字是全局的名字,不要再造新的名字了 15 # x=222 16 # 17 # func() 18 # print(x) 19 20 21 # 示范3: 22 # l=[111,222] 23 # def func(): 24 # l.append(333) 25 # 26 # func() 27 # print(l) 28 29 30 # nonlocal(了解): 修改函数外层函数包含的名字对应的值(不可变类型) 31 # x=0 32 # def f1(): 33 # x=11 34 # def f2(): 35 # nonlocal x 36 # x=22 37 # f2() 38 # print('f1内的x:',x) 39 # 40 # f1() 41 42 43 44 def f1(): 45 x=[] 46 def f2(): 47 x.append(1111) 48 f2() 49 print('f1内的x:',x) 50 51 f1()
浙公网安备 33010602011771号