装饰器
装饰器是修改其他函数的功能的函数。他们有助于让我们的代码更简短
import time
def func(fun):
def wrapper():
print("开始运行程序")
start = time.time()
fun()
stop = time.time()
print("结束")
print("运行时间为:{:.2f}".format(stop - start))
return wrapper
@func
def myfun():
time.sleep(2)
print("aaaa")
# myfun = func(myfun)
myfun()
多个装饰器用在同一个 函数上时,他的调用顺序是从下往上(看下例,先调用cheng,再调用add):
def add(func):
def a():
x = func()
return x +1
return a
def cheng(func):
def b():
x = func()
return x*x*x
return b
@add
@cheng
def fun():
return 2
print(fun())
给装饰器传递参数:其实就是在原来的基础上再嵌套一层函数,用来传递参数
import time
def a(mas):
def b(func):
def c():
start = time.time()
func()
stop = time.time()
print("耗时{:.2f}".format(stop - start))
return c
return b
@a(mas="aaaa")
def e():
time.sleep(2)
print("我是aaa")
@a(mas="bbbb")
def f():
time.sleep(2)
print("我是bbb")
e()
f()
lambda函数表达式(也叫匿名函数):通常用于编写简单的、单行的函数,通常在需要函数作为参数传递的情况下使用,例如在 map()、filter()、reduce() 等函数中。
lambda 函数特点:
- lambda 函数是匿名的,它们没有函数名称,只能通过赋值给变量或作为参数传递给其他函数来使用。
- lambda 函数通常只包含一行代码,这使得它们适用于编写简单的函数
lambda
是 Python 的关键字,用于定义 lambda 函数。arg
是参数列表,可以包含零个或多个参数,但必须在冒号(:
)前指定。expression
是一个表达式,用于计算并返回函数的结果。
list = map(lambda a:a*2,"dhada")
for item in list:
print(item)
#求十以内的奇数
list1 = filter(lambda a:a%2,range(10))
for item1 in list1:
print(item1)
生成器:
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
yield 是一个关键字,用于定义生成器函数,生成器函数是一种特殊的函数,可以在迭代过程中逐步产生值,而不是一次性返回所有结果。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
当在生成器函数中使用 yield 语句时,函数的执行将会暂停,并将 yield 后面的表达式作为当前迭代的值返回。
然后,每次调用生成器的 next() 方法或使用 for 循环进行迭代时,函数会从上次暂停的地方继续执行,直到再次遇到 yield 语句。这样,生成器函数可以逐步产生值,而不需要一次性计算并返回所有结果。
调用一个生成器函数,返回的是一个迭代器对象。
创建生成器的两种方式:
1.使用yield语句:
def a(d):
while d<10:
yield d*2
d += 1
t = a(1)
print(next(t))
for i in t:
print(i)
2.使用生成器表达式:
t = (i for i in range(10))
print(t)
使用生成器实现斐波那契数列:
def add():
a = 0
b = 1
while True:
yield a
a,b = b,a+b
t = add()
print(next(t))
for i in t:
print(i)
递归:就是函数调用自身的过程,必须配合结束条件进行使用
def func(i):
if i>0:
print("dajdha")
i -=1
func(i)
func(10)
def jiecheng(n):
if n==1:
return 1
else:
return n * jiecheng(n-1)
print(jiecheng(10))
#斐波那契数列
def digui(n):
if n==1 or n==2:
return 1
else:
return digui(n-1) + digui(n-2)
print(digui(2))
汉诺塔:
def hannuota(n,x,y,z):
if n ==1:
print(x,'-->',z)
else:
hannuota(n-1,x,z,y)
print(x,"-->",z)
hannuota(n-1,y,x,z)
i = int(input("请输入汉诺塔的层数"))
hannuota(i,'a','b','c')
函数文档:
在定义函数的时候,可以在函数的第一行输入一个字符串,这个字符串就代表了这个函数的注释。注意一般函数文档都是用”“” “”” ,三引号来括起来,因为可以随意换行,看起来更方便,所以print打印出函数注解会自动换行,直接输出的话,遇到换行符就不会生效。
help函数:可以获得注解内容
def add(a,b):
"""
这是一个求和的函数
:param a: 是一个int类型变量
:param b: 是一个int类型变量
:return: a与b相加的结果
"""
return a+b
help(add)
类型注释:
def func(a:str,b:int)->str:
return a*b
开发者可以,提示参数需要传入的类型和结果返回的类型,但是编译器不会判断传入的和注释的是否一致。