记录--方法/模块

1. eval()

class Abc:
def a(self):
return 1
print(eval("Abc")().a())
结果为1


2.开闭原则

对扩展开放,对修改封闭

目的:实现可扩展性

应用:装饰器,工厂模式

如装饰器:在不改变原有代码的基础上,给其增加功能



3.__getattr__系列、__getitem__系列的魔法方法

__getitem__是在以字典的方式调用对象属性时被调用,如:obj[‘attr1’]

__getattr__是对象直接调用属性时被调用,a.name


4.partial(func,*agrs,**kwagrs)函数

如:func = partial(get_name,18),则func()就等同于get_name(18)

对于函数总是传入固定参数时,可以使用partial()


5.__name__

__name__是模块的一个内置属性

模块运行时的__name__为“__main__”

模块被导入时的 __name__为“模块名”

故被导入模块的 ”””if __name__ == '__main__':””” 不成立,代码不会被执行,只执行当前运行模块的if代码

(被导入模块的if相当于 ”””if module1.__name__ == '__main__':”””,而module1.__name__ 为”module1”)


在多进程中,子进程运行入口必须在if…main中

参考:https://stackoverflow.com/questions/34223502/why-does-this-multiprocessing-code-fail


6.threading.local()

众所周知,线程中的资源是共享的,那么,要怎么使得一个线程中的变量,其他线程无法调用呢

通过local类:

threading.local(),创建local对象

local.x,为每个线程中都创建了一个x变量,线程间不共享变量,相互独立

from threading import local

loc = local()
loc.x = 1   # 主线程中的x,与其他10个子线程相互独立,不能相互访问

def func(i):

    loc.x = i    # 10个子线程中的x,相互独立

for i in range(10):

    threading.Thread(target=func,(i,)) .start()

posted @ 2019-08-29 20:39  Justaman  阅读(182)  评论(0编辑  收藏  举报