首页 > 编程语言 >【Python模块】

【Python模块】

时间:2024-03-22 18:33:14浏览次数:32  
标签:__ Python py 导入 模块 import

Python模块是一个包含Python定义和语句的文件。

  • 模块可以定义函数、类和变量。 模块也可以包含可执行的代码。
  • 一个模块就是一个包含Python代码的文件,文件后缀是.py。
  • 模块可以被其他程序引入(import),以使用该模块中的函数等功能。这也是使用Python标准库的方法。

一、Python模块的作用

1、代码重用:

模块的主要目的是提供代码重用。将一组相关的函数和类组织到一个模块中,在需要的地方导入并使用这个模块。

2. 组织代码:

通过模块化,将复杂的程序分解为多个更小、更易于管理的部分。有助于提高代码的可读性和可维护性。

3. 扩展Python功能:

Python的强大功能部分归功于其丰富的标准库和大量的第三方库。这些库都是以模块的形式提供的,它们可以扩展Python的基本功能,使其能够处理各种复杂的任务。

二、导入模块的方式

使用import语句来导入一个模块,使得模块中的函数、类和变量可以在你的代码中使用。

1 导入整个模块

import math  
  
# 使用模块中的函数  
print(math.sqrt(16))  # 输出:4.0

2 导入模块并为其指定别名

若模块名较长或者可能与你的代码中的其他部分发生冲突,可为模块指定一个别名。
import math as m  
  
# 使用别名来访问模块中的函数  
print(m.sqrt(16))  # 输出:4.0

3 从模块中导入特定的函数或变量

from math import sqrt  
  
# 直接使用函数  
print(sqrt(16))  # 输出:4.0

4 从模块中导入多个特定的函数或变量

from math import sqrt, pow  
  
# 直接使用这些函数  
print(sqrt(16))  # 输出:4.0  
print(pow(2, 3))  # 输出:8.0

5 导入模块中的所有内容(不推荐)

使用from module import *可以导入模块中的所有内容,但这通常不是一个好的做法,因为它可能导致命名冲突,使得代码难以理解和维护。

from math import *  
  
# 可以直接使用模块中的所有函数和变量,但不建议这样做  
print(sqrt(16))  # 输出:4.0  
print(pi)  # 输出:3.141592653589793

6 导入自定义模块

如果你有一个自定义的Python模块(即一个.py文件),你可以像导入标准库模块一样导入它。只需确保自定义模块的文件名(不包括.py后缀)是有效的Python标识符,并且该文件位于Python可以搜索的路径中。通常,这意味着它应该在你的脚本所在的同一目录下,或者在Python的site-packages目录中。

例如,如果你有一个名为sum1.py的文件,并且它位于你的脚本所在的同一目录中,你可以这样导入它:

#sum1.py模块

def sum1(var1,var2):
    total = var1+var2
    print("输出两数之和:",total)
    return total

在同一目录的另外一个function1.py里进行导入使用:

import sum1
sum1.sum1(2,3) # 输出两数之和: 5

一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

注意:
Python解释器会按照特定的搜索路径来查找模块。如果你遇到“ModuleNotFoundError”,那么可能是因为模块不在搜索路径中。你可以通过修改sys.path或者将模块移动到合适的位置来解决这个问题。

三、命名空间和作用域

变量是拥有匹配对象的名字(标识符)。命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典。

一个 Python 表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。

每个函数都有自己的命名空间。类的方法的作用域规则和通常函数的一样。

(1)Python 会智能地猜测一个变量是局部的还是全局的,它假设任何在函数内赋值的变量都是局部的。

(2)如果要给函数内的全局变量赋值,必须使用 global 语句。global Var 的表达式会告诉 Python, Var 是一个全局变量,这样 Python 就不会在局部命名空间里寻找这个变量了。

示例:

number = 100
def num():
    # 想改正代码就取消以下注释:
    #global number
    number = number + 1


print(number)
num()
print(number)

运行结果:

UnboundLocalError: cannot access local variable 'number' where it is not associated with a value

