小白学习Python的第十二天之装饰器生成器与模块

将pytroch模型转为paddlelite模型并集成到android程序中 在android中使用paddlelite加载yolov5模型识别opencv读取的摄像头信息 阅读详情

一. 有参装饰器

有参装饰器的功能 - 在给函数添加功能的时候可以通过参数控制具体的操作(操作不固定)
2.怎么写有参装饰器

"""
def 函数名0(装饰器的参数列表):
    def 函数名1(func):
        def 函数名2(*args, **kwargs):
            result = func(*args, **kwargs)
            新功能
            return result
        return 函数名2
    return 函数名1


def 函数名(装饰器的参数列表):
    无参装饰器
    return 无参装饰器的函数名


有参装饰器的用法:
@函数名0(装饰器实参列表)
"""
# 写一个装饰器可以在函数结束后打印指定的任意提示信息
def add_message(msg):
    def test1(func):
        def new_func(*args, **kwargs):
            result = func(*args, **kwargs)
            print(msg)
            return result
        return new_func
    return test1


@add_message('结束')
def func1(x, y):
    print(x+y)


func1(10, 20)
# 练习:写一个装饰器,在原函数返回值的基础上减去指定的值
# @sub(10)   @sub(30)


def sub(num):
    def test2(func):
        def new_func(*args, **kwargs):
            result = func(*args, **kwargs)
            if type(result) in (int, float, bool, complex):
                return result-num
            return result
        return new_func
    return test2


@sub(20)
def func2(x, y):
    return x*y


print(func2(10, 20))

二. 迭代器

1.什么是迭代器(iter)

"""
迭代器是容器型数据类型(序列),
特点:a.不能同时查看所有元素(打印看不到里面的元素)
     b.不能统计个数
     c.获取元素的时候只能一个一个的取(每次取最上层的那个),每次获取元素该元素就会从迭代器中消失(取一个就少一个)

"""

2.创建迭代器对象

"""
迭代器创建有两种方式
1)通过iter将其他序列转换成迭代器
2)创建生成器
"""
iter1 = iter([10, 20, 30, 40])
print(iter1)   # <list_iterator object at 0x000001BC01F4B198>
# print(len(iter1))   # TypeError: object of type 'list_iterator' has no len()

3.获取元素
不管通过什么样的方式获取到了迭代器中的元素,对应的元素都会从迭代器中消失

"""
1)取单个元素
next(迭代器) - 获取迭代器最上面的一个数据(如果迭代器为空,就会报StopIteration错误)

2)遍历
for 遍历 in 迭代器:
    pass
"""
print(next(iter1))   # 10
print(next(iter1))   # 20
next(iter1)          # 30
print(next(iter1))   # 40
# print(next(iter1))   # StopIteration

iter2 = iter('hello')
for i in iter2:
    print(i)

iter3 = iter('python!')
list1 = list(iter3)
print(next(iter3))   # StopIteration

iter4 = iter('python123')
next(iter4)
for i in iter4:
    print('i', i)

三. 生成器

1.什么是生成器(generator)

"""
生成器的本质就是迭代器(迭代器的特点和获取元素的方式生成器都适用)
"""

2.怎么创建生成器

"""
调用一个带有yield关键字的函数就可以创建一个生成器对象
(如果被调用的函数里面有yield,不会执行函数体也不会获取函数返回值)
"""
def func1():
    print('=====')
    print('+++++')
    yield
    return 100


re = func1()
print(re)   # <generator object func1 at 0x0000020B004BBBF8>

3.怎么确定生成器中产生的数据

"""
产生数据的个数:看执行完生成器对应的函数的函数体会遇到几次yield
产生的数据的值:看每次遇到的yield后面的数据是什么,没有数据就是None
"""
def func2():
    yield 100
    yield 'abc'
    for i in range(3):
        yield i


gen1 = func2()
# print(gen1)

# print(len(gen1))   # TypeError: object of type 'generator' has no len()
# print(len(list(gen1)))   # 5
print(list(gen1))   # [100, 'abc', 0, 1, 2]

4.生成器产生数据的原理

