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高级用法,推荐阅读:
最新文章
- iOS9新特性 window决定程序的状态栏管理问题
- db2存储过程
- BZOJ1588——[HNOI2002]营业额统计
- The word is not correctly spelled问题解决
- 0c-36-自动释放池应用场景
- modsecurity配置指令学习
- sql sever 模糊查询 除了like还有PATINDEX
- 《第一行代码》学习笔记13-UI(2)
- ORACLE 实验一
- 【Python爬虫实战--3】html写正则表达式
- 【集美大学1411_助教博客】团队作业8——第二次项目冲刺(Beta阶段)
- vue+node.js+webpack开发微信公众号功能填坑——组件按需引入
- STL:set/multiset用法详解
- Kafka基础
- 同一台电脑配置多个JBoss
- IDEA的Database表的基本操作
- Android Studio项目生成Jar包
- KTV项目之3个ListView的跳转和加载歌手图片
- LED类代码
- ios成长之每日一遍(day 2)