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命令的一些高级使用技巧.它能满足我们一些更加复杂的需求. 查找空文件或空目录 有时候需要 ...
随机推荐
- zabbix邮件告警之 通过shell脚本发送告警
说明:本文讲如何通过shell脚本实现zabbix发送告警邮件,共有5步1.设置mailx账号:是配置mailx的发信账号2.zabbix服务器端编写邮件发送脚本:是增加zabbix的告警方式,增加通 ...
- MFC坐标转换
1.GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置. 2.GetClientRect取得窗口客户区(不 ...
- 【HTML】 向网页<Title></Title>中插入图片以及跑马灯
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <style typ ...
- 使用Cordova搭建Andoid和iOS开发环境
最近在了解cordova ,下面的分享出来 大家可以看看, 我 有空也按照这个写写demo 1.下载node.js,进行安装 https://nodejs.org/en/ 2.安装cordova ...
- 从sys/power/state分析并实现S3C2416的睡眠和唤醒
环境: PC: debian-7.6.0 ARM CPU: S3C2416 Linux-Kernel: 3.6.0(FriendlyARM) U-boot: 1.3.4 一.问题来源 依据须要,在S3 ...
- 查看Linux内核及发行商版本命令
一.查看Linux内核版本命令(两种方法): 1. cat /proc/version Linux version -.el7.x86_64 (builder@kbuilder.dev.centos. ...
- [转] linux(debian)安装USB无线网卡(tp-link TL-WN725N rtl8188eu )
1: 台式机家里面不想再走线了. 于是去某东买了个USB无线网卡.tp的WN725N USB,非常小, 和罗技的优联接收器差不多大. 2: 驱动能自己识别是不指望了,既然是usb网卡,插入USB后 ...
- Python 图像下载解决图像损坏
在下载图片的过程中,经常会发现图片损坏,下面提供了两种解决方法: 方法一: if response.status_code == 200: print '======================= ...
- mysql group replication 主节点宕机恢复
一.mysql group replication 生来就要面对两个问题: 一.主节点宕机如何恢复. 二.多数节点离线的情况下.余下节点如何继续承载业务. 在这里我们只讨论第一个问题.也就是说当主结点 ...
- java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException 的解决办法之一
在查看别人的代码的时候,遇到了把工程导入到 Android Studio ,报:ExecutionException: com.android.ide.common.process.ProcessEx ...