Python模块化编程_Python编程之路

news2025/1/16 16:11:58

之前跟大家讲的是一些python的数据基础,从这篇文章开始,我们开始正式学习python的模块化编程

下面我们解释一下什么叫做模块

之前已经讲过怎么去定义一个方法,如果你是用python交互器(自带交互器,或者是ipython)来学习定义方法的话,你定义完方法后,然后退出交互器,然后你再来使用这个方法,很显然,是不会成功调用的,这是因为python交互器在你退出后,会清空内存,所有定义的变量和方法都会被清理

如果你想把定义好的方法用在你的新脚本文件中,这样就必须引入一种模块机制

你可以把你写好的python代码保存到一个文件中(当然是以" .py "结尾的文件), 那么这样你就可以长久的使用这个代码中的方法和变量

一个新文件想要使用之前保存好的文件的方法,就必须通过import方法导入这个文件

import

import的方法是用来做模块导入的,他主要有以下几种使用形式

导入整个模块

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

In [1]: import sys

In [2]: sys.path

Out[2]:

['',

 'D:\\Users\\susmote\\Anaconda3\\Scripts',

 'D:\\Users\\susmote\\Anaconda3\\python36.zip',

 'D:\\Users\\susmote\\Anaconda3\\DLLs',

 'D:\\Users\\susmote\\Anaconda3\\lib',

 'D:\\Users\\susmote\\Anaconda3',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32\\lib',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Pythonwin',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\IPython\\extensions',

 'C:\\Users\\susmote\\.ipython']

  

导入模块中的某个方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

In [1]: from sys import path

In [2]: path

Out[2]:

['',

 'D:\\Users\\susmote\\Anaconda3\\Scripts',

 'D:\\Users\\susmote\\Anaconda3\\python36.zip',

 'D:\\Users\\susmote\\Anaconda3\\DLLs',

 'D:\\Users\\susmote\\Anaconda3\\lib',

 'D:\\Users\\susmote\\Anaconda3',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32\\lib',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Pythonwin',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\IPython\\extensions',

 'C:\\Users\\susmote\\.ipython']

  from 后面接模块名,import后面接具体的方法,可以接多个,用逗号隔开即可

直接导入所有方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

In [1]: from sys import *

In [2]: path

Out[2]:

['',

 'D:\\Users\\susmote\\Anaconda3\\Scripts',

 'D:\\Users\\susmote\\Anaconda3\\python36.zip',

 'D:\\Users\\susmote\\Anaconda3\\DLLs',

 'D:\\Users\\susmote\\Anaconda3\\lib',

 'D:\\Users\\susmote\\Anaconda3',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32\\lib',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Pythonwin',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\IPython\\extensions',

 'C:\\Users\\susmote\\.ipython']

  

上面的使用根据具体情况而定

自己定义模块

之前在讲定义方法的时候讲到了斐波那契数列,这一次,我们还是用他做例子

首先在文本编辑器中写下这几段代码

  保存为fibo.py

然后我们继续在这个目录打开python交互器

1

2

3

4

5

6

7

In [1]: import fibo

In [2]: fibo.fib(200)

0 1 1 2 3 5 8 13 21 34 55 89 144

In [3]: fibo.fib2(200)

Out[3]: [01123581321345589144]

  可以直接导入之前写好的python代码,调用里面写好的方法

__name__变量

__name__是一个系统变量,他可以显示当前函数执行过程中的名称

简单来说__name__就是全局的模块名称

例如上面那个例子

1

2

3

4

5

6

7

8

9

10

In [1]: import fibo

In [2]: fibo.fib(200)

0 1 1 2 3 5 8 13 21 34 55 89 144

In [3]: fibo.fib2(200)

Out[3]: [01123581321345589144]

In [4]: fibo.__name__

Out[4]: 'fibo'

  

在后面我们会经常用到这样一个表达式

1

if __name__ = __main__:

  全局代码都写在这行代码的后面,也就是说,在执行代码的时候会首先判断是不是在本地执行的,简单来说,他保证了你的代码只能在你的文件中运行

模块路径更改

接下来我们要讲到的这个就非常重要了,在之前我们添加的python文件和导入模块都是在同一个目录进行的,所以会成功执行

但是如果我们要导入其他路径的python文件,这就有点麻烦了

首先我们要熟悉一个命令

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

In [1]: import sys

