[oeasy]python0141_自制模块_module_reusability_复用性

简介: [oeasy]python0141_自制模块_module_reusability_复用性

自制包内容 回忆上次内容

  • 上次导入了外部的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



  • 最终
  • 拆分代码 成功!


  • 可以将程序 拆分成
  • 输入
  • 输出
  • 然后再由主函数调用吗?🤔



目录
相关文章
|
22天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
105 80
|
24天前
|
Python
Python Internet 模块
Python Internet 模块。
121 74
|
29天前
|
人工智能 C语言 Python
[oeasy]python051_什么样的变量名能用_标识符_identifier
本文介绍了Python中变量名的命名规则,强调标识符(identifier)必须以字母或下划线开始,后续可包含字母、下划线及数字。通过`isidentifier()`函数可验证字符串是否为合法标识符。文中还探讨了为何数字不能作为标识符的开头,并提供了相关练习与解答,最后提及这些规则源自C语言的影响。
114 69
|
1月前
|
Python
[oeasy]python050_如何删除变量_del_delete_variable
本文介绍了Python中如何删除变量,通过`del`关键字实现。首先回顾了变量的声明与赋值,说明变量在声明前是不存在的,通过声明赋予其生命和初始值。使用`locals()`函数可查看当前作用域内的所有本地变量。进一步探讨了变量的生命周期,包括自然死亡(程序结束时自动释放)和手动删除(使用`del`关键字)。最后指出,删除后的变量将无法在当前作用域中被访问,并提供了相关示例代码及图像辅助理解。
114 68
|
2月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
123 63
|
2月前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
11天前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
33 14
|
3天前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
18 3
|
2月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
5天前
|
存储 Python
[oeasy]python056_python中下划线是什么意思_underscore_理解_声明与赋值_改名字
在Python中,下划线有多种用途。单下划线(_)常用于避免命名冲突,如将`max`改为`max_`以保留内置函数功能。双下划线(__var__)通常用于特殊方法和属性,如`__name__`、`__doc__`等。此外,单下划线(_)在交互式解释器中表示上一次表达式的值,但不建议作为普通变量名使用。总结:下划线用于避免命名冲突及特殊标识。
13 1
下一篇
开通oss服务