Python3高级用法综合举例
[本文出自天外归云的博客园]
举例
下面代码围绕一个Student类综合举例说明装饰器、生成器、动态获取/添加类成员、列表推导式、reduce函数、lambda表达式的实际应用:
from functools import reduce def show(func):
def wrapper(_object):
print([i for i in func(_object)])
return wrapper @show
def generator(_object):
for attr in _object.__dict__:
yield(attr,_object.__dict__[attr]) class Student(object):
def __init__(self, **kwargs):
for key,value in kwargs.items():
if not hasattr(self,key):
setattr(self,key,value) def show_info(func):
def wrapper(self):
print(func(self))
return wrapper @show_info
def info(self):
info = [str(k)+":"+str(v) for k, v in self.__dict__.items()]
return reduce((lambda x,y:x+" "+y), info) if __name__ == '__main__':
s = Student(score=1,name="asdfa",school="anda")
generator(s)
s.score=11
s.info()
这个Student类的功效是:可以动态的添加任意数量的成员变量,并且提供信息打印的方法。
运行结果:
高级用法简介
1. 装饰器:通过函数嵌套的方式,以被装饰函数作为装饰器函数入参,用函数修饰函数的一种方法。上面代码中的show和show_info函数都是装饰器;
2. 生成器:通过for循环调用yield函数生产出一个可迭代的结果集,可以将生成器看成一个生产者。上面的代码中generator就是一个生产者,他的修饰器函数show中对他的生产结果进行了消费。可以把show函数理解为消费者;
3. 动态获取/添加类成员:分别是上面代码中的hasattr函数和setattr函数;
4. 列表推导式:一种for循环生成列表的pythonic写法,如上面代码中show函数中print的部分和show_info函数中的info的值的部分都用到了列表推导式;
5. 函数reduce:这个函数可以结合lambda表达式来使用,按照lambda表达式中定义的规则对列表中的所有元素进行运算并返回一个值;
6. 表达式lambda:一个lambda表达式就代表一个匿名函数,如上面代码中reduce函数中的部分,定义了一个入参为x和y,函数体为x+" "+y的匿名函数,这个函数体的计算结果也是lambda表达式的返回值。
另外:
1. 需要从数据结构两端取数据或append的时候可以用from collections import deque,双向队列;
2. 自省对象的方法有inspect和dir。
学习更多python高级用法,推荐阅读:
Python3高级用法综合举例的更多相关文章
- python3 filter用法(举例求0~n之间的素数)
在用python3求0~n之间的素数时,关于filter用法的有点模糊,于是上网查了一下filter用法. 求0~n之间素数的脚本prime.py: def f(x): plist = [0,0] + ...
- Merge OUTPUT 高级用法综合写的一个MergeTab的存储过程
因为工作中常用到 合并两张表中的数据,主要是写下来给自己备忘,T-SQL 中 MERGE 的用法 WHEN MATCHED THEN UPDATE -- 中加了 后面要更新的列是否都相等,如果相等就没 ...
- Python3基础-高级用法
写在前面:本文主要是python高级练习部分,介绍了一些高级用法,这些都是零散的小知识,这些可以与函数式编程合在一起使用. 函数式编程1:Python中提供的函数式编程主要有: map(函数,可迭代式 ...
- Newtonsoft.Json高级用法(转)
手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...
- 【转】 Newtonsoft.Json高级用法
手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...
- Newtonsoft.Json高级用法 1.忽略某些属性 2.默认值的处理 3.空值的处理 4.支持非公共成员 5.日期处理 6.自定义序列化的字段名称
手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...
- nmap命令-----高级用法
探测主机存活常用方式 (1)-sP :进行ping扫描 打印出对ping扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测): 下面去扫描10.0.3.0/24这个网段的的主机 nmap ...
- #define命令的一些高级用法
=========================================================== define中的三个特殊符号:#,##,#@ ================= ...
- linux中find命令高级用法
前言 在<Linux中的文件查找技巧>一文中,我们已经知道了文件查找的基本方法,今天我们介绍find命令的一些高级使用技巧.它能满足我们一些更加复杂的需求. 查找空文件或空目录 有时候需要 ...
随机推荐
- iOS 10 的一个重要更新-线程竞态检测工具 Thread Sanitizer
本文介绍了 Xcode 8 的新出的多线程调试工具 Thread Sanitizer,可以在 app 运行时发现线程竞态. 想想一下,你的 app 已经近乎大功告成:它经过精良的打磨,单元测试全覆盖. ...
- 将windows目录共享到linux
1.将windows目录共享 2.安装cifs 3. mount -t cifs -o username=电脑登陆用户名,password=电脑登陆用户密码 //127.0.0.1/abc /var ...
- Entity Framework之深入分析
EF虽然是一个晚生畸形的ORM框架,但功能强大又具有灵活性的,给了开发人员一定的发挥空间.因为微软出发点总是好的,让开发变得简单,但实际上不是所有的事情都这么理想.这里顺便推荐马丁大叔的书<企业 ...
- bootstrap-datepicker限定可选时间范围
此项目是 bootstrap-datetimepicker 项目 的一个分支,原项目不支持 Time 选择. 其它部分也进行了改进.增强,例如 load 过程增加了对 ISO-8601 日期格式的支 ...
- 【Android】Android实现监听返回键,主键(HOME),菜单键
目录结构: contents structure [+] 简介 监听 返回键 监听 主键(Home键) 监听 菜单键 一.简介 本篇文章介绍如何在Android中实现监听返回键,主键,菜单键.一般情况 ...
- iOS Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to
刚接触iOS,依照教程操作执行出现错误 Terminating app due to uncaught exception 'NSInternalInconsistencyException', re ...
- C++编程技巧降低编译时间
1. #define的保护 全部头文件都应该使用#define 防止头文件被多重包括(multiple inclusion).命名格式 当是:<PROJECT>_<PATH>_ ...
- OpenGL tutorial资源在mac yosemite下的cmake生成工程问题
如果你在使用cmake -G Xcode -Wno-dev OpenGL_Tutorial 时,出现了pThread.h not found的错误, 碰巧你和我一样使用的还是 2.8 版本的cmake ...
- [转]MVC 框架教程
Spring web MVC 框架提供了模型-视图-控制的体系结构和可以用来开发灵活.松散耦合的 web 应用程序的组件.MVC 模式导致了应用程序的不同方面(输入逻辑.业务逻辑和 UI 逻辑)的分离 ...
- C#基础第六天-作业答案-利用面向对象的思想去实现名片
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...