In [2]: sys.path

Out[2]:

['',

 'D:\\Users\\susmote\\Anaconda3\\Scripts',

 'D:\\Users\\susmote\\Anaconda3\\python36.zip',

 'D:\\Users\\susmote\\Anaconda3\\DLLs',

 'D:\\Users\\susmote\\Anaconda3\\lib',

 'D:\\Users\\susmote\\Anaconda3',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32\\lib',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Pythonwin',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\IPython\\extensions',

 'C:\\Users\\susmote\\.ipython']

  之前多次使用过的命令

这个命令会显示所有的python模块的位置,以一个列表返回,通俗一点来讲,就是python解释器会去这些路径去寻找python的文件,也就每个模块

比如numpy这个模块文件的路径

 如果我们要添加自己的模块到路径中,就可以使用append方法(前面说过sys.path是一个列表)

例如下面这行代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

In [5]: sys.path.append("E:\\Python-project\\Python-project\\module_study")

In [6]: sys.path

Out[6]:

['',

 'D:\\Users\\susmote\\Anaconda3\\Scripts',

 'D:\\Users\\susmote\\Anaconda3\\python36.zip',

 'D:\\Users\\susmote\\Anaconda3\\DLLs',

 'D:\\Users\\susmote\\Anaconda3\\lib',

 'D:\\Users\\susmote\\Anaconda3',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32\\lib',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Pythonwin',

 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\IPython\\extensions',

 'C:\\Users\\susmote\\.ipython',

 'E:\\Python-project\\Python-project\\module_study']

注意在输入路径时要注意转义字符,路径已经成功加入到了列表中了

下面我们测试有没有成功生效,还是导入我们之前定义的斐波那契数列的代码

首先随便进入一个目录,比如进入C盘

然后再进入python交互器

1

2

3

4

5

6

7

8

9

10

In [7]: import fibo

In [8]: fibo.fib(200)

0 1 1 2 3 5 8 13 21 34 55 89 144

In [9]: fibo.fib2(200)

Out[9]: [01123581321345589144]

In [10]: fibo.__name__

Out[10]: 'fibo'

  

可以成功导入

关于模块简单的就是这些,多练才能孰能生巧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/387445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4 通道 3.2GSPS(2 通道 6.4GSPS) 12 位 AD 采集子卡模块

FMC134 是一款 4 通道 3.2GSPS(或者配置成 2 通道 6.4GSPS) 采样率的 12 位 AD 采集 FMC子卡模块,该板卡为 FMC标准,符 合 VITA57.4 规范,可以作为一个理想的 IO 模块耦合至 FPGA 前端, 射频模拟信号数字化…

c语言经典例题-循环结构程序设计

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 求各位数字之积: 本关任务:计算正整数num的各位上的数字之积。 例如: 输入&am…

Elasticsearch:构建自动补全功能 - Autocomplete

什么是自动补全(autocomplete)功能呢?我们举一个很常见的例子。 每当你去谷歌并开始打字时,就会出现一个下拉列表,其中列出了建议。 这些建议与查询相关并帮助用户完成查询。 Autocomplete 正如维基百科所说的&#xf…

vulnhub raven2复现

1.扫描全网段,找出了存活主机ip为192.168.85.144 nmap 192.168.85.0/24 2.nmap扫描端口 nmap -p1-65535 192.168.85.144 3.访问此网站,没找到什么地方可以利用漏洞 ,查看中间件为wordpress 4.使用dirb对该网站进行目录扫描 dirb http://1…

刷题笔记3 | 203. 移除链表元素、707设计链表,206.反转链表

目录 203. 移除链表元素 707、设计链表 206.反转链表 203. 移除链表元素 题意:删除链表中等于给定值 val 的所有节点。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5] 示例 2: 输入:h…

18跨越语言:不同语言间进行RPC通信

在最开始介绍gRPC时我们讲到,gRPC具有灵活的兼容性,可以支持很多种编程语言,下面我们就使用在后端领域最常用的两种编程语言Go和Java,来体验一下gRPC在不同语言的项目间是如何进行通信的。 逻辑架构 由上图我们可以看出,Go语言设计gRPC的服务端,Java语言设计gRPC的客户端…

欢迎来到 BharatBox,这是一个以来自印度的知名艺术家和品牌为特色的文化元宇宙中心

