Python学习笔记 Module

任何py文件都可以做module。扩展C的时候,动态库也可以作为module导入。

module里面可以定义函数 类 变量。(其实没有区别,对python来说,所有的东西都是对象)
如果定义一个函数,在函数定义第一行出现的字符串文本会当作函数的docstring变量,其实就是该函数的注释,在python命令交互环境下可以调用function.__doc__(2个下划线)来显示该变量。

导入的语法为 import ,如果只导入 部分成员,可以用 from module1 import (attr1,attr2)

也可以from module1 import(*),导入所有的成员,但是不推荐这么做,容易引起名字冲突。但是不会报错,只会产生很难发现的运行问题。

module的import原理:import一个模块会先在sys.modules这个字典中找是否有该模块的名字,如果有,那么就返回该模块,如果没有就在sys.modules中添加该模块的名字,然后执行该模块。
该工作方式保证每个模块只执行一次,同时也导致了一个问题,如果导入同名的两个不同模块,只有先被导入的模块会成功导入,后一个模块不会被导入。
还有一个问题注意,如果模块存在互相导入的关系,可能会引发错误。例如模块a 和模块b,a中间有import b,b里面又有import a。如果先导入a,那么当a执行到import b的时候,会进入到模块b的代码;当b执行到import a的时候,会发现sys.modules里面已经有a,就会返回a的一个绑定;但是要记得,a这个时候才执行到import b这段,所以它后面的定义都没有完成,如果这个时候b有定义访问了这些没有定义的成员,会引发异常。
这么设计的一个好处是,互相引用不会向c++头文件互相引用那样产生递归,不需要写#ifdefine这些预编译指令。

python还有一些内建模块,在__builins__字典中记录,可以直接调用__builtins__打印所有的内建模块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值