python学习:模块的导入方式教程

简介: 首先啊,在python中我们熟知的py文件就是一个模块,也就是换言之以py结尾的Python源代码文件都是一个模块我就简单概括一下了直接上代码

首先啊,在python中我们熟知的py文件就是一个模块,也就是换言之以py结尾的Python源代码文件都是一个模块我就简单概括一下了直接上代码

1.模块的使用

使用模块里的工具前需要导入模块,
模块的导入方式之import·······

单个:
import 模块名
多个:
import 模块1
import 模块2
import 模块1,模块2(一般不推荐使用)(多个)

代码示范:
比方说你有一个py文件我们暂且叫他测试文件cs.py

#文件名:cs.py
x='一定要努力'
def get():
    print(x)
def change():
    global x
    x=0
class Foo:
    def func(self):
       print('不然变垃圾')

2.导入模块并使用

要想在另外一个py文件中引用cs.py中的功能,需要使用import cs,首次导入模块会做三件事:

1、执行源文件代码

2、产生一个新的名称空间用于存放源文件执行过程中产生的名字

3、在当前执行文件所在的名称空间中得到一个名字cs,该名字指向新创建的模块名称空间,若要引用模块名称空间中的名字,需要加上该前缀,如下

代码示例:

"""导入cs模块"""
import cs

"""引用cs模块点中的x变量并重新赋值给当前名称空间中的zqh,zqh就具备了cs模块中x的值"""
zqh = cs.x
print(zqh)

""" 打印结果:一定要努力"""
"""调用cs的get函数"""
cs.get()
"""调用cs的change函数"""
cs.change()
"""使用模块cs的类Foo来实例化,进一步可以执行obj.func()"""
obj = cs.Foo()
obj.func()

注意:加上cs.作为前缀就相当于指名道姓地说明要引用cs.py名称空间中的名字,所以肯定不会与当前执行文件所在名称空间中的名字相冲突,并且若当前执行文件的名称空间中存在x,执行cs.get()或cs.change()操作的都是源文件中的全局变量x。

3.模块的导入方式之from-import 语句

既然他们都是导入模块的语句他们有何不同呢可能你们或许会有这个疑问

from...import...与import语句基本一致,唯一不同的是:使用import cs导入模块后,引用模块中的名字都需要加上cs.作为前缀,而使用from cs import x,get,change,Foo则可以在当前执行文件中直接引用模块cs中的名字,还有这种:from cs import * 把cs中所有的名字都导入到当前执行文件的名称空间中,在当前位置直接可以使用这些名字

代码示例

cs.py:
x='悟空'
def get():
    print(x)
def change():
    global x
    x='b.py的x'
class Foo:
    def func(self):
       print('不然变垃圾')
change()
aa=Foo()
aa.func()
get()

a.py:
"""导入cs模块,并且导入cs模块中的方法导入当前名称空间"""
from cs import get,change,x
x='a.py的x'
"""直接使用模块cs中的x赋值给zqh"""
zqh=x
"""直接使用测试文件中的get()函数"""
get()
"""#即便是当前有文件有重名的x,修改的仍然是源文件中的x"""
change()
打印结果:
不然变垃圾
b.py的x
b.py的x

4.__all__变量用来控制*

模块的编写者可以在自己的文件中定义__all__变量用来控制*代表的意思

""" 该列表中所有的元素必须!!!是字符串类型,每个元素!对应!cs.py中的一个名字"""
#Python学习交流群:153708845
cs.py:
__all__=['x','get','change']
x='悟空'
def get():
    print(x)
def change():
    global x
    x='b.py的x'
class Foo:
    def func(self):
       print('不然变垃圾')
a.py:
"""这样我们在另外一个文件中使用*导入时,就只能导入__all__定义的名字了"""

from cs import *
"""__all__列表存在get可用"""
print(get())
"""__all__列表存在change可用"""
print(change())
"""__all__列表存在x可用"""
print(x)  
"""__all__列表不存在Foo不可用"""
aaa=Foo()    #报错NameError: name 'Foo' is not defined

导入语法as(起别名)

import cs as zqh 
#为导入的模块cs在当前位置起别名zqh,以后再使用时就用这个别名zqh
zqh.x
zqh.get()

还可以为为导入模块的某一个名字起一个别名
例如:

from cs import get as cs_get
cs_get()

5.总结

在Python中模块也属于第一类对象,可以进行赋值、以数据形式传递以及作为容器类型的元素等操作。

模块名应该遵循小写形式,标准库从python2过渡到python3做出了很多这类调整,比如ConfigParser、Queue、SocketServer全更新为纯小写形式。

相关文章
|
15天前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
33 3
|
14天前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
101 63
|
16天前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
16天前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
2天前
|
存储 程序员 Python
Python学习的自我理解和想法(2)
今日学习Python第二天,重点掌握字符串操作。内容涵盖字符串介绍、切片、长度统计、子串计数、大小写转换及查找位置等。通过B站黑马程序员课程跟随老师实践,非原创代码,旨在巩固基础知识与技能。
|
1天前
|
程序员 Python
Python学习的自我理解和想法(3)
这是学习Python第三天的内容总结,主要围绕字符串操作展开,包括字符串的提取、分割、合并、替换、判断、编码及格式化输出等,通过B站黑马程序员课程跟随老师实践,非原创代码。
|
4天前
|
安全 程序员 Python
Python学习的自我理解和想法(1)
本篇博客记录了作者跟随B站“黑马程序员”课程学习Python的第一天心得,涵盖了`print()`、`input()`、`if...else`语句、三目运算符以及`for`和`while`循环的基础知识。通过实际编写代码,作者逐步理解并掌握了这些基本概念,为后续深入学习打下了良好基础。文中还特别强调了循环语句的重要性及其应用技巧。
|
16天前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
Python
答粉丝问|Python中模块导入方法的比较
答粉丝问|Python中模块导入方法的比较
74 0
|
JSON 数据格式 Python
Python基础 模块化编程(模块的导入) 模块化编程 模块以主程序的方式运行 包和目录 第三方库的安装和导入方法
python基础知识模块,模块化编程,模块的创建和导入 python基础,模块的创建和导入,让模块以主程序的方式运行,python中的包和目录的区别和创建。模块导入另一个包的模块的方法,导入带有包的模块时的注意事项,常见的内置模块。 第三方模块的安装和导入的方法
Python基础 模块化编程(模块的导入)   模块化编程 模块以主程序的方式运行 包和目录 第三方库的安装和导入方法