Python语言学习:复杂函数(yield/@property)使用方法、案例应用之详细攻略
Python语言学习:复杂函数(yield/)使用方法、案例应用之详细攻略
目录
yield
1、生成斐波那契數列
@property
其他函数
yield
带有 yield 的函数在 Python 中被称之为 generator(生成器)。
yield的作用:就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。
yield是一个关键词,类似return, 不同之处在于,yield返回的是一个生成器。为了精通 yield ,你必须要理解:当你调用这个函数的时候,函数内部的代码并不立马执行 ,这个函数只是返回一个生成器对象,这有点蹊跷不是吗。 那么,函数内的代码什么时候执行呢?当你使用for进行迭代的时候. 现在到了关键点了! 第一次迭代中你的函数会执行,从开始到达 yield 关键字,然后返回 yield 后的值作为第一次迭代的返回值. 然后,每次执行这个函数都会继续执行你在函数内部定义的那个循环的下一次,再返回那个值,直到没有可以返回的。 如果生成器内部没有定义 yield 关键字,那么这个生成器被认为成空的。这种情况可能因为是循环进行没了,或者是没有满足 if/else 条件。
1、生成斐波那契數列
def fab(max): n, a, b = 0, 0, 1 while n < max: yield b # 使用 yieldprint(b, '- T2、print输出代替yield的用法') a, b = b, a + b n = n + 1for n in fab(5): print(n)'''
输出结果:
1
1 - T2、print输出代替yield的用法
1
1 - T2、print输出代替yield的用法
2
2 - T2、print输出代替yield的用法
3
3 - T2、print输出代替yield的用法
5
5 - T2、print输出代替yield的用法'''
@property
@property
的作用:@property
广泛应用在类的定义中,既能检查参数,又可以用类似属性这样简单的方式来访问类的变量。Python内置的@property
装饰器就是负责把一个方法变成属性调用的,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性。
1、@property
的实现比较复杂,我们先考察如何使用。把一个getter方法变成属性,只需要加上@property
就可以了,此时,@property
本身又创建了另一个装饰器@score.setter
,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作。
class Student(object):@propertydef score(self):return self._score@score.setterdef score(self, value):if not isinstance(value, int):raise ValueError('score must be an integer!')if value < 0 or value > 100:raise ValueError('score must between 0 ~ 100!')self._score = value>>> s = Student()
>>> s.score = 60 # OK,实际转化为s.set_score(60)
>>> s.score # OK,实际转化为s.get_score()
60
>>> s.score = 9999
Traceback (most recent call last):...
ValueError: score must between 0 ~ 100!
2、神奇的@property
,我们在对实例属性操作的时候,就知道该属性很可能不是直接暴露的,而是通过getter和setter方法来实现的。还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性。
下边的birth
是可读写属性,而age
就是一个只读属性,因为age
可以根据birth
和当前时间计算出来。
class Student(object):@propertydef birth(self):return self._birth@birth.setterdef birth(self, value):self._birth = value@propertydef age(self):return 2015 - self._birth
参考文章
廖雪峰的官方网站——使用@property
其他函数
后期更新……
参考文章
Python yield 使用浅析
Python语言学习:复杂函数(yield/@property)使用方法、案例应用之详细攻略相关推荐
- Python编程语言学习:python中与数字相关的函数(取整等)、案例应用之详细攻略
Python编程语言学习:python中与数字相关的函数(取整等).案例应用之详细攻略 目录 python中与数字相关的函数 1.对小数进行向上取整 1.1.利用numpy库 1.2.利用math库
- DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文)、CNN优化技术、调参学习实践、CNN经典结构及其演化、案例应用之详细攻略
DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文).CNN优化技术.调参学习实践.CNN经典结构.案例应用之详细攻略 目录 卷积神经网络算法的简介 0.Biologically Ins ...
- Python语言学习之lambda:lambda函数的简介、使用方法、案例大全之详细攻略
Python语言学习之lambda:lambda函数的简介.使用方法.案例大全之详细攻略 目录 lambda函数的简介 1.lambda匿名函数的格式 2.lambda函数特点 3.lambda函数与 ...
- Python语言学习之字母L开头函数使用集锦:logging日志用法之详细攻略
Python语言学习之字母L开头函数使用集锦:logging日志用法之详细攻略 目录 logging日志用法之详细攻略 logging日志用法之详细攻略 K Llogging.basicConfig( ...
- Python语言学习之字母E开头函数使用集锦:endswith使用用法之详细攻略
Python语言学习之字母E开头函数使用集锦:endswith使用用法之详细攻略 目录 endswith用法之详细攻略 enumerate()函数 endswith用法之详细攻略 if my_file ...
- Python语言学习:Python语言学习之正则表达式常用函数之re.search方法【输出仅一个匹配结果(内容+位置)】、re.findall方法【输出所有匹配结果(内容)】案例集合之详细攻略
Python语言学习:Python语言学习之正则表达式常用函数之re.search方法[输出仅一个匹配结果(内容+位置)].re.findall方法[输出所有匹配结果(内容)]案例集合之详细攻略 导读 ...
- Python语言学习:Python随机生成那些事之随机生成使用方法、案例应用之详细攻略
Python语言学习:利用Python随机生成那些事之随机生成使用方法.案例应用之详细攻略 目录 案例应用 1.随机生成指定区间内的某一值 案例应用 1.随机生成指定区间内的某一值 使用说明:给定区域 ...
- Python:Python语言的简介(语言特点/pyc介绍/Python版本语言兼容问题(python2 VS Python3))、安装、学习路线(数据分析/机器学习/网页爬等编程案例分析)之详细攻略
Python:Python语言的简介(语言特点/pyc介绍/Python版本语言兼容问题(python2 VS Python3)).安装.学习路线(数据分析/机器学习/网页爬等编程案例分析)之详细攻略 ...
- Python语言的简介(语言特点/pyc介绍/Python版本语言兼容问题(python2 VS Python3))、安装、学习路线(数据分析/机器学习/网页爬等编程案例分析)之详细攻略
目录 Python语言的简介 1.Python的应用领域 2.Python语言特点.对比其它语言 2.1.Python语言特点 2.2.Python语言对比其它语言 3.Python版本语言兼容问题( ...
最新文章
- linux 修改mysql root密码_Linux mysql如何更改root密码
- 高德拉特难题:悬赏5000美金的一道作业排序问题
- 实现盒子动画和键盘特效
- ProgressBar(圆形、水平进度条)的基本使用(点击Button1按钮,显示或消失圆形ProgressBar)(每点击一次Button2按钮,水平进度条增加10%)
- 深度学习问题解决:Check failed: stream-parent()-GetConvolveAlgorithms( conv_parameters.ShouldIncludeWinogra
- 你知道怎么在生产环境下部署tomcat吗?
- bitnamigitlab_Bitnami Gitlab 修改端口
- C++学习之路 | PTA乙级—— 1061 判断题 (15 分)(精简)
- select函数_SQL高级功能:窗口函数
- Java 8都出那么久了,Stream API了解下?
- CubeMX 的使用实例详细(04.6)- STM32F103的 - 定时器设定 - callback调用 - 实现1S的定时更新LED灯
- [SHOI2012]魔法树 链剖
- 团队项目第二周 - 需求规格说明书 - 天冷记得穿秋裤队
- python接受前端传递的参数
- abap 创建出口历程_(发展战略)ABAP历史发展
- python房价数据分析波士顿_Python编程数据科学入门 - 波士顿房价数据分析
- 如何用python计算增长率_如何用excel函数来计算增长率?
- 计算机在学前教育中作用论文,学前教育论文
- hive 查询表Wrong FS: hdfs://node1/user/hive/warehouse/test1.db, expected: hdfs://node1.zjn.cn:8020/
- php 数字转换英文,PHP将英文数字转换为阿拉伯数字
热门文章
- STM32F030 ADC1的DMA采样问题
- oracle 对象管理 01_用户及权限
- jquery form 的beforeSubmit提交前的回调函数
- Java 动态代理机制分析及扩展
- Photoshop自由变换图形大小
- Pytho-SyntaxError: Non-ASCII character '\xe7' in file解决方法
- 深入Lock锁底层原理实现,手写一个可重入锁
- 这波操作,会把你的中间件架构带到另一个Level
- 终于有人把 Nginx 说清楚了,图文详解!
- 我的天!史上最烂的项目:苦撑12年,600多万行代码...