全局命名空间定一个了一个全局变量number ,在函数内给number 赋值,python会认为number 是一个局部变量。但我们并没有声明一个局部变量number ,所以会报错:UnboundLocalError。此时只需要在函数内声明:global number。表示number第一个全局变量。
打开 函数内的global number,运行结果:

100
101

四、模块中的函数使用

1、dir()函数

dir() 函数一个排好序的字符串列表,内容是一个模块里定义过的名字。
返回的列表容纳了在一个模块里定义的所有模块,变量和函数。

# 导入内置math模块
import math
content = dir(math)
print(content)

运行结果:

['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 
'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'comb', 'copysign', 
'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1',
 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot',
  'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 
  'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter',
   'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh',
    'sqrt', 'sumprod', 'tan', 'tanh', 'tau', 'trunc', 'ulp']

2、globals() 和 locals() 函数

globals() 和 locals() 是 Python 中的内置函数,它们分别用于返回当前全局和局部符号表的字典。全局符号表包含了所有的全局变量,而局部符号表包含了当前作用域中的局部变量。

globals()示例

print("-----全局变量------")
# 定义一些全局变量
global_var1 = "Hello"
global_var2 = 42

def show_globals():
    # 打印全局变量
    for name, value in globals().items():
        if name.startswith('global_var'):  # 只显示以 'global_var' 开头的全局变量
            print(f"{name} = {value}")

 # 调用函数以查看全局变量
show_globals()

# 修改全局变量
global_var1 = "大山很山"
global_var2 = 18

# 再次调用函数以查看修改后的全局变量
show_globals()

运行结果:

-----全局变量------
global_var1 = Hello
global_var2 = 42
global_var1 = 大山很山
global_var2 = 18

locals()示例

print("-----局部变量------")
def show_locals(x, y):
    # 定义一个局部变量
    local_var = "I'm a local variable"

    # 在函数内部调用 locals()
    print("Locals inside the function:")
    for name, value in locals().items():
        print(f"{name} = {value}")

 # 访问函数参数
    print(f"Function parameters: x = {x}, y = {y}")

# 调用函数
show_locals(10, 20)

运行结果:

-----局部变量------
Locals inside the function:
x = 10
y = 20
local_var = I'm a local variable
Function parameters: x = 10, y = 20

五、Python中的包

在Python中,包(package)是一个包含多个模块的目录,即一个分层次的文件目录结构。它允许你组织代码,将相关的模块分组在一起,并且提供了一个命名空间来避免命名冲突。包还可以包含子包,这样你可以创建复杂的代码组织结构。

简单来说,包就是文件夹,但该文件夹下必须存在 init.py 文件, 该文件的内容可以为空。init.py 用于标识当前文件夹是一个包。

1、创建包

  • 创建一个目录,该目录的名称将成为包的名称。
  • 在该目录中,创建一个__init__.py文件(这个文件可以是空的,但它告诉Python这个目录应该被视为一个包)。
  • 在该目录中,添加你的模块文件(即.py文件)。
    示例;
    要求:
    创建一个名为mypackage的包,其中包含两个模块:module1.py和module2.py。目录结构如下:
mypackage/  
    __init__.py  
    module1.py  
    module2.py

2、使用包

要使用包中的模块,你需要导入它们。这可以通过使用import语句,并指定包的名称和模块名称来完成。

import mypackage.module1  
  
# 使用mypackage.module1中的函数或变量  
mypackage.module1.some_function()

如果你想从包中导入特定的函数或变量,可以使用from … import …语句:

from mypackage.module1 import some_function  
  
# 直接使用函数,不需要前缀  
some_function()

3、init.py 文件的作用

init.py 文件对于包来说非常重要,即使它是空的。
它告诉Python这个目录是一个包,而不是一个普通的目录。

此外,init.py 文件还可以用来初始化包的状态,或者定义__all__变量来指定当使用from package import *时应该导入哪些模块或变量。
例如,在__init__.py文件中,你可以这样定义__all__:

# __init__.py  
  
__all__ = ['module1', 'module2']

然后,当其他代码使用from mypackage import *时,只会导入module1和module2。

4、嵌套包