通过 Brinc 的客户 Heftyverse 娱乐公司,将印度艺术家、电影制片厂、体育品牌和音乐公司聚集在这个全新虚拟中心。 The Sandbox 与 Brinc 的联营公司推出 BharatBox,这是一个全新的文化中心,由来自印度的娱乐、艺术和体育范畴的主要合作伙伴组…

吴恩达监督机器学习:回归和分类(一)

文章目录机器学习简介机器学习是什么quiz监督学习回归问题分类问题quiz无监督学习聚类问题quiz练习测试:监督学习与无监督学习线性回归线性回归模型第一部分基本术语线性回归模型第二部分quiz选学实验:线性回归模型代价函数公式quiz代价函数的直观理解qu…

SpringBoot+Seata在多数据源和feign中的简单使用

SpringBootSeata简单使用 目录seata执行过程安装seata下载seata使用自定义配置文件,NACOS为注册中心结合springboot实现AT模式1.多数据源引入依赖bootstrap.yml配置在使用的方法上用GlobalTransactional注解调用接口正常时调用接口报错时回滚2.配合feignseata优缺点seata执行过…

「并发编程实战」接口幂等性设计的最佳实现(8种实现方案)

「并发编程实战」接口幂等性设计的最佳实现(8种实现方案) 文章参考: 实战!聊聊幂等设计 基于幂等表思想的幂等实践 追忆四年前:一段关于我被外企CTO用登录注册吊打的不堪往事 弹力设计篇之“幂等性设计” 一、什么是幂…

【Spark分布式内存计算框架——Structured Streaming】2. Structured Streaming 核心设计与编程模型

核心设计 2016年,Spark在2.0版本中推出了结构化流处理的模块Structured Streaming,核心设计如下: 第一点:Input and Output(输入和输出) Structured Streaming 内置了很多 connector 来保证 input 数据源…

永春堂1300系统开发|解析永春堂1300模式商城的五大奖项

电商平台竞争越来越激烈,各种营销方式也是层出不穷,其中永春堂1300营销模式,以其无泡沫和自驱动性强等特点风靡一时。在这套模式中,虽然单型价格差异较大,但各种奖励的设计,巧妙的兼顾了平台和所有会员的利…

【C语言】float 关键字

🚩write in front🚩 🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4…

编程课的PPT

编程课 第一讲 主讲: 郝老师 一 什么是程序? 二 程序能做什么? 三 程序的那些事 一 什么是程序? 计算机程序是一组计算机能识别和执行的指令 一 什么是程序? “计算机程序是一组计算机能识别和执行的指令”上面的这句话是啥意思呢…

【Java|golang】1487. 保证文件名唯一---golang中string方法的坑

给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。 由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用,系统会以 (k) 的形式为新…

ACM---大一第三周周赛(Floyd算法+并查集算法学习周)

🚀write in front🚀 📝个人主页:认真写博客的夏目浅石.CSDN 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​ 📣系列专栏:ACM周训练题目合集.CSDN 💬总结&#xff1a…

【python】JSON数据类型与Python数据类型之间的转化

注:最后有面试挑战,看看自己掌握了吗 文章目录JSON格式文件JSON格式序列化与反序列化作用JSON常用数据结构键值对的集合值的有序列表JSON数据类型与Python数据类型之间的转化JSON格式和python的区别读写json文件dump 把python 写到json文件load 把json写…

王道计算机组成原理课代表 - 考研计算机 第七章 输入输出系统 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对 计算机组成 知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!! 关于对 “输入输出系统” 章节知识点总结的十分全面,涵括了《计算机组成原理》…

阿里云(CentOS)中MySQL8忘记密码的解决方法

阿里云(CentOS)中MySQL8忘记密码的解决方法 方法 在 skip-grant-tables 模式下启动 MySQL,该模式下启动 MySQL 时不启动授权表功能,可以直接免密码登录 实现 编辑 /etc/my.cnf 文件 vim /etc/my.cnf在 [mysqld] 区域末尾添加配置,设置免密…

数组之双指针题

文章目录一、最长连续不重复子序列1.题目介绍2.思路3.二、长度最小的子数组1.题目介绍2.思路3.代码三、数组元素的目标和1.题目介绍2.思路3.代码总结其实在之前我写过不少双指针得题解,刷题专练之数组移除元素 刷题专练之翻转题练习这两篇文章的题解基本就是双指针法…