主控程序 回忆上次内容
  • 上次把 apple.py 拆分成了
  • 输入
  • 主函数
 
  • 引用模块中变量的时候
  • 要带上包(module)名
  • get_fruits.a
  • get_fruits.b
 
 
  • 最终
  • 拆分代码 成功!
 
  • 可以将程序
  • 再拆分成
  • 输入
  • 输出
 
  • 然后 再由主函数调用吗?
 
建立主控
  • 新建一个 main.py 文件
  • 导入 input、output 两个包
  • 然后运行
  • vi -o main.py get_fruits.py output.py
 

 
添加图片注释,不超过 140 字(可选)
 
  • 增大窗口宽度
  • ctrl+w , +
 
  • 减小窗口宽度
  • ctrl+w , -
 
运行

 
添加图片注释,不超过 140 字(可选)
 
  • 运行成功
程序结构

 
添加图片注释,不超过 140 字(可选)
 
  • 既然我在 main.py 里面已经导入了 input 这个包
  • 我还有必要在 output 中导入这个包么?
  • 实践出真知
  • 试着删除output中的第一句

 
添加图片注释,不超过 140 字(可选)
尝试
  • 失败!

 
添加图片注释,不超过 140 字(可选)
 
  • 还是需要在 output 中导入 get_fruits 这个包的
  • 虽然 main 认识了 get_fruits
  • 但是 output 不认识也不行
  • 不认识 就无从得到输入的数值
 
  • 我们跳出具体文件
  • 去观察文件架结构
 
文件结构
  • 可以看到出现了
  • 两个被引用包的 pyc 文件
 

 
添加图片注释,不超过 140 字(可选)
 
  • 能对比一下吗?
对比

 
添加图片注释,不超过 140 字(可选)
 
  • 编译后的pyc文件
  • 依稀能够看到
  • 字符串
  • 变量名
  • 函数名
 
 

 
添加图片注释,不超过 140 字(可选)
 
  • 模块隐隐约约
  • 是可以看懂的
 
顺序过程
  • 其实代码可以分成三块
  • 输入
  • 处理
  • 输出
 

 
添加图片注释,不超过 140 字(可选)
 
  • 这是一个典型的 面向过程的 程序
  • 面向过程就是 Procedure Oriented
  • 按部就班
  • 把复杂的过程
  • 分解成 相对简单明确的模块
 
  • 每个模块 做自己简单明确的事情
  • 专业分工
  • 提高效率
 
 
  • 这是工业时代
  • 提高效率的思维模式
 
分工明确
  • 铁路警察
  • 各管一段
 
  • 不要想着怎么发明轮子
  • 轮子有现成的
  • 拿来用就完事了
 

 
添加图片注释,不超过 140 字(可选)
 
  • 接下来把模块分成三块
功能
作用
模块名
输入
接收到什么信号
get_fruits
处理
怎么处理信号
process
输出
最终输出什么信号
output
  • 那建立 process.py
三步走
  • main
  • 需要 3 个包都导入
 
  • process
  • 只需要导入 get_fruits
 
  • get_fruits
  • 虽然被导入了两次
  • 但是输入数值的部分
  • 只被执行一次
 
 
  • output
  • 只需要 process 模块求和的结果
  • 而不需要导入 get_fruits 模块
  • 需要明确 total 来自于 process 包
 

 
添加图片注释,不超过 140 字(可选)
 
  • 测试结果
  • 数字(123)当做测试用例的话
  • 能成功
 
  • 但是用字母(abc)当测试用例的话
  • 会如何呢?
 
 
不成功 ‍♀️

 
添加图片注释,不超过 140 字(可选)
 
  • 问题出在process.py中
  • int(a) + int(b)那一步
 
  • 所以需要在那里
  • try
  • except
 
处理异常
  • 修改代码

 
添加图片注释,不超过 140 字(可选)
运行结果
  • 字母的测试用例
  • 可以顺利地报错
 

 
添加图片注释,不超过 140 字(可选)
 
  • 但是现在还面临一个问题
  • 就是不明确
  • 不知道
  • 是 a 出了问题
  • 还是 b 出了问题
 
  • 报错细节不明确
 
修改代码
  • 在process模块中
  • 分别try...except...
 

 
添加图片注释,不超过 140 字(可选)
 
  • 这样运行是没有问题的
优化代码
  • 不过应该还有更好的方式

 
添加图片注释,不超过 140 字(可选)
 
  • 转化工作
  • 其实应该在输入部分完成
 
  • 输入变量的容错处理
  • 应该在输入的时候 就第一时间做
  • 不要留到数据处理时 才做
 
总结
  • 我们细化了主控程序(main.py)
  • 导入(get_fruits.py)
  • 处理(process.py)
  • 输出(output.py)
 
  • 使用了 try 结构
  • try
  • except
  • 发现异常就报错
 
  • 输入部分的错误
  • 应该在 输入部分来报
 


