Python 的 import 功能,你掌握了吗?

发表时间: 2024-03-07 12:56

你好,我是老吴,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。

欢迎关注我!

关注我,你会有如下收益:

1. 翱翔在编程的海洋里!

2. 只学习最值得学的内容!

希望老吴写什么,欢迎评论或者私信告诉我!

一、前言

写过 Python 的猿猿肯定对 import 不陌生。但 Python 在 import module 时会执行相关的代码,你知道吗? Python import 还有其他的什么特性呢?通过这一篇文章,彻底掌握 Python import

二、Python import 详解

2.1 Python import 介绍

在Python中,`import`是用于**导入模块和模块中定义的变量、函数、类等内容的关键字**。`import`的作用是**扩展Python的功能**,并允许在代码中使用其他模块提供的功能。

2.2 Python import 例子

下面是`import`的主要作用和使用场景,并给出相应的例子:

1. 导入模块:使用`import`可以导入一个完整的模块,以便在代码中使用该模块中定义的功能。例如:

import mathprint(math.pi) # 使用math模块中的常数pi`

2. 导入模块中的特定内容:使用`from module import name`语法可以导入模块中的特定函数、变量或类,以便直接在代码中使用,而不需要使用模块名称作为前缀。例如:

from math import sqrtprint(sqrt(16)) # 直接使用sqrt函数,无需使用math.sqrt

3. 给导入的模块或内容起别名:使用`import module as alias`或`from module import name as alias`语法可以为导入的模块或内容指定一个别名,以便在代码中使用更短的名称。例如:

import numpy as npprint(np.array([1, 2, 3])) # 使用别名np代替numpy

4. 导入模块中的所有内容:使用`from module import *`语法可以导入模块中的所有内容,使其在代码中直接可用。但这种做法通常不被推荐,因为它会导致命名冲突和可读性问题。例如:

from math import *print(sin(pi/2)) # 直接使用导入的sinpi,但不推荐这种写法

这些是`import`的主要作用和使用场景。通过导入其他模块,可以扩展Python的功能,并重用已有的代码。使用合适的导入方式和别名,可以使代码更加简洁和可读。

2.3 Python import 进一步解释

2.3.1 Python import module

**在Python中,当一个模块被导入时,模块中的代码会被执行**。然而,**模块中的代码只会在第一次导入时执行一次**。之后,如果再次导入同一个模块,Python解释器会直接使用已经加载的模块,而不会再次执行模块中的代码。

这种行为是为了确保**模块中的代码只会被执行一次****,以避免重复执行相同的操作。通过导入模块,我们可以在需要时使用其中定义的函数、类和变量,而不必重新执行模块中的代码。

值得注意的是,如果在模块中存在全局级别的可执行语句(例如函数定义以外的代码),则在导入时会执行这些语句。因此,模块的导入可能会触发一些副作用操作,例如打印输出或初始化全局变量。

比如:创建test1.py

print("我是 test1,我被执行了")def say_hello():    print("hello world test1")

再创建 test2.py

def say_hello():    from test import test1    test1.say_hello()if __name__ == '__main__':    for i  in range(10):        say_hello()

执行 test2.py 输出

我是 test1,我被执行了hello world test1hello world test1hello world test1hello world test1hello world test1hello world test1hello world test1hello world test1hello world test1hello world test1

2.3.2 Python import package

在Python中,当导入一个包(package)时,包本身不会被执行。只有在使用该包中的模块或对象时,才会执行相应的代码。

**当导入一个包时,Python解释器会查找并执行该包下的`__init__.py`文件**。`__init__.py`文件可以包含一些初始化代码,用于设置包的环境、导入子模块或执行其他需要在导入时执行的操作。但这些代码**只会在首次导入包时执行一次。**

例如,假设我们有一个名为`my_package`的包,它的结构如下:

my_package/    __init__.py    module1.py    module2.py

在`__init__.py`文件中,我们可以放置一些初始化代码:

print("Executing initialization code in my_package")# 导入子模块from . import module1from . import module2

然后,我们可以在另一个脚本中导入`my_package`包:

import my_packageprint("Import completed")

运行上述脚本,输出如下:

Executing initialization code in my_packageImport completed

从输出结果可以看出,在导入`my_package`包时,`__init__.py`中的初始化代码被执行了一次。然后,`Import completed`被打印出来,表示导入完成。

但注意,这里的执行是指`__init__.py`中的代码被执行,并不是包中的所有模块都被导入和执行。只有在使用`my_package`中的具体模块或对象时,才会执行相应的代码。

总结起来,**当导入一个Python包时,包本身的代码不会被执行,只有在使用包内的模块或对象时才会执行相应的代码。 `__init__.py`文件中的初始化代码会在首次导入包时执行一次,可用于设置包的环境和导入子模块。**

四、总结

介绍了 Python 中 import 关键字的使用方法和工作原理。通过 import ,可以导入模块和模块中定义的内容,扩展 Python 的功能。文章提供了导入模块、导入模块中的特定内容、给导入的模块或内容起别名以及导入模块中的所有内容的例子,展示了 import 的多种用法。

此外,文章解释了模块的代码只会在第一次导入时执行一次的特性,以及导入包时执行`__init__.py`文件的初始化代码。最后,总结了导入包时只有在使用包内的模块或对象时才执行相应代码,而`__init__.py`文件中的初始化代码只会在首次导入包时执行一次。