自制包内容 回忆上次内容
  • 上次导入了外部的py文件
  • import my_module
  • 导入一个自己定义的模块
 
  • 可以使用my_module中的变量
  • 不能 直接使用 my_module.py文件中的变量
  • 只要加my_module.作为前缀就可以
 
 
  • 直接导入导入变量、函数
  • from my_module import pi
  • 可以导入my_module.pi 并作为pi变量使用
 
  • from my_module import pi as my_module_pi
  • 导入变量并重命名
 
 
  • 上次那个苹果香蕉统计程序
  • 能封装成文件模块
  • 再导入么?
 
  • 我们来改造原始的 apple.py
建立文件夹

 
添加图片注释,不超过 140 字(可选)
 
  • 进入文件夹
  • 准备编辑
 
  • 我想要把原来的apple.py拆成立两个py文件
  • input.py
  • 负责输入 两个数字
  • 分别是
  • 苹果的数量
  • 香蕉的数量
 
 
  • output.py
  • 负责计算水果总量
  • 并输出最终水果总数
 
 
  • 那python里面
  • 有没有现成的 input和output 模块呢?
 
尝试修改
  • 别重名了!

 
添加图片注释,不超过 140 字(可选)
 
  • 看起来没有默认的input和output模块
  • 不怕模块重名了
 
  • 不过input好像是很重要的函数的名字

 
添加图片注释,不超过 140 字(可选)
 
  • output.py 这个名字可以放心用
  • input 这个名字修改为 get_fruits.py
拆分文件
  • vi -o get_fruits.py output.py
  • 进入vim后

 
添加图片注释,不超过 140 字(可选)
 
  • :windo r ../apple.py
  • 在两个窗口中都读取
  • ../apple.py
  • 上一层目录之下的apple.py
 
 

 
添加图片注释,不超过 140 字(可选)
编辑
  • ctrl+j、ctrl+k
  • 可以切换当前活动(active)窗口
 
  • 修改代码 如下图所示

 
添加图片注释,不超过 140 字(可选)
 
  • 注意这里是:wa|!python3 %
  • :wa的意思是
  • write all changed buffers
  • 把所有修改了的缓存都存盘
 
  • 然后再用python3来运行
 
运行结果
  • 运行输入部分的环节时
  • 没有问题
 
  • 运行输出部分的环节时
  • 出错了
 

 
添加图片注释,不超过 140 字(可选)
 
  • 输入没有问题
  • 但是参数a、b
  • 好像没传过去?
 
调试程序
  • 从get_fruits.py到output.py的过程中
  • 好像没有传递成功?
  • 到底 a 是多少呢?
  • 输出看看
 
 

 
添加图片注释,不超过 140 字(可选)
 
  • 给正确数据

 
添加图片注释,不超过 140 字(可选)
 
  • a 根本没有被声明!
找到a
  • a 不认
  • a 是 getfruit 这个模块(module)里的变量
  • 给a加上namespace
 
  • get_fruits.a 认么?

 
添加图片注释,不超过 140 字(可选)
 
  • 上码
  • 再战

 
添加图片注释,不超过 140 字(可选)
 
  • 这次认了
  • 现在需要的就是赋值了
最终

 
添加图片注释,不超过 140 字(可选)
 
  • 录入数据

 
添加图片注释,不超过 140 字(可选)
 
  • 成功
  • 我们真的自制了一个输入模块
 
  • 为什么要把一个完成的程序
  • 拆成两个模块呢?
 
复用性Reusability
  • get_fruits.py作为 被导入的模块
  • 可以 导入统计程序中 计算水果总量
  • 也可以 导入计价程序中 计算水果价格
  • 还可以 导入比较程序中 比较哪种水果更多
 

 
添加图片注释,不超过 140 字(可选)
 
  • 代码 可以在不同的模块之间复用
  • 以前用过什么 可复用的代码 吗?
复用的模块
  • 有个模块 我们经常使用
  • time
 

 
添加图片注释,不超过 140 字(可选)
 
  • 我们可以感觉到 python 的可扩展性
  • 从各种 python 程序
  • 到底层的 python 各种辅助模块
  • python 代码复用就是这么容易
  • 这才是打一场人民战争的基础
 
  • 如今我们也写了自己的python模块
  • 这两个py文件
  • get_fruits.py
  • output.py
  • 之间是什么关系呢?
 
结构
  • 总共两个python文件
  • output.py 是主模块
  • get_fruits.py 是被引用的模块
 

 
添加图片注释,不超过 140 字(可选)
 
  • 运行output.py主模块的时候
  • 导入了 被引用的get_fruits.py
  • 先录入
 
  • 然后输出
 
  • 如何理解 导入 呢?
  • 英文
  • import 导入
  • export 导出
  • 词根port 本意为港口
 
总结
  • 这次把 apple.py 拆分了
  • 拆成了
  • 输入
  • 主函数
 
 
  • 使用 引用模块中变量的时候
  • 要使用上包名
  • get_fruits.a
  • get_fruits.b
 
 
  • 最终
  • 拆分代码 成功!
 
  • 可以将程序 拆分成
  • 输入
  • 输出
  • 然后再由主函数调用吗?
 


