23.从入门到精通:Python模块 import 语句 from … import 语句 from … import * 语句 深入模块 修改my_module的源代码

简介: 23.从入门到精通:Python模块 import 语句 from … import 语句 from … import * 语句 深入模块 修改my_module的源代码

Python模块

import 语句

在Python中,import语句用于导入模块(module)或包(package)。模块是一个包含Python代码的文件,而包则是一个包含多个模块的目录。使用import语句可以将其他模块或包中的代码引入到当前模块中,从而可以使用这些代码。

下面是一些常见的import语句的用法:

导入模块中的所有代码
import module_name

这种方式会将整个模块中的代码都导入到当前模块中,使用时需要通过module_name来访问其中的函数或变量。例如:

import math
print(math.pi)

导入模块中的部分代码

from module_name import function_name, variable_name

这种方式只会将指定的函数或变量导入到当前模块中,使用时可以直接使用函数或变量的名称。例如:

from math import pi
print(pi)

导入模块中的所有代码并使用别名

import module_name as alias_name

这种方式会将整个模块中的代码都导入到当前模块中,并使用指定的别名来访问其中的函数或变量。例如:

import math as m
print(m.pi)

导入模块中的部分代码并使用别名

from module_name import function_name as alias_name

这种方式只会将指定的函数导入到当前模块中,并使用指定的别名来访问该函数。例如:

from math import pi as my_pi
print(my_pi)

需要注意的是,import语句一般放在Python文件的开头,但也可以在文件的任意位置使用。另外,Python中还有一些高级用法,例如动态导入模块、导入包等等,可以根据实际需求进行学习和使用。


from … import 语句

在Python中,from … import语句用于从模块中导入指定的函数、类或变量。这种导入方式可以让我们只导入需要的部分,而不是整个模块。以下是一些示例:

导入单个函数
from math import sqrt
print(sqrt(4))  # 输出 2.0

在这个示例中,我们从math模块中导入sqrt函数,并使用它计算了4的平方根。

导入多个函数
from math import sqrt, pow
print(sqrt(4))  # 输出 2.0
print(pow(2, 3))  # 输出 8.0

在这个示例中,我们从math模块中导入了sqrt和pow函数,并使用它们计算了4的平方根和2的3次方。

导入整个模块
import math
print(math.sqrt(4))  # 输出 2.0

在这个示例中,我们导入了整个math模块,并使用math.sqrt函数计算了4的平方根。

需要注意的是,当我们使用from …

import语句导入函数、类或变量时,它们会被直接导入到当前的命名空间中,因此可以直接使用它们,而不需要使用模块名作为前缀。但是,这种导入方式可能会导致命名冲突或覆盖已有的同名函数、类或变量,因此需要谨慎使用。


from … import * 语句

*from … import 语句是一种导入模块中所有公共名称的快捷方式,也称为星号导入(star import)。例如,下面的语句将导入math模块中所有公共名称:

from math import *

使用星号导入可以简化代码,使得可以直接使用模块中的函数和变量名,而不需要使用模块名.函数名或模块名.变量名的形式。例如:

from math import *
print(sin(0.5))

需要注意的是,星号导入虽然方便,但也有一些潜在的问题。首先,它会导入模块中所有公共名称,包括一些不需要的名称,可能会导致命名冲突或覆盖原有的名称。其次,如果模块中存在名称相同的函数或变量,那么后导入的函数或变量会覆盖先导入的函数或变量。因此,建议在实际编程中尽量避免使用星号导入,而是明确地导入需要使用的函数和变量。


深入模块

Python中的模块是一个包含Python定义和语句的文件。模块可以用于组织代码,将相关的代码放在一个文件中,方便重用和维护。在Python中,我们可以使用import语句来导入一个模块,并使用其中定义的函数、类和变量。

以下是一些深入模块的内容:

模块的搜索路径

当我们使用import语句导入一个模块时,Python会按照一定的顺序搜索模块的路径。Python的模块搜索路径包括以下几个部分:

当前目录
PYTHONPATH环境变量指定的目录
Python安装目录下的lib/pythonX.X/site-packages目录(其中X.X为Python的版本号)

模块的重载

当我们使用import语句导入一个模块时,Python会将模块加载到内存中,并执行其中的代码。如果我们修改了模块的源代码,那么在下一次导入模块时,Python会使用缓存中的版本,而不会重新加载模块。如果我们需要重新加载模块,可以使用reload函数,例如:

import my_module
# 修改my_module的源代码
reload(my_module)

模块的命名空间

当我们导入一个模块时,模块中定义的函数、类和变量会被放在一个命名空间中,我们可以使用模块名作为前缀来访问其中的内容。例如:

import my_module
my_module.my_function()
模块的别名

我们可以使用as关键字为导入的模块指定别名,例如:

import my_module as mm
mm.my_function()

这种方式可以简化代码,并且避免命名冲突

from语句

除了使用import语句导入整个模块外,我们还可以使用from语句导入模块中的特定函数、类或变量。例如:

from my_module import my_function
my_function()

这种方式可以避免使用模块名作为前缀,提高代码的可读性。


__name__变量

每个模块都有一个__name__变量,它表示当前模块的名称。当我们直接运行一个模块时,它的__name__变量被设置为’main’,而当它被其他模块导入时,__name__变量被设置为模块的名称。我们可以使用这个变量来判断当前模块是被导入还是直接运行。例如:

if __name__ == '__main__':
    # 当前模块被直接运行
    pass
else:
    # 当前模块被导入
    pass

这些是Python中深入模块的一些内容,了解这些内容可以帮助我们更好地使用模块,并编写更加优雅的代码。


__name__属性

在Python中,每个模块(module)都有一个内置的属性name,用于表示模块的名称。这个属性有两种不同的取值方式:

如果模块是直接被执行的,那么name属性的值为’main’; 如果模块是被导入到其他模块中的,那么name属性的值为模块的名称。

这个属性通常用于判断模块是直接被执行还是被导入到其他模块中。例如,可以使用以下代码来判断当前模块是否直接被执行:

if __name__ == '__main__':
    # do something

这段代码的意思是,如果当前模块的name属性的值为’main’,那么执行后面的代码块。这样可以避免在模块被导入到其他模块中时,不必要的代码也被执行。

需要注意的是,name属性是一个内置属性,不应该被修改。另外,Python中还有许多其他的内置属性,例如doc、file等等,可以通过dir()函数查看模块支持的所有属性和方法。


dir() 函数

dir()函数是Python内置函数之一,用于列出指定对象的所有属性和方法。如果不传入任何参数,则会列出当前作用域内的所有名称。
下面是一些常见的dir()函数的用法:

列出模块中的所有名称
import module_name
dir(module_name)

这种方式会列出指定模块中的所有名称,包括变量、函数、类等等。

列出对象的所有属性和方法
obj = object()
dir(obj)

这种方式会列出指定对象的所有属性和方法,包括内置属性和方法以及自定义属性和方法。

列出当前作用域内的所有名称

dir()

这种方式会列出当前作用域内的所有名称,包括变量、函数、类等等。

需要注意的是,dir()函数只会列出对象的公共属性和方法,而不会列出私有属性和方法。私有属性和方法以双下划线开头,例如__name__、__init__等等。


标准模块

Python标准库是Python自带的一组模块,它们包含了各种常用的工具和功能,可以帮助我们更加高效地编写Python程序。以下是一些Python标准库中常用的模块:


os模块:提供了与操作系统交互的函数,例如文件操作、进程管理等。

sys模块:提供了与Python解释器交互的函数,例如获取命令行参数、修改sys.path等。

datetime模块:提供了日期和时间的处理函数。

rando-m模块:提供了生成随机数的函数。

re模块:提供了正则表达式的处理函数。

json模块:提供了JSON格式的编码和解码函数。

urllib模块:提供了URL处理函数,例如发送HTTP请求、处理URL编码等。

socket模块:提供了网络编程相关的函数,例如创建套接字、发送和接收数据等。

threading模块:提供了多线程编程相关的函数,例如创建线程、线程同步等。

subprocess模块:提供了执行外部命令和程序的函数。


以上是Python标准库中的一些常用模块,它们可以帮助我们更加高效地编写Python程序。在使用这些模块时,我们只需要使用import语句将它们导入到当前的命名空间中即可。


除了Python标准库外,还有许多第三方库可以帮助我们解决各种问题,例如NumPy、Pandas、Matplotlib、Scikit-learn等。这些库可以通过pip命令安装,使用方法与Python标准库类似。


在Python中,包(Package)是一种组织Python模块的方式。包是一个文件夹(目录),里面包含了一些Python模块和一个名为__init__.py的特殊文件。

init.py文件的作用是将一个文件夹变成一个Python包,可以为空文件,也可以包含Python代码,用于初始化包的内容。

包的主要作用是将模块组织成一个层次结构,方便管理和使用。例如,可以将所有与数学计算相关的模块放在一个名为math的包中,然后在其他模块中导入这个包,就可以使用其中的模块了。

使用包的基本语法如下:

import package_name.module_name
或者:
from package_name import module_name

其中,package_name表示包的名称,module_name表示模块的名称。


需要注意的是,当使用import语句导入包时,实际上是导入了该包下的__init__.py文件,因此__init__.py文件中的代码会被执行。如果不希望执行__init__.py文件中的代码,可以在__init__.py文件中添加如下代码:

__all__ = []

