目录

模块与包

什么是模块?

最常见的场景,一个模块就是包含了一组功能的python文件,例如module.py,模块名是module。可以使用import module

四个通用类别:

使用python编写的.py文件

已被编译为共享库或DLL的c或c++扩展

把一系列模块组织到一起的文件夹(注意:文件夹下有一个__init__.py文件,该文件夹称之为包)

使用C编写并连接到python解释器的内置模块

为什么要使用模块?

从文件级别组织程序,更方便管理。

拿来主义,提升开发效率。

如何使用模块?

import 模块名

调用模块里面的函数 模块名.函数名

第一次导入模块,会发生3件事,重复导入只会引用之前加载好的结果。

1.产生一个新的名称空间。

2.运行spam.py源文件代码,产生的名字都存放于1的名称空间中,运行过程中global关键字指向的就是该名称空间。

3.在当前名称空间拿到一个名字spam,该名字指向1的名称空间。引用spam.py中名字的方式:spam.名字

强调:被导入的模块在执行过程中使用自己的独立的名称空间作为全局名称空间。

起别名

import spam as sm

一行导入多个模块

import time,sys,spam

另一种使用模块的方法

from 模块名 import 名字

优点:引用时不用加前缀,简单 缺点:容易与当名称空间的名字冲突

1
2
3
from spam import money as m
from spam import money,read1,read2
from spam import * 					#	*包含除了下划线开头以外所有的名字。

python文件的两种用途

1.当作脚本执行

__name__ == '__main__'

2.当作模块被导入使用

__name__ == '模块名'

1
2
if __name__ == '__main__':
	pass

模块搜索路径顺序

内存-》内置模块–》sys.path(当前执行文件路径)

什么是包

包就是一个包含了__init__.py文件的文件夹(可以往该文件夹下放一堆子模块)

包的使用

注意:但凡是在导入时,出现.,这是导入包才有的语法,.的左边必须是一个包,使用的时候没有这种限制。

#把所有要导入的.py模块到放到一个包中,然后只需要导入包名就可以使用了。

import package1

练习:

在根目录下创建python package 名字为package1,默认会自动创建__init__.py 在和package1同级的目录下import.py中导入package1,可以使用package1中定义的模块. 在package1中创建模块func.py

func.py内容如下:

1
2
3
def f1():
    print('Welcome to my f1')
print('from func.py')

__init__.py内容如下:

1
print('__init__.py yeah')

使用package1包中模块func.py中的f1()函数(在import.py中导入)

方法1:

1
2
import package1.func
package1.func.f1()

方法2:

1
2
from package1 import func
func.f1()

结果:

__init__.py yeah from func.py Welcome to my f1

分析:路径查找顺序

__init__.py->func.py->f1()

如何在pycharm中创建包?

new->Python Package

练习:

层级结构如下 /root/import.py /root/package1 ├── init.py ├── func.py └── package2 ├── init.py └── myfunc.py

/root/package1/func.py中的内容

1
2
def f1():
    print('Welcome to my f1')

/root/package1/package2/myfunc.py 模块中内容

1
2
def max1():
    print('This is a test!')

需求: 1.在/root/import.py使用/root/package1/package2/myfunc.py 模块中max1() 函数 2.在/root/import.py使用/root/package1/func.py 模块中f1() 函数

解决方法:

思路:/root/package1/__init__.py中先导入max1() 函数,再导入f1() 函数

1
2
from package1.package2.myfunc import max1
from package1.func import f1

然后在执行文件/root/import.py中只需要导入包package1 就可以直接使用max1()f1()了。

1
2
3
4
import package1 

package1.max1()
package1.f1()

结果如下

This is a test! Welcome to my f1

拓展: 层级目录结构如下: /root/import.py /root/package1 ├── init.py ├── func.py ├── package2 │ ├── init.py │ └── myfunc.py └── package3 ├── init.py └── myfunc1.py

/root/package1/package3/myfunc1.py 中的内容

1
2
def f3():
    print('from package3 myfunc1.py')

需求:在/root/import.py中使用package3myfunc1模块中的f3函数(使用相对路径导入)

解决:

1.在/root/package1/__init__.py 中先导入f3函数(点表示在当前路径下)

1
from .package3.myfunc1 import f3

2.在/root/import.py中导入package1包即可直接使用f3函数

1
2
import package1
package1.f3()

新下载的模块aaa如何导入?

1
2
import sys
sys.path.append(r'aaa绝对路径')

如何连接两个或者多个路径名?

使用os.path.join()函数

1
2
import os
print(os.path.join(r'C:', '\\', 'a', 'b', 'c.txt'))

结果

C:\a\b\c.txt

警告
本文最后更新于 March 26, 2022,文中内容可能已过时,请谨慎使用。