首页 > 代码库 > 函数与作用域
函数与作用域
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*n3 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 b11 b=412 print(b) # 413 a =414 p()15 print(b) # 416 l()17 print(b) # 918 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会报错原因是不能先执行后打印。这也说明的解释器将函数先储存进了内存。
函数与作用域