1.函数的基本用法示例:
def func01(name, times):
for i in range(times):
print(f"i love {name}")
func01("Python",2) #输出”i love Python“两遍
def func02(a,b,c):
return "".join((a,b,c))
print(func02("我","爱","Python")) #输出 我爱Python
def func03(x,y,z):
return x,y,z
x , y ,z=func03(1,2,3)
print(x,y,z) #输出 1 2 3
打包与解包:
##打包参数:
def func04(*args): #打包参数(即参数的个数不确定)
print(args)
func04(1,2,3) #输出 (1, 2, 3)
##key:word
def func05(**kwargs): #key:word
print(kwargs)
func05(a=1,b=2) #输出{'a': 1, 'b': 2}
##综合应用:
def totalFunc(a,*b,**c):
print(a,b,c)
totalFunc(1,2,3,x=5,y=6) #1 (2, 3) {'x': 5, 'y': 6}
##解包参数:
def func06(a,b,c,d):
print(a,b,c,d)
tuple = (1,2,3,4)
func06(*tuple) #*是用来对元组解包,输出1 2 3 4
kwargs ={'a':1,'b':2,'c':3,'d':4}
func06(**kwargs) #**对字典解包,输出1 2 3 4
2. 嵌套函数:
def funcA():
x = 50
def funcB():
x = 60
print(x)
funcB()
print(x)
funcA() #输出60 50
3.闭包
def power(i):
def exp(j):
print(i**j) #代表幂
return exp
square = power(2)
cube=power(3)
print(square(2)) #输出2^2
print(cube(4)) #输出3^4
def outer():
x = 0
y = 0
def inner(x1,y1):
nonlocal x,y #将局部变量化为外部变量
x+=x1
y+=y1
print(x, y)
return inner
move = outer()
print(move(1,2)) #输出1 2
print(move(-1,-2)) #输出0 0
4.装饰器:把函数作为变量调用
import time
def time_master(func):
def call_func():
start=time.time()
func()
end=time.time()
print(f"一共耗费了{int(end-start)}秒")
return call_func
def myFunc():
time.sleep(2)
print("myFunc函数已调用")
myFunc=time_master(myFunc)
myFunc() #myFunc函数已调用 一共耗费了2秒
5.labmda表达式:
squareX = lambda x:x*x #左边代表输入值,右边代表输出值
print(squareX(2)) #输出4
y=[lambda x:x*x,2,3,]
print(y[0](y[1])) #输出4
mapped = map(lambda x:ord(x)+10 ,"fishC")
print(list(mapped)) #[112, 115, 125, 114, 77]
6.迭代函数:
例一:求阶乘
def factRecur(n):
if n==1:
return 1
else:
return n*factRecur(n-1)
print(factRecur(5)) #输出5!
例二:求斐波那契数列
def fibi(n):
a=1
b=1
c=1
while n>=2:
c=a+b
a=b
b=c
n-=1
return n
def fibiIncur(n):
if n ==1 or n==2:
return 1
else:
return fibi(n-1)+fibi(n-2)
print(fibiIncur(3)) # 输出2
例三:汉诺塔:
def hanoi(n,a,b,c): #一共三层,分别命名为a b c
if n==1:
print(a,'-',c) #如果只有一层,直接从a层移动到c层
else:
hanoi(n-1,a,c,b) #把n-1层当作一个整体,从a移动到b
print(a,'-',c) #把最后一层从a移动到c
hanoi(n-1,b,a,c) #把n-1层当作一个整体,从b移动到c
hanoi(3,'第一层','第二层','第三层') #输入4个参数
7.函数类型注释
#表示两个参数,其中一个为list类型,
# 另一个为int类型,且值为3,
# 返回值为string类型
def times(s:list,n:int=3) ->str :
return s * n
print(times([1,2,3])) #[1, 2, 3, 1, 2, 3, 1, 2, 3]
def times(s:dict[str,int] ,n:int=2) ->list:
return list(s.keys()) *n
print(times({'x':1,'y':2,'z':3}))
#['x', 'y', 'z', 'x', 'y', 'z']
8. functools中的高阶函数:
8.1 reduce函数
import functools
def add(x,y):
return x+y
a =functools.reduce(add,range(1,5))
print(a) #reduce表示不断调用add函数,将1 2 3 4传入
#add(add(add(1,2),3),4)
b= functools.reduce(lambda x,y:x*y,range(1,11))
print(b) #输出 10!
8.2偏函数:
square =functools.partial(pow,2)
print(square(2)) #输出4