Python导入
Python import语句用于导入要在程序中使用的模块。
Python模块是包含实用程序功能,类型,类等的python脚本。
我们在python程序中定期使用许多模块,例如sys,os,collection等。
Python导入
如果要导入python内置模块或者使用程序包管理器(如PIP)安装的任何第三方模块,则可以非常轻松地在程序中导入和使用它们。
import collections import sys
Python在sys.path
属性中寻找模块和包。
该路径始终包含执行脚本的当前目录,因此可以直接导入当前目录中的任何模块。
Python导入区分大小写,因此" import sys"和" import Sys"正在寻找要导入的不同模块。
Python首先在内置模块中寻找模块。
如果找不到,它将在当前目录中搜索模块。
因此,如果我们的math.py
文件与主脚本位于同一目录中,那么如果内置模块中没有'math'模块,则在调用'import math'时将加载该文件。
您可以使用sys.builtin_module_names获得内置模块的列表。
下图显示了我的python安装中的内置模块。
Python从模块导入类/函数
我们也可以从模块导入特定的类。
这样,我们可以导入模块的特定部分并使用它。
这也有助于编写流畅的代码。
我们可以在导入语句中使用from关键字来实现。
from collections import namedtuple from os import path
Python导入用户定义的模块
创建python脚本时,可以使用其名称将其导入另一个python脚本中。
假设我们具有以下目录结构以及多个python脚本。
我们在" utils.py"文件中定义了以下函数。
def add(i, j): return int(i) + int(j) def uppercase(s): return str(s).upper()
我们可以将其导入python_import_examples.py
并使用其功能。
import utils print(utils.add(10,10)) print(utils.uppercase('java'))
输出:
20 JAVA
Python导入为
我们可以使用import as
语句为导入的模块定义自己的名称。
# python import as import utils as u print(u.add(10,10)) print(u.uppercase('java'))
从另一个目录导入Python
如果我们要导入的python脚本位于同一目录中,那么我们可以像内置模块一样轻松地导入。
但是,如果python脚本存在于另一个目录中,那么我们可以使用importlib
库将其作为模块导入。
假设我们的strutils.py
具有以下功能:
def uppercase(s): return str(s).upper() def lowercase(s): return str(s).lower()
现在,让我们看看如何使用importlib将这个python脚本导入到我们的示例中。
# Refer: https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly # Refer: https://stackoverflow.com/questions/4383571/importing-files-from-different-folder import importlib, importlib.util def module_from_file(module_name, file_path): spec = importlib.util.spec_from_file_location(module_name, file_path) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) return module strutils = module_from_file("strutils", "../mymodule/strutils.py") print(strutils.uppercase('java')) print(strutils.lowercase('DATA'))
Python从另一个文件导入类
我们也可以使用importlib导入脚本并使用其中定义的类。
假设我们在" myclasses.py"文件中定义了" Person"和" Student"类。
class Person: name = "" def __init__(self, personName): self.name = personName def showName(self): print(self.name) class Student(Person): id = 0 def __init__(self, studentName, studentId): Person.__init__(self, studentName) self.id = studentId def getId(self): return self.id
这是示例代码,其中我使用较早定义的函数来导入此脚本并使用其类。
#python import class from another file mc = module_from_file("myclasses", "../mymodule/myclasses.py") p = mc.Person('hyman') p.showName() s = mc.Student('David',25) s.showName() print(s.getId())
请注意,我们可以为要导入的模块保留任何名称,类似于使用" import as"语句。
还有一种使用sys模块从另一个目录导入脚本的方法。
import sys sys.path.append("../mymodule/") from myclasses import Person as PC p = PC('Meghna') p.showName()
当我们只想从导入的文件中导入特定的类和函数时,这很有用。
而且,使用此代码更容易理解。