包也可以包含子包。子包就是包内部的另一个包。例如:

mypackage/  
    __init__.py  
    submodule/  
        __init__.py  
        submodule1.py  
        submodule2.py  
    module1.py  
    module2.py
在这个例子中,submodule是mypackage的一个子包,它包含自己的模块。
你可以通过import语句访问这些子模块,如import mypackage.submodule.submodule1。

注意事项

  • 包应该有一个清晰、描述性的名称,以避免与其他包冲突。
  • 避免循环导入,即包或模块之间相互导入对方,这会导致难以追踪的错误
  • 使用相对导入时要小心,确保你的导入语句与你的包结构相匹配。

包是Python中组织大型项目代码的关键工具,它们帮助你将代码分解为可管理的部分,并提供了一种方式来避免命名冲突和重复代码。

标签:__,Python,py,导入,模块,import
From: https://blog.csdn.net/weixin_44006573/article/details/136946460

相关文章

  • python
    安装配置安装相关python1.windows版本的下载路径https://www.python.org/downloads/windows/pycharm1.安装后pycharm的路径C:\ProgramFiles\JetBrains\PyCharm2022.3.1\bin2.pycharm的破解方法https://www.exception.site/article/17023.破解文件在chrometom......
  • Python中的数据集包含哪些?
    1.set()集合格式:{元素1,元素2,元素3},元素之间用逗号分隔,每个元素的类型可以不一样,比如{1,2,3},{'a','b','c'},{'a',1,'b',2}set集合是无序的,里面的元素不可重复 2.list集合(列表)格式:[元素1,元素2,元素3],元素可以是任何类型,比如字符串,数字,字典对象等list集合是有序的,里面的元......
  • python异步编程
    1、协程1.1协程是什么协程不是计算机提供,程序员人为创造。协程(Coroutine)也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。线程是通过时间片抢占来执行程序的,相比与线程的抢占式调度协程de协作式调度是程序自身......
  • 为什么说金融/财务人需要学Python??
    Python是财务人和金融人的多功能工具箱!它有非常多的细分应用,接下来我将给你详细介绍为什么财务、金融方向需要学Python以及有哪些方向的细分应用!一、为什么金融/财务人需要Python?想在行业中崭露头角?那你可不能忽视Python这个神器!首先,它是个数据处理高手,无论是股票......
  • Python中常用模块有哪些?
    1.importosos模块提供很多方法用来处理文件和目录 2.importsyssys模块提供了一系列运行环境的变量和函数,例如argv变量,argv变量是一个包含命令行参数的列表 3.fromminioimportMiniominio是一个对象存储服务,可以用来存储大量的数据,比如图片,视频,文档等 4.frommysq......
  • python运算符
    运算符:算数运算符:赋值运算符:比较运算符: 逻辑运算符:  ......
  • python 使用 ffmpeg合成音视频
    moviepy太慢了,ffmpeg似乎快一点1.从github下载安装https://github.com//BtbN/FFmpeg-Builds/releases  下载了ffmpeg-master-latest-win64-gpl-shared.zip 直接解压到某个目录中,如:D:\ffmpeg  ,并添加环境变量,将  D:\ffmpeg 添加到path变量中(win10)在命令行运行 ffm......
  • 肖sir__python的安装2.1
     一、Python安装 python现在主要就是python2和python3,目前python3最新是3.8,考虑稳定性我们用3.6,3.7等第一步:下载Python安装包python现在主要就是python2和python3,目前python3最新是3.8,考虑稳定性我们用3.6,3.7等 1.python的官方网站下载python的安装包 地址:https://ww......
  • 【Python脚本随手笔记】 ---基于鸿蒙系统LiteOS实现差分编译脚本(下篇)
    ......
  • python中的多继承理解
    在python的多继承中,父类的初始化顺序遵循所谓方法解析顺序(MethodResolutionOrder,MRO)的机制。python使用C3线性化算法来确定多继承类的MRO:1.目标:创建一个一致的线性继承顺序,同时保持父类的相对顺序和子类优先原则。2.子类优先:子类总是在其父类之前出现。从而子类......