"""
调用函数创建生成器对象的时候不会执行函数体,获取生成器中的元素的时候才会执行。
第一次获取元素会从函数体开始的位置开始执行,执行到第一次yield就停下来,并且将yield后面的数据作为这次获取到的元素。
后面每次获取元素的时候都是从上次结束的位置接着往后执行,执行到下一次yield又会停下来。如果从当前位置开始执行到函数结束没有遇到yield,如果是next就会报StopIteration错误
"""
def func4():
    print('======1======')
    yield 100
    print('======2======')
    yield 200
    print('======3======')
    yield 300


gen2 = func4()
print(next(gen2))
for i in range(3):
    print('````````')

print(next(gen2))
print(next(gen2))
# print(next(gen2))   # StopIteration

gen3 = func4()
gen4 = func4()

print(next(gen3))   # 100
print(next(gen3))   # 200
print(next(gen4))   # 100


def func5():
    for i in range(5):
        yield i*2


# 重新调用函数则会重新开始
print(next(func5()))   # 0
print(next(func5()))   # 0
# 练习:写一个产生学号的生成器,能够产生指定学科001~999的学生学号
# python学生:python001~python999
# java学生:java001~java999


def student_id(str:str):
    for i in range(1, 1000):
        yield f'{str}{i:0>3}'
        # yield str+str(i).zfill(3)


py = student_id('python')
for i in range(1, 1000):
    print(next(py))

ja = student_id('java')
for i in range(1, 1000):
    print(next(ja))
# 练习:写一偶数个生成器,能够产生所有的正的偶数


def even():
    num = 2
    while True:
        yield num
        num += 2


even1 = even()
print(next(even1))
print(next(even1))

4.生成式 - 生成器的推导式

"""
将列表推导式[]变成(),创建的就是生成器的推导式即生成式
"""

四. 模块的使用

test模块

print('==========test开始==========')
A = 100


def func1():
    print('test1中的函数')


for X in range(10):
    pass
print('==========test结束==========')

test1模块

def sum1():
    print(sum(range(100)))


def main():
    sum1()


if __name__ == '__main__':
    main()

1.什么是模块

"""
python中一个py文件就是一个模块。
可以在一个模块中去使用另外一个模块的内容(全局变量),但需要提前导入模块
"""

2.导入模块

"""
1)import 模块名 - 导入能够使用指定模块中所有的全局变量;
               以'模块名.变量'形式去使用

2)from 模块名 import 变量名1,变量名2,...
a.导入模块,能使用模块中指定的全局变量;
b.直接使用对应的变量,不需要在前面加'模块名.'

3)import 模块名 as 新模块名
导入模块的时候对模块进行重命名,重命名后需要通过新模块名来使用被导入的模块

4)from 模块名 import 变量 as 新变量名,...
导入模块的时候对指定变量进行重命名

5)from 模块名 import *
导入模块中所有的全局变量
"""
# 导入方式一:import 模块名
import test
print(test.A)

test.func1()
print(test.X)
# 导入方式二:from 模块名 import 变量
from test import A, func1
print(A)
func1()
# 导入方式三:模块重命名
import test as ts
ts.func1()
print(ts.A)
print(ts.X)
# 本模块中的变量名与导入模块的变量名都可以使用
# 导入方式四:对变量重命名
from test import func1 as ts_func1


def func1():
    print('本模块中的func1')


func1()   # 本模块中的func1
ts_func1()   # test1中的函数

3.导入模块的原理

"""
不管是通过import还是from-import,在导入模块的时候,系统会自动将被导入的模块中所有的代码都执行一遍

注意:import导入模块的时候,自带查重功能(如果被导入的模块已经被导入过,不会重复导入)
"""
import test
import test
# *import 自带检测重复导入的功能*

4.阻止导入

