python模块和包

一、模块

1.含义:当代码量比较大的时候,我们最好把代码拆分成一些有组织的代码片段,每个代码片段里面包含一组逻辑上有关联的函数或者类,每一个片段里放在一个独立的文件中,这样的片段称为模块。

2.使用import可以在一个python文件中引入其他的模块。

  C语言的#include本质上是文本替换,因此可能会导致一系列的问题(重复包含,包含顺序相关)。

3.import实际上是创建了一个模块对象,通过这个对象来访问模块中的具体方法。

4.模块的搜索路径:我们尝试import一个模块名时,python解释器必须知道模块文件的路径。

例如:我们有一个add.py.那么对应的模块名就是add.

5.python从sys.path中查找模块,我们可以看到sys.path其实是一个列表,里面的内容是python的一些默认搜索路径,如果我们想加入一些新的路径,直接修改sys.path即可。

6.import语句不一定非要写在源码文件的最开始(当然还是推荐写在最上面),如果在多个目录中都存在相同的名字的模块,这个时候python解释器会从前往后查找,把找到的第一个匹配结果进行加载。

二、命名空间

1.C语言采用方案是给函数加上一个前缀。

2.C++使用命名空间来解决这个问题。

3.python的模块也相当于命名空间。eg: os.path.exists.这样的层级结构。

三、import语句

1.含义:import语句导入模块,可以一次import一个或者一次import多个。

2.import语句的顺序:推荐按python标准库,Python第三方库,应用程序自定制模块的顺序。

3.模块也是一个对象,也有作用域的概念,在函数内部import,那么这个模块的的作用域就是在这个函数内。

4.模块也是一个对象,那么也可以给这个对象赋值(相当于定义别名)。

 四、from-import语句

1.import语句是直接导入一个模块,而有时候只需要用到模块中的某一个或几个函数,就可以用from-import..from-import相当于把模块中的名字引入了当前的命名空间。

2.可以使用from module import*的方式将module模块中的所有名字都导入进来(不推荐使用)。

3.import-as语句:给模块起一个很短的名字。

五、导入

1.导入模块意味着“被执行”:也就是说所有的顶层的代码都会被执行到,这通常包括函数的定义和全局变量的定义。

2.理解“导入”和“加载”:我们写import module时,其实有两个大的阶段,现将这个模块的文件加载到内存中,并创建一个对象来表示,然后通过一个变量名来将这个模块引入到当前的命名空间中,如果同一个模块被import了多次,其实加载动作只进行了一次,执行动作也只进行了一次。

3.重新导入模块:使用reload函数可以重新导入模块。

4.模块的内置变量,我们可以通过globals()函数看到全局命名空间下有几个内置变量。

1)_bulitins_:内建函数模块,包含了open,help,doc等内建函数的定义。

2)_name_:模块名字,如果从这个模块开始执行,那么_name_值为_main_.

3)_file_:模块的文件名。

4)_doc_:模块的文档字符串。

5)_package_:模块丛书的报名。

import的时候,我们期望这个模块被别人导入时,只进行函数定义,如果直接从这个模块开始运行,则在函数定义完成后再进行一些测试。

6)_name_是否值为_main_.如果是,说明直接执行add.py,这是执行测试代码。否则认为add是被其他python文件import的不执行测试代码。

六、包

1.当我们的代码量进一步变大时,光拆分成多个文件已经不满足需求,还需要能按照一定的目录结构层次化的组织这些模块,同时也可以解决模块之间的名字冲突问题。例如:我们以下面的方式组织代码结构:

2.在calc目录中增加一个_init_.py文件,calc这个目录就成了包,可以在test.py中import  calc中的模块了。

 

3._init_.py是在包加载的时候会进行执行,负责包的初始化操作,一般是空文件即可。

4.包中是可以嵌套其他的包的。

七、sys模块

1.sys模块是python的非常重要的基础模块,里面有很多属性是在描述程序的执行环境。

2.sys.byteorder:返回当前机器的字节序,值是“big”或者“little”.

3.sys.argv:命令行参数,是一个列表,因此不需要argc~~.

4.sys.butin_module_names:python解释器内置哪些模块。

5.sys.dont_write_bytecode:如果值为True,python执行时就不会生成.py文件(一般不去修改该值)。

6.sys.executable:python解释器的绝对路径。

7.sys.exit():退出python。

8.sys.getrefcount():获取对象的引用计数,但是得到的结果会比实际的大,因为调用了该函数过程中也创建了新的引用。

9.sys.getrecursionlimit():获取python解释器的最大递归深度。

10.sys.getsize():获取一个对象占用的内存空间大小(字节数)。

11.sys.modules:一个字典对象,描述了当前程序都加载了哪些模块。

12.sys.path:模块查找路径,一个列表。

13.sys.platform:一个字符串对象,操作系统的标识符。

14.sys.stdin,sys.stdout,sys.stderr:三个文件对象,分别是标准输入,标准输出,标准错误。

15.sys.version:Python的版本信息。

16.OS模块:官方文档称之为“混杂的操作系统接口”。

八、进程信息

1.os.getpid():获取进程的pid.

2.os.getppid():获取父进程的pid.

3.os.getuid():获取用户id.

4.os.getenv():获取key当前的环境变量。

5.os.putenv():按key修改指定的环境变量。

6.os.uname():返回一个五元组,描述操作系统的详细信息。

九、进程管理

1.os.abort():生成一个SIGABRT信号(往往会终止程序)。

2.os.exec():函数族,进程替换函数族。

3.os.fork():创建子进程。

4.os.wait() / os.waitpid():进程等待,返回一个元组,表示子进程的pid和退出码。

5.os.kill():发送信号。

6.os.system():创建一个子shell,并在子shell中执行程序,等价于C语言中的system函数。

7.os.getlaodavg():获取系统负载,返回一个三元组,返回最近1分钟,5分钟,15分钟的系统负载的值。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值