12. Python脚本学习笔记十二作用域与递归
本篇名言:“面对困难,微笑含着勇敢;面对挫折,微笑带着自信;面对误解,微笑露出宽容;面对冷漠,微笑洋溢热情;面对爱情,微笑代表真心。愿你微笑面对人生。”
1. 作用域
Python 有个内建的vars函数可以返回变量字典。如下:
>>>x=1
>>> scope=vars()
>>> scope['x']
1
>>> scope['x']+=1
>>> scope['x']
2
这个字典叫做命名空间或者作用域。
每个函数调用都会创建一个新的作用域。
deffoo():
x=42
print x
x=1
foo()
print x
输出如下:
42
1
可以通过函数globals函数获取全局变量值。
如下:
>>> x=1
>>> globals()['x']
1
如果想在函数中引用全局变量,可以通过 global x引用。
2. 递归
函数可以调用自身。就可以简单理解成递归调用。
2.1 阶乘
什么是阶乘 蛤蟆就不说了,不知道就去看下高中数学。
正常版本实现如下:
deffactorial(n):
result=n
for i in range(1,n):
result *= i
return result
print factorial(3)
递归实现:
deffactorial(n):
if n == 1:
return1
else:
return n*factorial(n-1)
print factorial(3)
2.2 幂
递归实现如下:
defpower(x,n):
if n==0:
return1
else:
return x*power(x,n-1)
print power(2,4)
递归可以用循环来替换的,但是在多数情况下,递归更加易读,有时会大大提高可读性。