全局与局部变量
- 定义在函数外部一级代码的变量,叫全局变量,全局可用。
- 局部变量就是指定义在函数里的变量,只能在局部生效。
- 在函数内部,可以引用全局变量。
- 如果全局和局部都有一个变量叫name,函数查找变量的顺序是由内而外的。
locals()对象的值不能修改,globals()对象的值可以修改。
1 1 #test globals() and locals() 2 2 3 3 z=0 4 4 def f(): 5 5 z = 1 6 6 print (locals()) 7 7 locals()["z"] = 2 8 8 print (locals()) 9 9 f() 10 10 globals()["z"] = 2 11 11 print (z)
可以得出,两个print (locals())的结果是一样的,说明没有修改成功。而print (z)的值是2,说明修改成功了
作用域
作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
如何在函数里修改全局变量?
name = "Alex Li" def change_name(): global name name = "Alex 又名 金角大王,路飞学城讲师" print("after change", name) change_name() print("在外面看看name改了么?", name)
global name
的作用就是要在函数里声明全局变量name ,意味着最上面的name = "Alex Li"
即使不写,程序最后面的print也可以打印name。
结果:
- after change Alex 又名 金角大王,路飞学城讲师
- 在外面看看name改了么? Alex 又名 金角大王,路飞学城讲师
嵌套函数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
name = "Alex" def change_name(): name = "Alex2" def change_name2(): name = "Alex3" print("第3层打印", name) change_name2() # 调用内层函数 print("第2层打印", name) change_name() print("最外层打印", name)
输出
第3层打印 Alex3 第2层打印 Alex2 最外层打印 Alex
匿名函数
匿名函数就是不需要显示的指定函数名。主要和其他函数搭配使用。
res = map(lambda x:x**2,[1,5,7,4,8]) for i in res: print(i)
输出
1 25 49 16 64
高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数
只需满足以下任意一个条件,即是高阶函数:
- 接受一个或多个函数作为输入
- return 返回另外一个函数
递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数
def calc(n): print(n) if int(n/2) ==0: return n return calc(int(n/2)) calc(10)
内置函数