ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Python基础-第 11 章 模块与包

Python基础-第 11 章 模块与包 第 11 章 模块与包11.1 创建模块模块名区分大小写且不能与自带的标准模块重名。创建一个模块.pynum 100def add(a, b):求两个数的和a b11.2 导入模块11.2.1 全部导入模块名as 别名于同一目录之内, 去创建一个名为main.py的文件, 于该文件里, 进行导入.py模块的操作, 并且加以使用。也可以在导入模块时给模块起别名。# 导入模块as a1# 使用模块print(a1.add(1, 2))print(a1.num)11.2.2 局部导入 from如果多个模块中存在重名成员后一次导入会覆盖前一次导入。from 模块名 成员名1as 别名, 成员名2as 别名,…创建新的模块.pynum 200_str1abcdef multi(a, b):求两个数的积a * b只能使用导入的成员from addprint(add(1, 2))print, num这个东西, 它可不是, name is not。重名变量后一次导入会覆盖前一次导入# 导入模块from add,numfrom num# 使用模块print(add(1, 2))print(num)通过别名区分不同模块的变量# 导入模块from add,num as a1from num as m1# 使用模块print(add(1, 2))print(a1)print(m1)11.2.3 局部导入 from *将模块里所有并非以单下划线起始的成员进行导入, 借助成员名的途径直接予以访问。from 模块名 *# 导入模块from *# 使用模块print(add(1, 2))print(num)print(_str1)11.2.4 模块搜索顺序当导入一个模块时会按照以下顺序进行查找可以使用以下方式查看模块搜索顺序sysprint(sys.path)还能够借助 sys.path.(路径)此方式去朝着 sys.path里面临时增添路径。sysprint(sys.path)sys.path.(./..)# sys.path.(rD:\)print(sys.path)11.2.5当运用from *去导入模块之际, 能够于被导入的那个模块中借助all来设定哪些内容是能够被导入的。而all所进行的设置仅仅是在使用from *导入模块这种情况下才生效的。在.py 中向all添加部分元素num,add# 内容必须要用引号引起来num 100num1 200_str1abcdef add(a, b):求两个数的和a b于main.py里头, 运用from *去引入模块里的相关内容, 那些没在all之中的变量, 于使用之际将会出现报错的情况:from *print(add(1, 2))print(num)使用print(num1), 然而, 名为num1之物并不存在 , 这是怎么回事呢。11.2.6在 中 是一个特殊的内置变量1) 导入模块时测试代码被执行偶尔, 我们会于模块里撰写一些测试代码, 一旦模块被别的文件引入, 那么这些测试代码就会被运行。在 .py 中写一些测试代码num,addnum 100num1 200_str1abcdef add(a, b):求两个数的和a b10print(add(10,20))于 main.py 里面进行模块导入操作时, 发觉 .py 当中的测试代码已然被执行了:2)借助name “main” 规避测试代码被运行, 从而防止其执行。为了防止模块在被导入之际, 测试代码被执行, 我们能够于被导入的模块里, 增添对**name**属性的查验:num,addnum 100num1 200_str1abcdef add(a, b):求两个数的和a b10print()11if :12print(add(10,20))此时再在 main.py 中导入模块测试代码不会被执行11.3 dir()主要用于列出对象的属性的特定一些为内置函数, 列出对象的方法也是其用途, 列出当前作用域中定义的名称同样是它的作用, 它会以一个字符串列表的形式来返回。math# 查看math模块下的print(dir(math))class :def (self):self.x 1self.y 2def (self):passobj ()print(dir(obj))def ():pass 10print(dir())11.4 包包就是文件夹 不过该文件夹下必须有一个.py文件。11.4.1 创建包**.py能够仅仅是一个空白的文件, 又能够去执行包里面的初始化代码, 或者去设置变量。**。产生一个文件夹, 于该文件夹里生成.py文件, 还有.py的文件其中, 这个.py文件当前为空着未写内容, 之后, 要往.py以及.py文件之中写入代码。.py 10PI 3.def area():PI * *def ():2 * PI *.py 10 10def area(width, ):width *def (width, ):2 * (width )在包外创建一个 main.py 文件。整体结构如下其中 为一个包11.4.2 导入包**11.4.2.1 全局导入 **包名.模块名as 别名.print(..area(10))from . 或者 from day09.要是属于绝对路径, 那么, 他会将导入的模块当作顶级模块, 直接于sys.path里去寻觅模块, 而非去找那个点。**11.4.2.2 局部导入包下的模块 from **从包中导入模块from 包名 模块名as 别名fromprint(.area(10)) # 314.1592611.4.2.3, **局部导入包之下模块的成员, 采用from **。从包中模块导入功能from 包名.模块名 成员名as 别名from . areaprint(area(10)) # 314.1592611.4.2.4 局部导入 from * 从包中导入模块当我们运用 from * 之际, 并非会去查找并导入包的所有子模块, 缘由在于这会耗费很长的时间, 而且有可能衍生出我们并非想要的副作用, 还要怎么给你改还要怎么给你改还要怎么给你改这样行了就不用管还要怎么给你改的问题了解决办法唯一的情形是, 提供包的显式索引情况。要是包的.py里有定义, 在运行from *的时候, 它所呈现的是被导入的模块名列表状态。from 包名.模块名 *注意如果不加会无法导包在 main.py 中使用 from * 导入模块from *print(.area(10)) # 314.15926print(.area(10)) # 报错11.5 常用标准库包更多标准库可参考。11.6 引入第三方库11.6.1 pip命令方式pip是用于包管理的工具, 它具备对包进行查找, 以及下载、安装、卸载的相关功能。pip默认的源是IndexPyPI, 它的地址是某个位置, 如果在使用时, 发现下载方面速度较为迟缓, 用户是可以指定采用其他源的。1)pip常用命令pip listpip 包名pip 包名pip -i 包名pip set .index-url2)安装包步骤pip通过命令行这种方式来进行安装, 是把第三方包安装在本地之下, 比如说, C:\Users\\.pyenv\pyenv-win\\3.11.9\Lib\site- 标点符号。11.6.2 中引入1点击右下角的解释器设置2点击号3搜索要添加的包要是借助安装, 我们所挑选的解释器类别是每个项目各自独立的, 因而说的是把第三方包装设在当前这个项目的环境里面。11.7 打包自己的库并安装1先安装 库要是不安装库的话, 后续进行打包之际, 或许会碰到报错, 那就是: 没有命名‘’, 因而能够提前去安装库, 是在命令提示符当中执行下面这种命令:pip2在包外创建一个 setup.py 文件3setup.py 中添加如下内容from .core setup# from setup 3.13以上用这个setup(name, # 需要打包的名字1.0, # 版本., ., # 需要打包的模块4在 setup.py 同级目录下进行构建5也可以生成压缩包setup.py sdist6pip命令安装自己打的库pip /dist/-0.1.tar.gz7安装自己打的包库从本地磁盘安装包要是未能寻得Go to tool, 那么也能够于左上角在view-Tool中予以查找。导入存放的自己的库 的路径,就安装成功了若于具体使用期间察觉到红色波浪线, 然而此情形下仍可以正常使用, 其缘由在于你所开展项目的路径内部含有中文。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进