导入模块 Python 与例子

以下各节解释了模块、包、不同的导入方式,以及绝对导入和相对导入的工作原理。 Python.
模块有哪些 Python?
模块是一个文件,它包含 Python 代码。代码可以采用变量、函数或已定义类的形式。文件名即为模块名。
例如,如果你的文件名是 guru99.py,模块名称将是 guru99. 使用模块功能,您可以将代码分成不同的文件,而不必将所有内容都写在一个文件中。
什么是 Python 导入模块?
在模块中,文件被视为一个模块。 Python要使用该模块,您必须使用以下方式导入它: 进口 关键字。通过导入模块,可以在另一个文件中使用文件中存在的函数或变量。其他语言也提供此功能,例如 TypeScript, Java脚本, Java, 红宝石等
如何在 Python?
现在我们将创建一个模块并将其导入到另一个文件中。
以下是创建和导入模块的流程,如屏幕截图所示:
按照给定的步骤创建一个模块 Python.
用于测试代码的文件夹结构如下:
modtest/ test.py display.py
步骤1) 创建一个名为 test.py 的文件
步骤2) 在 test.py 中创建一个名为 display_message() 的函数
Def display_message():
return "Welcome to Guru99 Tutorials!"
步骤3) 现在创建另一个文件 display.py。
步骤4) 在 display.py 文件中导入 test.py 模块文件,如下所示:
import test
导入时,无需指定 test.py,只需指定文件名即可。
步骤5) 然后你可以在 display.py 中调用 test.py 中的 display_message() 函数。你需要使用 module_name.function_name。
例如test.display_message()。
Import test
print(test.display_message())
步骤6) 执行 display.py 后,您将看到以下内容。 输出:
Welcome to Guru99 Tutorials!
导入类 Python
前面我们已经了解了一个包含函数的简单模块。现在我们将创建一个类,并在另一个文件中引用这个类。
用于测试代码的文件夹结构如下:
myproj/ Car.py display.py
创建一个名为 Car.py 的文件,其中包含以下代码:
文件名:Car.py
class Car: brand_name = "BMW" model = "Z4" manu_year = "2020" def __init__(self, brand_name, model, manu_year): self.brand_name = brand_name self.model = model self.manu_year = manu_year def car_details(self): print("Car brand is ", self.brand_name) print("Car model is ", self.model) print("Car manufacture year is ", self.manu_year) def get_Car_brand(self): print("Car brand is ", self.brand_name) def get_Car_model(self): print("Car model is ", self.model)
在 Car.py 文件中,有 brand_name、model 和 manu_year 三个属性。该类中定义的函数有 car_details()、get_Car_brand() 和 get_Car_model()。
现在让我们将文件 Car.py 用作另一个名为 display.py 的文件中的模块。
文件名:display.py
import Car car_det = Car.Car("BMW","Z5", 2020) print(car_det.brand_name) print(car_det.car_details()) print(car_det.get_Car_brand()) print(car_det.get_Car_model())
输出:
BMW Car brand is BMW Car model is Z5 Car manufacture year is 2020 Car brand is BMW Car model is Z5
因此,我们可以使用 Car 模块访问 Car.py 中的所有变量和函数。
使用 from 导入模块
您可以只导入模块的一小部分,即只导入模块中所需的函数和变量名,而不是导入整个代码。
当您只想导入特定内容时,可以使用“from”关键字导入所需内容。
所以语法是
from module import your function_name , variables,... etc.
用于测试代码的文件夹结构如下:
modtest/ test.py display.py
test.py 文件中有两个函数,如下所示:
文件名:test.py
defdisplay_message(): return "Welcome to Guru99 Tutorials!" def display_message1(): return "All about Python!"
现在你需要使用 display_message() 函数。你可以直接访问你导入的函数或变量,如下所示:
文件名:display.py
from test import display_message print(display_message())
输出:
Welcome to Guru99 Tutorials!
如果您碰巧使用了函数 display_message1(),它会抛出一个错误,提示该函数未定义,如下所示:
from test import display_message print(display_message1())
输出:
Traceback (most recent call last): File "display.py", line 3, in <module> print(display_message1()) Name Error: name 'display_message1' is not defined
从模块导入所有内容
Import 允许您使用 import 语句,后跟模块名称(即文件名或要使用的库),来导入整个模块。
语法:
Import module
或者使用
from module import *
用于测试代码的文件夹结构如下:
modtest/ test.py display.py
以下是test.py里面的代码细节
my_name = "Guru99" my_address = "Mumbai" defdisplay_message(): return "Welcome to Guru99 Tutorials!" def display_message1(): return "All about Python!"
使用导入模块
仅使用导入模块名称,要引用模块内部的变量和函数,必须在其前面加上模块名称。
例如:
文件名:display.py
Import test print(test.display_message()) print(test.display_message1()) print(test.my_name) print(test.my_address)
模块名称 test 用于引用模块 test 内部的函数和变量。
输出:
Welcome to Guru99 Tutorials! All about Python! Guru99 Mumbai
使用 import *
让我们看一个例子 进口 *。 运用 进口 *,函数和变量可直接访问,如下例所示:
from test import * print(display_message()) print(display_message1()) print(my_name) print(my_address)
输出:
Welcome to Guru99 Tutorials! All about Python! Guru99 Mumbai
dir() 函数
dir() 是 的一个内置函数。 Pythondir() 返回所有属性和方法,包括给定对象的内置属性。
因此,当对模块使用 dir() 时,它会给出模块内部存在的变量和函数。
以下是一个在模块上使用 dir() 函数的示例。我们有一个名为 Car.py 的类,让我们导入 Car 并将其赋值给 dir() 函数,看看输出结果。
测试代码的文件夹结构如下:
test prop/ Car.py test.py
文件名:Car.py
class Car: brand_name = "BMW" model = "Z4" manu_year = "2020" def __init__(self, brand_name, model, manu_year): self.brand_name = brand_name self.model = model self.manu_year = manu_year def car_details(self): print("Car brand is ", self.brand_name) print("Car model is ", self.model) print("Car manufacture year is ", self.manu_year) def get_Car_brand(self): print("Car brand is ", self.brand_name) def get_Car_model(self): print("Car model is ", self.model)
文件名: test.py
import Car class_contents = dir(Car) print(class_contents)
输出给出了类的名称和在 Car.py 中定义的所有函数。
您还可以尝试在内置模块上使用 dir() Python让我们也对……进行同样的尝试。 JSON 如下例所示,该模块将显示所有可用的属性和方法。 JSON 模块。
Import json
json_details = dir(json)
print(json_details)
输出:
['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__bu iltins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__pac kage__', '__path__', '__spec__', '__version__', '_default_decoder', '_default_en coder', 'codecs', 'decoder', 'detect_encoding', 'dump', 'dumps', 'encoder', 'loa d', 'loads', 'scanner']
包是一个目录,其中包含所有定义的模块。要制作一个 Python 解释器会将其视为一个包,因此您的目录中应该包含 `__init__.py` 文件。`__init__.py` 文件会将该目录标识为一个包。以下是我们即将使用的包的结构。
该包的名称是 我的包裹要开始使用该软件包,请创建一个名为 mypackage/ 的目录。在该目录下,创建一个名为 __init__.py 的空文件。再创建三个文件 module1.py、module2.py 和 module3.py,并按照屏幕截图所示定义函数。以下是 module1.py、module2.py 和 module3.py 的详细信息。
模块1.py
def mod1_func1(): print("Welcome to Module1 function1") def mod1_func2(): print("Welcome to Module1 function2") def mod1_func3(): print("Welcome to Module1 function3")
模块2.py
def mod2_func1(): print("Welcome to Module2 function1") def mod2_func2(): print("Welcome to Module2 function2") def mod2_func3(): print("Welcome to Module2 function3")
模块3.py
def mod3_func1(): print("Welcome to Module3 function1") def mod3_func2(): print("Welcome to Module3 function2") def mod3_func3(): print("Welcome to Module3 function3")
此 包 已准备就绪,可以使用了。现在,可以在任意文件中调用该包,如下面的 test.py 文件所示:
这里,导入了 mypackage.module1,并赋予了别名 模组1同样地,您也可以使用 mypackage 中的其他模块 module2.py 和 module3.py。
import mypackage.module1 as mod1 print(mod1.mod1_func1()) print(mod1.mod1_func2()) print(mod1.mod1_func2())
输出:
Welcome to Module1 function1 None Welcome to Module1 function2 None Welcome to Module1 function2 None
我们刚刚用一个包含函数的简单模块演示了这个软件包。根据您的项目需求,您还可以创建包含子软件包的软件包,即包含定义了类的模块的子文件夹。
Python 模块搜索路径
在执行过程中,当 Python 遇到 导入模块名称解释器会尝试查找该模块。它会在内置模块列表中查找该模块,然后在 sys.path 中定义的所有目录中查找。
总而言之,解释器进行以下搜索来定位模块:
- 在您当前目录中。
- 在内置模块列表中。
- 位于 sys.path 目录内。
您可以通过导入 sys 模块并打印 sys.path 来获取 sys.path 的详细信息。它将为您提供如下所示的目录列表:
importsys
print(sys.path)
输出:
['Python Latest\\task2', 'Users\\AppData\\Local\\Programs\\Python\ \Python37\\python37.zip', 'Users\\AppData\\Local\\Programs\\Python\\P ython37\\DLLs']
您还可以根据需要修改路径并保留目录。
在导入中使用模块别名
您还可以通过为其指定别名来将其转换为更短的形式。别名可以使用以下方式创建: as 关键词。
语法:
import filename as alias name
测试代码的文件夹结构如下:
Mod test/ test.py display.py
以下是 test.py 中的代码
my_name = "Guru99" my_address = "Mumbai" def display_message(): return "Welcome to Guru99 Tutorials!" def display_message1(): return "All about Python!"
现在我们将在 display.py 中使用 test.py 的别名。
Import test as t print(t.display_message()) print(t.display_message1()) print(t.my_name) print(t.my_address)
测试模块的别名是 t。因此,可以使用别名 t 来引用 test.py 中的函数和变量。
输出:
Welcome to Guru99 Tutorials! All about Python! Guru99 Mumbai
绝对导入和相对导入 Python
现在您知道如何将一个文件作为模块导入另一个文件。现在让我们看看如何管理文件夹中的文件。可以使用绝对或相对导入来导入文件夹中的文件。
假设您有项目文件夹结构,如下所示:
根文件夹是 myproject/。它有两个子文件夹,分别是 package1 和 package2。
文件夹 package1 包含两个模块,module1.py 和 module2.py。
文件夹package2有一个类myclass.py,一个子包subpkg,其中包含module3.py,以及最后一个module4.py。
- 在 module1.py 中,有一个名为 myfunc1 的函数。
- 在 module2.py 中,有一个名为 myfunc2 的函数。
- 在 module3.py 中,有一个名为 myfunc3 的函数。
- 在 module4.py 中,有一个名为 myfunc4 的函数。
使用绝对导入
对于绝对导入,您需要从项目根文件夹直接添加模块的完整路径。
现在让我们看看如何使用绝对导入来引用每个模块中存在的函数。
要使用函数 myfunc1,您需要按如下方式导入它:
from package1.module1 import myfunc1 or from package1 import module1 module1.myfunc1()
要使用函数 myfunc3,您需要按如下方式导入它:
from package1.subpkg.module3 import myfunc3 or from package1.subpkg import module3 module3.myfunc3()
使用绝对导入的优点和缺点
使用绝对导入的优点如下:
- 变得很容易 trac将模块返回进行代码检查。
- 易于使用且非常简单。
- 如果项目迁移到其他路径,导入的内容仍将保持不变。
使用绝对导入的缺点
使用绝对导入的缺点如下:
- 如果模块嵌套且模块名称很长,则导入路径可能会变得很长。
使用相对导入
假设文件夹结构如上所述,我们将看到如何使用相对导入来导入相同的文件。
在相对导入中,要导入的模块是相对于当前位置的,也就是相对于导入语句所在的位置的。
句法
在相对导入中,使用以下方式导入时需要在模块名称前添加句点 (.) ,来自.
如果模块位于当前位置的上一级,则模块名称前会有两个句点(..)。
参照上面提到的文件夹结构图,我们有以下模块及其功能,我们需要参考这些模块及其功能。
- 在 module1.py 中,有一个名为 myfunc1 的函数。
- 在 module2.py 中,有一个名为 myfunc2 的函数。
- 在 module3.py 中,有一个名为 myfunc3 的函数。
- 在 module4.py 中,有一个名为 myfunc4 的函数。
要使用函数 myfunc1,您需要按如下方式导入它:
from .module1 import myfunc1
要使用函数 myfunc3,您需要按如下方式导入它:
from .subpkg.module3 import myfunc3
相对导入的优点
- 使用相对导入进行操作非常容易。
- 从当前位置来看,与绝对导入相比,导入可以缩短。
相对导入的缺点
- 使用相对导入,很难 trac返回代码所在的位置。



