显示有限的接口到外部
当发布python第三方package时, 并不希望代码中所有的函数或者class可以被外部import,在__init__.py中添加__all__属性,该list中填写可以import的类或者函数名,可以起到限制的import的作用,防止外部import其他函数或者类。
小编建了一个学习Q群,里面的是python大牛,欢迎小伙伴的加入。
with的魔力
with语句需要支持上下文管理协议的对象, 上下文管理协议包含__enter__和__exit__两个方法。with语句建立运行时上下文需要通过这两个方法执行进入和退出操作。
其中上下文表达式是跟在with之后的表达式, 该表示大返回一个上下文管理对象。
详细原理可以查看这篇文章, 浅谈 Python 的 with 语句。
知道具体原理,我们可以自定义支持上下文管理协议的类, 类中实__enter__和__exit__方法。
执行结果如下:
filter的用法
相对filter而言, map和reduce使用的会更频繁一些, filter正如其名字, 按照某种规则过滤掉一些元素。
一行作判断
当条件满足时, 返回的为等号后面的变量, 否则返回else后语句。
装饰器之单例
使用装饰器实现简单的单例模式。
staticmethod装饰器
类中两种常用的装饰,首先区分一下他们。普通成员函数, 其中第一个隐式参数为对象;
classmethod装饰器,类方法(给人感觉非常类似于OC中的类方法), 其中第一个隐式参数为类;
staticmethod装饰器,没有任何隐式参数。python中的静态方法类似与C++中的静态方法。
定义私有类属性
将property与装饰器结合实现属性私有化(更简单安全的实现get和set方法)。
fget是获取属性的值的函数,fset是设置属性值的函数,fdel是删除属性的函数,doc是一个字符串(like a comment)。从实现来看,这些参数都是可选的。
property有三个方法getter(),setter()和delete()来指定fget,fset和fdel。 这表示以下这行:
iter魔法通过yield和__iter__的结合, 我们可以把一个对象变成可迭代的。
通过__str__的重写,可以直接通过想要的形式打印对象。
神奇partial
partial使用上很像C++中仿函数(函数对象)。
在stackoverflow给出了类似与partial的运行方式。
利用用闭包的特性绑定预先绑定一些函数参数,返回一个可调用的变量, 直到真正的调用执行。
神秘eval
eval我理解为一种内嵌的python解释器(这种解释可能会有偏差), 会解释字符串为对应的代码并执行, 并且将执行结果返回。
看一下下面这个例子:
execexec在Python中会忽略返回值, 总是返回None,eval会返回执行代码或语句的返回值。
exec和eval在执行代码时,除了返回值其他行为都相同。
在传入字符串时,会使用compile(source, '', mode)编译字节码。 mode的取值为exec和eval。
getattr
通过string类型的name,返回对象的name属性(方法)对应的值,如果属性不存在,则返回默认值,相当于object.name。
命令行处理
读写csv文件
883444106
小编建了一个学习Q群,里面的是python大牛,欢迎小伙伴的加入。
各种时间形式转换
只发一张网上的图, 然后差文档就好了, 这个是记不住的。
字符串格式化
一个非常好用,很多人又不知道的功能。