Python Day17

## 跨文件导入模块

```python
如果a文件夹所在目录在环境变量中,a文件夹中的ma模块可以被一下方式导入:
import a.ma   |form a import ma
如果a文件夹所在目录在环境变量,a文件中的b文件夹的mb模块可以被以下方式导入:
    import a.b.mb  |form a.b import mb
如果a文件夹所在目录在环境变量,a文件夹中的b文件夹mb模块中的bbb名字要被直接导入:
    import a.b.mb.bbb#错误!导入模块中所有.左侧都必须是文件夹
    from a.b import mb.bbb#错误同上!!!
    from a.b.mb import bbb #正确!
```

## 模块的两种被执行方式:

```pyrthon
1,一个py文件作为自执行文件,__name__变量值为"__main__"字符串
2,一个py文件作为模块被导入执行,__name__变量值为"模块名"
在这样的文件中可以通过这样的语句进行区别两种执行方式:
    if __name__=="__main__":
      自执行的逻辑代码(被作为模块导入执行时if为假,无法执行次语句)
```

包:

```python
一系列模块的集合,用文件夹来管理一系列有联系功能的模块,该文件夹称之为包!,文件名就是包名。
包与普通文件夹存在区别:包的文件夹中一定存在一个__init__.py文件
    py2中:必须创建,py3中建议创建,不创建系统会自动创建,系统自动创        建的不具备具体的模块的管理功能。只是最基本文件管理功能。
__init__.py文件:
    1,产生一个全局名称空间,代表的就是包的名称空间。
    2,管理 包可以直接点.出来使用的名字(模块名或模块中具体对象名)
导包完成的三件事:
    1,编译__init__.py文件形成pyc文件
    2,执行__init__.py文件,形成一个全局名称空间,将__init__.py文件中所有的名字存放其中,该名称空间就代表包的名称空间。
    3,在导包的文件中,产生一个与包名字相同的名字,指向包的名称空间(即__init__.py文件的全局名称空间)
```

## 直接使用包中模块

```python
如果只想作为普通文件夹,py3中可以省略__init__文件,本质上文件夹也是包。因为系统会自动产生。py2中不会自动产生,需要自建。
作为普通文件夹,导入包中模块方法:就是上述通过绝对路径导入
    import a.b.c#a、b,是文件夹名,c是模块名。
    from a.b.c import ccc#...同上...ccc是模块中的具体变量名
```



## 包的管理:

```python
#在包中采用相对路径导入管理的模块或模块中的名字

在包的__init__.py文件或包中任意一个模块中
    .代表当前文件所在目录
    ..代表当前文件所在目录的上一层目录
#注:语法不能出包,以为包外的文件都能自执行,但拥有.开头导入的文件不能自执行
```

 

posted @ 2019-05-25 15:43  Python-Man  阅读(125)  评论(0)    收藏  举报