Python乐高积木(一)函数
1.定义函数
def <名字>(参数1,参数2):
2.调用
<名字>(参数1,参数2)
3.return
返回给函数一个值
def add(num1,num2):
return(num1+num2)
print(add(5,6))
注意函数(有结果)与过程(无结果)的不同
形参 只是一个名字,没有具体参数。
实参 是具有具体参数的
4.默认参数和关键字参数
关键字参数是在调用时 默认函数是在定义时
5.收集参数
def test(*par):
print('参数长度:',len(par))
print('第二个参数是',par[1])
test(1,2,3,4,5)
6.局部变量和全局变量
局部变量在函数中
要在函数中修改全局变量,Python会在函数中再生成一个局部变量。
global关键字,在函数中可用 global <参数名>改变全局变量。
7.内嵌函数和闭包
def fun1():
print('1')
def fun2():
print('2')
return fun2()
def fun1(x):
def fun2(y):
return x+y
return fun2
8.lambda表达式
lambda返回的是一个值
f = lambda x,y,z : x+y+z
print f(1,2,3)
9.filter过滤器
list(filter(lambda x : x % 2,range(10)))
10.map()
list(map(lambda x : x + 2,range(10)))
11.递归函数
递归函数:在函数内部,调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 用来理解lijie
汉诺塔
def move(n, a, b, c):
if n == 1:
print('move', a, '-->', c)
else:
move(n-1, a, c, b)
move(1, a, b, c)
move(n-1, b, a, c)
>>> move(4, 'A', 'B', 'C')
在使用递归函数使要注意栈溢出,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。(使用尾递归优化)
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
#尾递归优化后,尾递归是在函数返回的时候,调用自身本身,并且,return语句不能包含表达式
def fact(n):
return fact_iter(n, 1)
def fact_iter(num, product):
if num == 1:
return product
return fact_iter(num - 1, num * product)