学习python第九天

装饰器

装饰器是修改其他函数的功能的函数。他们有助于让我们的代码更简短

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

开发者可以,提示参数需要传入的类型和结果返回的类型,但是编译器不会判断传入的和注释的是否一致。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值