[oeasy]python0143_主控程序_main的更多相关文章

  1. cdnbest节点安装后连不上cdn主控原因排查

    1. 查看节点程序是否启动 ps -aux |grep kangle 2. 登陆cdn节点用telnet命令查下和主控的通信,命令:telnet 主控ip 3320 3. 如果节点程序都有启动,可查看 ...

  2. linux系统编程综合练习-实现一个小型的shell程序(一)

    之前已经花了不少篇幅学习了linux系统编程的很多知识点:文件与io.进程.信号.管道,而零散的知识点,怎么能够综合的串接起来是学习的一个很重要的目的,当然最好的方式就是用所学的知识点做一个项目了,所 ...

  3. 自动化集成部署udeployer 批量统一安装一键部署

    通过jenkins构建项目:version版本控制:udployer自动化集成:ucop业务巡检做到高效高可用的自动化体系.   1.0版本: 逻辑与业务分离,完美实现逻辑与业务分离,业务实现统一sh ...

  4. linux笔记_防止ddos攻击

    一.什么是DoS攻击 DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务.最常见的DoS攻击有计算机网络带宽攻 ...

  5. 转:MyBean简介

                        (在开始之前,非常感谢 D10.天地弦) 1.1 概述 MyBean是一个用于Delphi应用程序开发的开源.轻量级.可配置插件框架.它通过巧妙的系统架构设计, ...

  6. web前端安全 XSS跨站脚本 CSRF跨站请求伪造 SQL注入

    web安全,从前端做起,总结下web前端安全的几种技术: 1,XSS XSS的全称是Cross Site Scripting,意思是跨站脚本,XSS的原理也就是往HTML中注入脚本,HTML指定了脚本 ...

  7. Android执行程序或脚本的方法

    Java中提供了两种方法来执行程序或脚本: (1) 使用Runtime的exec()方法 (2) 使用ProcessBuilder的start()方法 ProcessBuilder.start() 和 ...

  8. 分布式拒绝服务攻击 DDoS

    分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒 ...

  9. wildfly jobss 同时连接多个数据源

    由于需要从一个远程机器取数据.处理后保存到本地数据库处理.用 wildfly datasource 会报: [com.arjuna.ats.arjuna] (default task-6) ARJUN ...

  10. Java实验三报告

    一.  实验内容 (一)敏捷开发与XP 摘要:一项实践在XP环境中成功使用的依据通过XP的法则呈现,包括:快速反馈.假设简单性.递增更改.提倡更改.优质工作.XP软件开发的基石是XP的活动,包括:编码 ...

随机推荐

  1. 异构数据源同步之数据同步 → datax 改造,有点意思

    开心一刻 去年在抖音里谈了个少妇,骗了我 9 万 后来我发现了,她怕我报警 她把她表妹介绍给我 然后她表妹又骗了我 7 万 DataX DataX 是什么,有什么用,怎么用 不做介绍,大家自行去官网( ...

  2. 珠排序算法C# 简单实现 奇葩排序中的算盘排序(算珠排序)算法

    Console.WriteLine("Hello World!"); int[] arr = { 1, 3, 4, 0, 22, 4,0, 6, 3,10,8,6,7 }; Con ...

  3. Prism IoC 依赖注入

    现有2个项目,SinglePageApp是基于Prism创建的WPF项目,框架使用的是Prism.DryIoc,SinglePageApp.Services是C#类库,包含多种服务,下面通过使用Pri ...

  4. 使用python在k8s中创建一个pod

    要在Kubernetes (k8s) 中使用Python创建一个Pod,你可以使用Kubernetes Python客户端库(通常称为kubernetes或kubernetes-client).以下是 ...

  5. centos7下利用qemu搭建arm模拟器

    1 目的 在centos7下使用qemu搭建arm模拟器. 参考博客: centos下利用qemu搭建arm模拟器 - 寒水司天 - 博客园 (cnblogs.com) 从零使用qemu模拟器搭建ar ...

  6. 谁说.net core不好动态访问webservice?看这篇文章,C#快速实现动态访问webservice,兼容.net framework和.net core+

    前言:访问webservice,大多数人都是用服务引用的方式,但是这种方式比较麻烦,例如遇到服务更新了,你还需要手动更新你的服务引用,再重新发布,很麻烦.或者已有的一些例子,至少我看到的很多案例,动态 ...

  7. 关于 ulimit 的两个天坑

    稍微有点 Linux 经验的人一定会遇到过 "Too many open files" 错误,这个错误本质是 ulimit 设置不合理导致的.关于 ulimit 设置,有哪些需要注 ...

  8. 使用python+pytesseract实现图片中文字的识别

    一.安装tesseract 1.下载链接 https://digi.bib.uni-mannheim.de/tesseract/ 2.网盘下载地址 链接:https://pan.baidu.com/s ...

  9. Python 安装 matlabengin 时遇到报错:setup.py install is deprecated. !! 以及 Cannot update time stamp of directory 'dist\matlabengine.egg-info' 的解决方案

    目录 Python 安装 matlabengin 时遇到报错:setup.py install is deprecated. !! 以及 Cannot update time stamp of dir ...

  10. pytest-parallel 多线程执行用例,访问pymysql数据库,遇到的问题

    遇到的问题 1.pymysql.err.ProgrammingError: execute() first 2.File "D:\xxx\python3.8\lib\site-package ...