这样可以清空__all__列表,防止import *语句导入所有模块。


从一个包中导入

**在Python中,我们可以使用import语句导入一个包或模块,并使用其中的函数、类或变量。如果我们想要导入一个包中的所有模块,可以使用from … import 语句。例如:

from my_package import *

这个语句会将my_package包中所有模块的函数、类和变量导入到当前的命名空间中。但是,这种导入方式不太推荐使用,因为它会导致命名冲突和不必要的内存消耗。如果我们只需要导入包中的部分模块,应该使用from … import语句,并指定需要导入的模块。例如:

from my_package import module1, module2

这种方式可以避免命名冲突,并且只导入需要的部分,提高代码的可维护性和可读性。


需要注意的是,如果一个模块中定义了__all__变量,那么在使用from … import

*语句导入时,只会导入__all__变量中指定的函数、类和变量。例如:

__all__ = ['function1', 'class1']

在这个示例中,只有function1和class1会被导入到当前的命名空间中。 总之,尽管from … import

*语句可以方便地导入一个包中的所有模块,但是它会导致一些问题,因此不建议使用。我们应该使用from … import语句,并指定需要导入的模块,以提高代码的可维护性和可读性。


目录
打赏
0
0
0
0
5
分享
相关文章
|
19天前
|
Python字符串格式化利器:f-strings入门指南
Python字符串格式化利器:f-strings入门指南
129 80
Python与MongoDB的亲密接触:从入门到实战的代码指南
本文详细介绍了Python与MongoDB结合使用的实战技巧,涵盖环境搭建、连接管理、CRUD操作、高级查询、索引优化、事务处理及性能调优等内容。通过15个代码片段,从基础到进阶逐步解析,帮助开发者掌握这对黄金组合的核心技能。内容包括文档结构设计、批量操作优化、聚合管道应用等实用场景,适合希望高效处理非结构化数据的开发者学习参考。
61 0
揭秘Python的__init__.py:从入门到精通的包管理艺术
__init__.py是Python包管理中的核心文件,既是包的身份标识,也是模块化设计的关键。本文从其历史演进、核心功能(如初始化、模块曝光控制和延迟加载)、高级应用场景(如兼容性适配、类型提示和插件架构)到最佳实践与常见陷阱,全面解析了__init__.py的作用与使用技巧。通过合理设计,开发者可构建优雅高效的包结构,助力Python代码质量提升。
169 10
|
3月前
|
Python教程:os 与 sys 模块详细用法
os 模块用于与操作系统交互,主要涉及夹操作、路径操作和其他操作。例如,`os.rename()` 重命名文件,`os.mkdir()` 创建文件夹,`os.path.abspath()` 获取文件绝对路径等。sys 模块则用于与 Python 解释器交互,常用功能如 `sys.path` 查看模块搜索路径,`sys.platform` 检测操作系统等。这些模块提供了丰富的工具,便于开发中处理系统和文件相关任务。
118 14
Python入门修炼:开启你在大数据世界的第一个脚本
Python入门修炼:开启你在大数据世界的第一个脚本
108 6
Python创意爱心代码大全:从入门到高级的7种实现方式
本文分享了7种用Python实现爱心效果的方法,从简单的字符画到复杂的3D动画,涵盖多种技术和库。内容包括:基础字符爱心(一行代码实现)、Turtle动态绘图、Matplotlib数学函数绘图、3D旋转爱心、Pygame跳动动画、ASCII艺术终端显示以及Tkinter交互式GUI应用。每种方法各具特色,适合不同技术水平的读者学习和实践,是表达创意与心意的绝佳工具。
1262 0
Python入门:8.Python中的函数
### 引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始,逐步讲解 Python 中的函数及其高级特性。
Python入门:8.Python中的函数
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
Python入门:9.递归函数和高阶函数
在 Python 编程中,函数是核心组成部分之一。递归函数和高阶函数是 Python 中两个非常重要的特性。递归函数帮助我们以更直观的方式处理重复性问题,而高阶函数通过函数作为参数或返回值,为代码增添了极大的灵活性和优雅性。无论是实现复杂的算法还是处理数据流,这些工具都在开发者的工具箱中扮演着重要角色。本文将从概念入手,逐步带你掌握递归函数、匿名函数(lambda)以及高阶函数的核心要领和应用技巧。
Python入门:9.递归函数和高阶函数
Python入门:7.Pythond的内置容器
Python 提供了强大的内置容器(container)类型,用于存储和操作数据。容器是 Python 数据结构的核心部分,理解它们对于写出高效、可读的代码至关重要。在这篇博客中,我们将详细介绍 Python 的五种主要内置容器:字符串(str)、列表(list)、元组(tuple)、字典(dict)和集合(set)。
Python入门:7.Pythond的内置容器

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等