"""
定义模块的时候,可以通过if __name__ == '__main__' 这个if语句来阻止模块
中的指定代码被其他模块在导入的执行。(在这个if语句中的代码不会被其他模块执行,
不在这个if语句中的代码就会被其他模块执行)

原理:
每个py文件中默认都有一个变量 __name__ 用来保存当前模块的模块名,
当直接执行某个py文件的时候这个文件中的__name__会自动变成"__main__"
"""
微信小程序 - 详细实现随机生成订单号,微信小程序创建订单号思路,不重复订单号生成的方法,小程序自动生成固定规则的订单号流水号(必须是唯一不重复的订单号,生成唯一订单号)详细生成方法,示例代码教程最新 微信小程序,vue2,vue3,订单号,流水号思路,微信小程序 详细实现随机生成订单号(JavaScript),随机生成商户订单号,根据当前时间随机生成流水号或者订单号,微信小程序之商家订单,订单号随机生成器,自动生成固定规则的订单号(前缀+采购日期+6位流水号)微信小程序 生成外卖顺序号,生成订单号或流水号简单方法,实现订单号生成唯一的解决方案,如何按日期生成订单号,14位编号=8位日期(+6位流水号),自动生成订单号(固定+日期+数字),销售订单号自动生成。在微信小程序开发中,详解实现随机生成创建订单号 阅读详情

相关推荐

快衰落、慢衰落,平坦衰落、频率选择性衰落

目录一、大尺度衰落和小尺度衰落二、平坦衰落和频率选择性衰落1.反射墙、固定天线模型2.相干带宽和时延扩展三、快衰落和慢衰落1.反射墙、运动天线模型2.相干时间和多普勒扩展四、联系总结 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、大尺度衰落和小尺度衰落 移动无线信道的主要特征是信道强度关于时间和频率的变化,大致分两种: 大尺度衰落: .

weixin_45662974的博客 3万+

python装饰器

Python中的装饰器及@用法详解 转载请注明出处:http://blog.youkuaiyun.com/tyhj_sf/article/details/77417455 这篇文章主要介绍了Python中的装饰器用法,以实例形式详细的分析了Python中的装饰器的使用技巧及相关注意事项。 一、例子 1.1 先看下面一个简单的例子程序 def funA(arg): prin...

weixin_33759269的博客 856

Comsol固体力学仿真﹣﹣受均匀内压的厚壁球壳弹塑性分析(加载卸载全流程)

COMSOL固体力学及结构力学仿真较少,故而查询了有关资料,才建立了如下模型。图4 加载卸载全历程中的冯米塞斯应力变化。该有限元模型是通过扫掠而得的结构化网格。图2 加载卸载全历程中的塑型区域变化。图3 加载卸载全历程中的位移应力变化。图6 关键节点第一,第三主应力分布。图5 关键节点应力场与塑性区分布。《弹塑性力学》大作业,记录一下。图1 球体的有限元网格模型。

weixin_62236383的博客 1487

python第十二天

# 1.有参装饰器的功能 - 在给函数添加功能的时候可以通过参数控制具体的操作(操作不固定) # 2.怎么写有参装饰器 """ 示例: def 函数名0(装饰器的参数列表): def 函数名1(func): def 函数名2(*args, **kwargs): result = func(*args, **kwargs) 新功能 return result return 函数名2

Tdyang111的博客 146

Holtek BS45F3833芯片深度剖析:如何用高集成MCU重塑超声波雾化市场格局?

本文深度剖析Holtek BS45F3833芯片如何通过高集成MCU技术重塑超声波雾化市场。该芯片集成了PWM直驱、电容检水、触摸控制等核心功能,显著提升雾化精度和效率,同时降低BOM成本和开发难度。文章通过实测数据和实战案例,展示了其在香薰机、车载设备及工业加湿器等场景的创新应用,为开发者提供了一站式解决方案。

weixin_29192211的博客 414

信奥编程启蒙 3068:【例13.3】时间差

现在给出一个时间,单位是秒,要求按照电子表格式输出,输出保证不会超过 2424 小时。3067:【例13.2】 电子表。把时间转化成电子表格式输出。电子表上的时间显示方法形如。

901

第十二天 迭代器生成器

1. 什么是迭代器(iter) 1)迭代器是容器型数据类型 2)怎么创建迭代器:a.将其他序列转换成迭代器 b.创建生成器 3)特点:打印的时候不能查看元素;无法获取元素个数; 获取元素的时候必须将元素从迭代器中取出,取出后元素会从迭代器中消失,并且无法再添加。 # 创建迭代器 i1 = iter('abc') print(i1) # <str_iterator object at 0x10653ebe0> # print(len(i1)) # 报错! i

weixin_63123211的博客 108