[oeasy]python0141_自制模块_module_reusability_复用性的更多相关文章

  1. VC图形绘制双缓存的代码复用性讨论

    在前文中已经讨论了如何实现界面绘制双缓存的问题,前文网址如下: http://www.2cto.com/kf/201111/112429.html 双缓存的主要思路是:先把图形绘制到内存DC中,然后再 ...

  2. 提高测试脚本复用性降低DOM结构引起路径变化的影响

    问题描述 在定位元素时直接复制的xpath. 但是因为下面这些原因导致之前引用的路径失效, 不得不频繁修改脚本重新定位元素, 大降低了脚本的复用性, 也增加了维护的成本: 1. UI修改 (比如增加了 ...

  3. nodejs选择JavaScript作为开发语言,是因为一般的开发语言的标准库都是带有IO模块的,并且通常这个 模块是阻塞性的,所以nodejs选择了没有自带IO模块的Javascript

    Javascrip本身不带IO功能,nodejs选择JavaScript作为开发语言,是因为一般的开发语言的标准库都是带有IO模块的,并且通常这个 模块是阻塞性的,所以nodejs选择了没有自带IO模 ...

  4. cadence allegro pcb模块设计复用

    cadence allegro pcb模块设计复用 转载▼ 标签: 复用 模块 原理图 元件 文件 杂谈 分类: PCB技术 在你遇到如上图所示的dsp阵列PCB时,如果你的layout软件支持模块复 ...

  5. Vue 组件复用性和slot

    1.组件可复用 2.slot元素作为组件模板之中的内容分发插槽,元素自身可以被替换 <!DOCTYPE html> <html lang="en"> < ...

  6. 【pytest官方文档】解读fixtures - 3. fixtures调用别的fixtures、以及fixture的复用性

    pytest最大的优点之一就是它非常灵活. 它可以将复杂的测试需求简化为更简单和有组织的函数,然后这些函数可以根据自身的需求去依赖别的函数. fixtures可以调用别的fixtures正是灵活性的体 ...

  7. 架构设计之设计模式 (一) 适配器(Adapter)---提高复用性

    简介 简介是为了描述一下该模式是干嘛用的,为了让不了解该模式的人看了之后也有一些新的认识. 本文章分为两部分,第一部分主要介绍适配器模式:第二部分介绍该模式与相近模式的异同. 下午一直在讨论设计模式, ...

  8. Lavarel - 模块间复用代码

    代码复用在项目中早晚会遇到,这不在用 Laravel 给博客增加 Feed 订阅功能 就到了需要将生成网页 description 的函数提取出来,在文章显示与 Feed 生成的两个 Controll ...

  9. django第七天(模板的复用性,include标签和母版)

    django第7天模板 include标签 模板的共用 a 模板需要到使用到 登陆界面 b 模板需要使用到 登陆界面 可以把登陆界面提取到公共的模板c 为什么要用: 都需要使用相同的界面,减少代码冗余 ...

  10. boost::any在降低模块之间耦合性的应用

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在开发大型系统中,遵循这样一个原则:模块之间低耦合,模块内高内聚.比如系统中模块有界面模块和算法模块两种,一般是界面模 ...

随机推荐

  1. layui 新增行

    layui表格新增行目前只在从内存加载数据的情况下可行! 在多方查找数据与实验后,我发现layui确实只能在直接赋值数据(从内存加载数据)的情况下新增行,即首次渲染表格时使用内存数据给表格的data参 ...

  2. WampServer 的安装

    一, 下载   wampserver3.2.0_x64.exe  文件 二,在D盘新建wamp64文件 三,以管理员的方式运行安装文件 只有两种语方,选择 English 接受协议 下一步: 点击下一 ...

  3. synchronized锁升级过程

    更过博文请关注:https://blog.bigcoder.cn JDK 1.6后锁的状态总共有四种,级别由低到高依次为:无锁.偏向锁.轻量级锁.重量级锁,这四种锁状态分别代表什么,为什么会有锁升级? ...

  4. Vue cli路由

    上面是将Forecast组件作为了Home的子组件使用,现在我们将其作为一个路由组件使用. 在router/index.js路由系统注册路由: { path: '/forecast', name: ' ...

  5. Asp-Net-Core学习笔记:身份认证入门 _

    前言 过年前我又来更新了~ 我就说了最近不是在偷懒吧,其实这段时间还是有积累一些东西的,不过还没去整理-- 所以只能发以前没写完的一些笔记出来 就当做是温习一下啦 PS:之前说的红包封面我还没搞,得抓 ...

  6. 保姆教程系列:小白也能看懂的 Linux 挂载磁盘实操

    !!!是的没错,胖友们,保姆教程系列又更新了!!! @ 目录 前言 简介 一.磁盘分区 二.文件系统 三.实际操作 1. 使用lsblk命令查看新加入的磁盘信息 2. 使用fdisk或者cfdisk分 ...

  7. 机器学习策略篇:详解可避免偏差(Avoidable bias)

    可避免偏差 如果希望学习算法能在训练集上表现良好,但有时实际上并不想做得太好.得知道人类水平的表现是怎样的,可以确切告诉算法在训练集上的表现到底应该有多好,或者有多不好,让我说明是什么意思吧. 经常使 ...

  8. docker资源限制与数据持久化

    1. docker简介和核心概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使 ...

  9. 你知道键盘是如何工作的吗?(xv6键盘驱动程序)

    键盘驱动程序 公众号:Rand_cs 键盘如何工作的前文曾经说过,当时是以 Linux 0.11 为基础讲的但不系统,本文以 xv6 的键盘驱动程序为例来系统地讲述键盘是如何工作的.关于驱动程序前文磁 ...

  10. ssh基础

    SSH安全登录 机器准备 什么是SSH SSH 或 Secure Shell 协议是一种远程管理协议,允许用户通过 Internet 访问.控制和修改其远程服务器. SSH 服务是作为未加密 Teln ...