python进阶day11

python进阶之路

Day11

hello world!今日是python学习的第十一天,我将会在下面文章对基础语法进行一些介绍,主要为装饰器、迭代器与生成器等。

1 装饰器

1.1 什么是装饰器

​ 装饰器本质就是一个实参高阶函数与返回值高阶函数
​ 装饰是用来给函数添加功能(在不修改原函数的基础上给函数添加功能)

​ 返回值高阶函数

import time


def func1():
    def func2():
        return 'abc'
    return func2


print(func1()())
1.2 怎么给函数添加功能

​ 方法一:直接修改函数:代码需要写多遍,麻烦。

def sum1(a,b):
 time1 = time.time()
 print(a+b)
 time2 = time.time()
 print('执行时间:',time2 - time1)


sum1(3,8)


def factorial(n):
    sum1 = 1
    for x in range(1,n+1):
        sum1 *= x
    print(sum1)


factorial(5)

​ 方法二:实参高阶函数
​ 定义一个函数功能是统计一个函数的执行时间

def count_execution_time(func,*args,**kwargs):
    time1 = time.time()
    func(*args,**kwargs) #可以给任意多函数的参数添加功能
    time2 = time.time()
    print('执行时间',time2 - time1)


def func2():
    print('你好,世界!')


count_execution_time(func2)
count_execution_time(factorial,10)

​ 解包:

def test(*args,**kwargs):
    print(args,kwargs)
    print(*args,**kwargs)


def test2(a,b,c):
    print(f'a:{a},b:{b},c:{c}')


test(398,56,'dds')
#test(a=10,b=20)


test2(10,20,30)
nums = [10,20,30]
test2(*nums)

​ 方法三:装饰器-实参高阶函数改进

def count_execution_time(func):
    def test():
        time1 = time.time()
        func()
        time2 = time.time()
        prnt('执行时间:',time2 - time1)
    return test

def func4(m):
    print('============')


func4 = count_execution_time(func4)
func4(10)

​ 方法四:装饰器
​ def 函数名1(func):
​ def test(*args,***kwargs):
​ func(*args,***kwargs)
​ 添加新的功能
​ return test
​ 说明:
​ 函数名1 - 装饰器对应的函数名,也是装饰器的名字(根据需要添加的新功能命名)
​ func - func指向的就是需要添加新功能的函数
​ test - 指向的是已经添加完功能的新的函数

def func1():
    print('=========')


def print_end(func):
    def test(*args,**kwargs):
        func(*args,**kwargs)
        print('end')
    return test

@print_end
def sum2(a,b):
    print(a+b)


sum2(2,3)

​ 写一个装饰器在原函数执行前打印‘start。。。’

def print_start(func):
    def test(*args,**kwargs):
        print('start。。。。。')
        func(*args,**kwargs)
    return test

@print_start
def func4(a,b):
    print('哈哈啊',a+b)


func4(3,98)

​ 定义一个装饰器,将原函数的返回值转换成字符串:

def switch_str(func):
    def test(*args,**kwargs):
        result = func(*args,**kwargs)
        return str(result)
    return test

​ 练习:写一个装饰器,可以给返回值是数字的函数添加新的功能:让原函数的结果保留两位小数。

def two_deci(func):
    def test(*args,**kwargs):
        result = func(*args,**kwargs)
        if type(result) in (int,float):
            return f'{result:.2f}'
        else:
            return result
    return test# test相当于一个变量,test函数内


@two_deci
def sum1(a,b):
    e= a+b
    return e


print(sum1(1,2))

##### 1.3 有参的装饰器

​       如果在实现装饰器新增的功能的时候需要额外的数据,那么就可以使用有参的装饰器

​       def 装饰器名称(装饰器的参数列表):
​              def test1(func):
​                     def test2(\*args,\*\*kwargs):
​                             funnc(\*args,\*\*kwargs)
​                            添加新的功能
​                      return test2
​              return test1

​       练习:写一个装饰器让函数的返回值保留N位小数(返回值是数字的时候)

```python
def constraint_decimals(n):
    def test1(func):
        def test2(*args,**kwargs):
            result = func(*args,**kwargs)
            if type(result) == int:
                return str(result)+'.'+'0'*n
            elif type(result) == float:
                nums = str(result).split('.')[-1]
                return f'{nums[0]}.{nums[-1][0:n]}'
            return result
        return test2
    return test1

@constraint_decimals(3)
def sum1(a,b):
    return a+b


print(sum1(2.154463543545,3))

​ 练习:写一个装饰器在函数结束后打印n个*

def print_nstar(n):
    def test1(func):
        def test2(*args,**kwargs):
            result = func(*args,**kwargs)
            print('*' * n)
            return result
        return test2
    return test1


@print_nstar(5)
def sum1(a,b):
    return a+b


print(sum1(3,3))

​ 练习:写一个装饰器可以在原函数的返回值的基础上加上一个数或者减去一个数,(针对返回值是数字的基础上)

def add_minus_nums(a_or_m,num):
    def test1(func):
        def test2(*args,**kwargs):
            result = func(*args,**kwargs)
            if type(result) not in (int,float):
                return result
            else:
                if a_or_m == 'a':
                    return result + num
                elif a_or_m == 'm':
                    return result - num
        return test2
    return test1


@add_minus_nums('m',6)
def sum2(a,b):
    return a+b
print(sum2(2,3))

2 迭代器

2.1 什么是迭代器
1)迭代器的特点

​ 迭代器是一种特殊容器: a.不能直接查看所有的元素(打印看不到任何元素;不能计算长度) b.如果要读取元素的值,必须将这个元素从迭代器中取出来(取出来后就再也放不回去了,迭代器中就不再有这个元素了)

2)怎么创建迭代器

​ 两种:a.将其他序列转换成迭代器:iter(序列)
​ b.创建生成器(生成器的本质就是迭代器)

iter1 = iter([10,20,30,40])
print(iter1)
#print(len(iter1))#object of type 'list_iterator' has no len()
iter2 = iter('hello')
2.2 获取迭代器的元素(查)

​ 注意:不管以任何方式获取到了迭代器的元素,这个元素在迭代器中都不存在了。

1)获取单个元素

​ next(迭代器) - 获取迭代器中最前面的一个元素.没有元素再取会报错。

print(next(iter1))
print(next(iter1))
print(next(iter1))
print(list(iter1))

print(list(iter2))# 当迭代器转换成列表后,原迭代器中元素为空,到新的列表中。
2)遍历
iter3 = iter(['name','age','hello','world'])
for x in iter3:
    print(x, end = ',')

​ 遍历后已经将元素全部取出,故没法再次使用。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值