【我的Android进阶之旅】Android自定义View实现一个游戏摇杆,来实现监听遥动的方向或者监听摇动的角度的功能

一、需求描述 去年有个需求,需要使用自定义View实现一个游戏摇杆,来识别上下左右摇动的方向。 有点类似下面这样的王者荣耀游戏摇杆的效果 二、业界已有的参考资料 在下面这篇博客介绍了如何自定义游戏摇杆 2.1 博客介绍 Android自定义摇杆 2.1.1 功能 支持自适应大小 支持2个方向、4个方向、8个方向的摇动监听 支持摇动角度获取 可选回调模式 支持可摇动区域自定义 支持摇杆自定义 支持设置图片、色值、Shape图形 2.1.2 效果图 2.1.3 设置回调方式 setCallBac

字节卷动 1409

Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab...

Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Python第二天 变量 运算符与表达式 input()与r...

dingshen2767的博客 355

Xilinx FPGA资源解析与使用系列——Transceiver(六)关键时钟梳理之TXOUTCLK和RXOUTCLK

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Xilinx FPGA资源解析与使用系列——Transceiver(六)transceiver内部关键时钟梳理之TXOUTCLK和RXOUTCLK前言TXOUTCLKRXOUTCLK 前言 前面我们已经研读了 transceiver的参考时钟 和复位的相关内容。 但是随着内容的深入,越来越多的信号出现在我的面前。 例如 TXOUTCLK、TXUSERCLK、TXUSERCLK2 RXOUTCLK、RXUSERCLK、RXUSERCLK2

gzy0506的博客 8089

复旦微FMSH_Procise安装流程

双击FMSH_Procise_2021.1_full_win64_202103151947.exe 选择好安装目录后点击“Next” 一路next 点install 找技术支持代为申请 License,将电脑MAC地址发过去,将获得的 license 拷贝到 procise 安装目录“data”文件夹,即可使用 procise。点license manager和copy license 将licence,.lic文件放到这个目录 要是报下面错误要...

wangjie36的博客 1万+

第十二天 生成器再进阶

小知识点:   print(函数名.__name__)就可以打印函数的以字符串的名字的功能。   print(函数名.__doc__)打印函数文档的功能。   使用装饰器会改变函数__name__的输入。但是如果想使用原本函数的名字和文档的话,就可以使用以下模块: from functools import wraps: def wrapper(func):   @wraps(func...

weixin_34248258的博客 93

钉钉多维表格开发

从0到1完成钉钉多维表格开发SDK对接与实践案例。

沉修所长,勇逐新机;安而不怠,静而思变 3636

Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函...

Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 ...

dingshen2767的博客 270

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式

Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 Python第三天 序列 5种数据...

dingshen2767的博客 200

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Python第八天 模块 包 全局变量和内置变量__name__ Python path

Python第八天 模块 包 全局变量和内置变量__name__ Python path 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 Python第三天 序列 5种数据类...

dingshen2767的博客 291

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

python复习题(基础知识 ) 都写一遍胜过复习一次

目录第一天第二天第三天count 计数index 角标索引 第一天 1.环境配置:Python,Pycharm,Pycharm配置Python 2.学习软件:Typora,文档python.md 1.1、下载安装python-3.8.2-amd64.exe 官网地址:https://www.python.org/downloads/windows/ 1.2、 下载地址: PyCharmhttps://www.jetbrains.com/pycharm/download/#section=windows

zzsaixuexi的博客 428

Python第五天 文件访问 for循环访问文件 while循环访问文件 字符串的startswith函数和split函数 linecache模块...

Python第五天 文件访问 for循环访问文件 while循环访问文件 字符串的startswith函数和split函数 linecache模块 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python...

dingshen2767的博客 240

Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标准输入 标准输出 从控制台重定向到文件 标准错误 重定向 输出流和输入流 捕...

Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标准输入 标准输出 从控制台重定向到文件 标准错误 重定向 输出流和输入流 捕获sys.exit()调用optparse argparse 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 P...

dingshen2767的博客 282

Python第六天 类型转换

Python第六天 类型转换 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 Python第四天 ...

dingshen2767的博客 133
上一篇: day11作业
下一篇: day12 作业
bbbbbya
博客等级 码龄9年 18粉丝 35原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值