显示有限的接口到外部

当发布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大牛,欢迎小伙伴的加入。

各种时间形式转换

只发一张网上的图, 然后差文档就好了, 这个是记不住的。


字符串格式化

一个非常好用,很多人又不知道的功能。