作者:也许_枉然 | 来源:互联网 | 2023-01-28 04:06
1.函数1.1函数一般形式1deff():2print(OK)3f()4print(f)函数作用:(1)避免码重复(2)可拓展性强(3)代码一致性这其中需注意:打印出来的f相当于
1.函数
1.1函数一般形式
1 def f():
2 print("OK")
3 f()
4 print(f)
函数作用:
(1)避免码重复
(2)可拓展性强
(3)代码一致性
这其中需注意:打印出来的f相当于是一个变量的地址;只有()才会执行函数;函数有着自己的作用域;函数会预先储存进内存,但是执行还是一行一行来。
1.2形参和实参
1 def num(a,b): 2 print("gaga is %s %s"%a,b)
上述代码中的a,b就是形参。通过形参就可以将外来的数据带入到函数中执行。
在运行函数的时候num(1,2)其中1和2就是实参。实参是根据自己需要输入进去的。
注意:不单单是数字输入其他的如:变量,函数等。
1.3返回值
1 def f(n):
2 return n*n
3 def foo(a,b,func):
4 return func(a)+func(b)
5 print(foo(1,2,f))
返回关键字return后面的内容就是该函数的返回值。返回值的作用是结束函数并且返回一个值。
从上述的代码中可以看出:
(1)返回多个值 return会将其做成一个元组
(2)以函数为实参时注意括号有无很重要
1.4 四种方式
函数 >>> 执行
1.def f(a,b) >>> f(1,2) # 必须一一对应
2.def f(sex="female") # 有默认的效果
3.def f(*args) >>> f (1,2,i,j) # 必须是无命名,也可以元组的形式添加。但是*[1,2,4]这样实参会是一个元组
4.def f(**kwargs) >>> f("name"="a","lk"=23) # 道理同上,但都是键值对。
四种之间的顺序是:1234 其中有些细节应以试验效果为准。没出现歧义为准。
2.作用域
int (a)
1 a =1 2 def f():
3 a =2
4 b =9
5 print(a) # 2
6 def l():
7 # nonlocal b
8 b = 3
9 def p():
10 nonlocal b
11 b=4
12 print(b) # 4
13 a =4
14 p()
15 print(b) # 4
16 l()
17 print(b) # 9
18 f()
此处进行了3次函数的嵌套,共4层,且将最里面一层看成第四层。
作用域的思考搜寻范围一次为:legb即
"build in" >>> int
"global" >>> a = 1
"enclosing" >>> a = 2 b = 3
"local" >>> b = 4 a = 4
总结:
(1)从里往外找。在最里层print(b)中解释器会先在本层找b,本层没有就找到外层的b=3。
(2)里层需要用外层的变量。"若local和enclosing中想修改enclosing中的即内部层修改其上一层(不包括global)的用nonlocal 并且只能修改上一层上上层没影响"例子是注释中的b=9
(3)"变量在没声明的情况下不能修改上一层的,即使变量名字一样也是指在本层中使用(不是同一个变量)"
(4)第四层中若是没声明nonenclosing b 则打印b会报错原因是不能先执行后打印。这也说明的解释器将函数先储存进了内存。