必须有一个dag才行
a.py:
import b s = str(b.s)
b.py:
s = "test"
reload b 对a不起作用,严格意义上来讲,a已经不依赖于b,运行中的a已经成功bootstrap,脱离了b。除非生成一个新的a。
这样的依赖关系dag没那么简单,只有清晰定义组件之间的封装接口,才可能做到完整的,在线live的reload。
如果sys.path[0]是空字符串,则表示查找当前目录。python在搜索模块的时候,会遍历 sys.path中所有的path,os.path.join(path, module_name),如果path为'', 则自然 就是在当前目录查找。
如果你把.py脚本文件作为参数传递给python解释器,那么sys.path[0]通常将是该文件 所在目录,即os.path.dirname(yourfile),这就是为什么导入相对目录的模块会起作用。
sys.path[0]在 PySys_SetArgvEx
中设置:
jaime@ideer:~/source/Python-2.6.7$ grep -rn PySys_SetArgv Python/ Modules/ Python/frozenmain.c:48: PySys_SetArgv(argc, argv); Python/sysmodule.c:1531:PySys_SetArgvEx(int argc, char **argv, int updatepath) Python/sysmodule.c:1635:PySys_SetArgv(int argc, char **argv) Python/sysmodule.c:1637: PySys_SetArgvEx(argc, argv, 1); Modules/main.c:503: so that PySys_SetArgv correctly sets sys.path[0] to ''*/ Modules/main.c:508: PySys_SetArgv(argc-_PyOS_optind, argv+_PyOS_optind);
import语句执行路径
imp模块是怎么回事 imp可以实现更灵活的模块导入
jaime@westeros:~/source/longtalk/lib$ cat __init__.py class Helper: pass jaime@westeros:~/source/longtalk/lib$ cat settings.py import lib.Helper jaime@westeros:~/source/longtalk/lib$ cd ../ jaime@westeros:~/source/longtalk$ python -c 'import lib.settings' Traceback (most recent call last): File "<string>", line 1, in <module> File "lib/settings.py", line 1, in <module> import lib.Helper ImportError: No module named Helper jaime@westeros:~/source/longtalk$
duck typing 是一种约定,好处就是便于伪装,只要你遵守规范,定义了特定的接口, 具体是什么类型倒是没有关系,去耦合
__init__ __call__ __iter__ __repr__ __next__
动态改变method函数定义的能力