nonlocal关键字
强制声明其变量不是一个局部变量
>>>def fun1():
x = 5
def fun2():
x*=x
return x
return fun2()
>>>fun1()
#会报错,因为在fun2()中,自动屏蔽外部变量,x没有定义
通过nonlocal关键字:
>>>def fun1():
x = 5
def fun2():
nonlocal x
x*=x
return x
return fun2()
>>>fun1()
>>>25
-
递归
-阶乘
>>>def factorial(n):
if n == 1:
return 1
else:
return n*factorial(n-1)
number = int(input('请输入:')
result = factorial(number)
print('%d 的阶乘是:%d' % number,result)
具体过程:
若n值为5,那么:
factorial(5) = 5 * factorial(4)
factorial(4) = 4 * factorial(3)
factorial(3) = 3 * factorial(2)
factorial(2) = 2 * factorial(1)
factorial(1) ,返回1
因此,factorial(5) = 5*4*3*2*1
-
斐波那契数列
1,1,2,3,5,8,13,21,34,55,89,144...
迭代
>>>def fab(n):
n1 = 1
n2 = 1
n3 = 1
if n < 1:
print('输入有误')
return -1
while (n-2) > 0:
n3 = n2 + n1
n1 = n2
n2 = n3
n - = 1
return n3
递归
当n=1,n=2时,Fn=1
当n>2,F(n-1)+F(n-2)
>>>def fab(n):
if n<1:
print('输入有误')
return -1
if n == 1 or n == 2:
return 1
else:
return fab(n-1) + fab(n-2)
>>>result = fab(20)
if result != -a:
print('总数为%d只' % result)
相比之下,迭代运行速度更快
-
lambda表达式
匿名函数
作用:
- 省下定义函数过程
- 不用考虑命名问题
- 简化代码可读性
>>>def ds(x)
return 2*x+1
>>>ds(5)
>>>11
>>>lambda x:2*x+1 #冒号前面为原函数参数,后面为原函数返回值
>>>g = lambda x:2*x+1
>>>g(5)
>>>11
-
BIF
filter(),相当于过滤器
>>>filter(None,[1,0,False,True])
>>>list(filter(None,[1,0,False,True]) 等同于 >>>list(filter(lambda x:x%2,range(10)))
>>>[1,True] >>>[1,3,5,7,9]
>>>def add(x):
return x%2
>>>temp = range(10)
>>>show = filter(add,temp)
>>>list(show)
>>>[1,3,5,7,9]
-
map()
映射 map(function or None,iterable)
>>>list(map(lambda x:x*2,range(10)))
>>>[0,2,4,6,8,10,12,14,16,18]