关于 Python 的 import,你了解多少?

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

欢迎关注我!

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

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 math
print(math.pi) # 使用math模块中的常数pi`

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

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

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

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

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

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

这些是`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 test1
hello world test1
hello world test1
hello world test1
hello world test1
hello world test1
hello world test1
hello world test1
hello world test1
hello 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 module1
from . import module2

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

import my_package

print("Import completed")

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

Executing initialization code in my_package
Import completed

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

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

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

四、总结

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

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

相关文章

python引用外部代码的import机制

【导读】使用import导入额外代码经常报错?看完文章完美解决。▍目录python引用外部代码的方式绝对导入和相对导入结尾▍python引用代码的方式Python中引入代码包的方式包括绝对导入和相对导...

Python动态导入核心解析:按需加载模块的工程实践方案

喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。根据Python官方性能测试,动态导入机制可使大型应用启动时间缩短35%-68%。本文通过6个生产案例,解析importlib模块...

python之包与模块

包的定义包:就是文件夹,包中还可以有包,即子文件夹,__init__.py是每一个python包必须存在的文件模块:一个个的python文件就是模块包----> 模块 ----> 函数包的...

7行代码,彻底告别python第三方包import导入问题!

最近有不少小伙伴咨询小叮当关于pyton第三方包导入的问题,今天我们就来聊聊第三方包导入那些事。随着对python学习的渐入臻境,越来越多的小伙伴们开始导入自己所需的第三方包,实现各种各样的功能。但是...

Python异常模块和包

异常当检测到一个错误时,Python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的“异常”, 也就是我们常说的BUG例如:以`r`方式打开一个不存在的文件。f = open('...

详解python包中的__init__.py

详解python包中的__init__.py1、 包与模块,类,函数之间的关系随着互联网和IOT的发展,我们在享受软件的强大和智能的同时,其背后与之对应的代码规模也越来越大。因此我们无法将所有的功能代...