译者按:使用 ev3dev Linux 系统并用 Python 编程的人数比例很低,好像这一课这样写 Python 编程的就更少了,你会发现程序的重用率会大大的提高!

EV3: Lesson 4 - Python Modules

EV3:第 4 课 - Python 模块

4.1 Separate Functions, Main Program and Global Variables

4.1 分开的函数,主程序,和全局变量

In our last lesson, we learned how to use functions to perform repeated jobs. However, if the main program contains too many functions, the program size will become too large to be maintained. So, we'll need some technique to separate those functions with the main program.

在我们的上一课,我们学习了如何使用函数去执行一些重复的工作。但是,如果主程序里有太多的函数,程序会变得太大而难以维护。所以,我们需要一些技巧去分开主程序和函数。

Those python program files that stored functions are called "Python Modules".

我们叫那些储存函数的档案为【Python 模块】。

In order to share variables between different python programs and modules, we'll also need to put the global variables to a seperate python module. (Note: global variables can only be used within the same python program)

为了可以让一些变量可以同时被主程序及函数使用,我们也需要把这些全局变量放到一个分开的 Python 模块去声明。(要注意的是,前面课程提到的全局变量,是只能在同一个程序档案里使用,这一课教的方法,让全局变量可以跨档案使用)

The following python programs and modules perform the same job that is described in lesson 3:

下面的几个 Python 程序,会执行和第 3 课一样的工作:

To acheive this purpose, let's create an empty python file called "g.py" that stores all required global variables:

要达到这个目的,让我们创建一个空的 Python 程序,并命名为“g.py”,这个模块储存里所有需要的全局变量:

global intResult

intResult = 0

Then, we put all the functions into another python file called "fun.py"

然后,我们把所有的函数放进去另外一个 Python 模块“fun.py”

# import g.py so that the variables defined in it can be used in this module

import g

def funAddWithReturn(intNo1, intNo2):

intTemp = intNo1 + intNo2

return intTemp

def funAddWithoutReturn(intNo1, intNo2):

# Please note that intResult has been changed to g.intResult

g.intResult = intNo1 + intNo2

def funAddWithoutReturnWrong(intNo1, intNo2):

intResult = intNo1 + intNo2

Then, we copy other contents from lesson3_03.py to lesson4_01.py with some modifications:

然后,我们把其他程序内容从 lesson3_03.py 拷贝到 lesson4_01.py 里,并稍微修改:

#!/usr/bin/env python3

from ev3dev.ev3 import *

from time import sleep, time

import traceback

# import g.py and fun.py

import g

import fun

try:

#The main program starts here

lcd = Screen()

lcd.clear()

# Declare local variable

intA = 3

intB = 5

# The answer for the following statement is 8

# Important Note ********** "fun." is added before the function name, as it is defined there!!! **********

lcd.draw.text((5, 5), "intA + intB = " + str(fun.funAddWithReturn(intA, intB)))

# The answer for the following statement is 0, pls. note that intResult has been changed to g.intResult

fun.funAddWithoutReturnWrong(intA, intB)

lcd.draw.text((5, 20), "intA + intB = " + str(g.intResult))

# The answer for the following statement is 8, pls. note that intResult has been changed to g.intResult

fun.funAddWithoutReturn(intA, intB)

lcd.draw.text((5, 35), "intA + intB = " + str(g.intResult))

lcd.update()

sleep(10)

except:

# If there is any error, it will be stored in the log file in the same directory

logtime = str(time())

f=open("log" + logtime + ".txt",'a')

traceback.print_exc(file=f)

f.flush()

f.close()

Upload the above 3 programs and run lesson4_01.py in the EV3 brick, you'll see exactly the same result as in lesson 3:

把上面的 3 个程序上传到 EV3,并且运行主程序 lesson4_01.py,你会发现屏幕输出会和第 3 课的一模一样:

Figure 4.1

In our next lesson, we'll learn how to control the buttons on the EV3 brick.

在下一课,我们会学习如何控制 EV3 主机上面的按键。

ev3编程 python_乐高 EV3 高级编程 - 第四课:Python 模块相关推荐

  1. Linux环境高级编程函数,Linux环境高级编程--出错处理(CLStatus)

    很多程序库对外提供若干类,每个方法出错时如何告知调用者是否出错,以及出错码(在Linux上在error.h中的全局errno就是保存我们Linux程序执行的出错码的)?方法很多,为了简化起见,函数将返 ...

  2. java高级编程期末考试题_java高级编程考题

    Java高级课程测试 1在进行swing开发时,经常用的布局管理器有那几种?(5) 2Gui组件,容器,框架,到底有怎样的关系,请举例说明?(5) 3在进行swing开发中会用到事件处理,那事件处理的 ...

  3. c语言高级编程培训,C语言高级编程

    Q:如何提问,能得到快速的解答? A: 1)标题:撰写标题时,要注意把要问的问题的出处和核心词写出来,最好用[]标出来,比如[第1周编程题在线测试的第1题]求解. 2)内容:内容上要把你不懂的地方说出 ...

  4. java高级编程与普通_Java高级编程

    1. Java是什么样的语言? 答:Java语言是一门用途广泛的.面向对象的语言.Java语言可以编写桌面应用.手机应用及企业应用.Java简洁优雅,易于学习. 2. 没有学过编程,能学吗? 答:本课 ...

  5. java高级编程笔试题_JAVA 高级编程笔试题

    <使用Java实现面向对象编程>阶段测试-笔试试卷 一.选择题(共25题,每题4分,满分100分) 1)下列选项中关于Java中ArrayList.LinkedList.HashMap三个 ...

  6. Linux编程 文件操作,linux高级编程(文件操作)

    功能: 确定文件的访问权限 用法: int access(const char *filename, int amode); finename 文件名称mode 模式,共5种模式: 0-检查文件是否存 ...

  7. python编程常用类型_Python 高级编程系列__03:python 中常见的内置类型

    python 中,对象有三个特征:身份.特征.值. 身份:可以理解为对象在内存中的地址.可以用 id 来查看对象的地址. >>> a=3 >>> id(a) 432 ...

  8. java ee监听器编程,java EE开发之Servlet第四课:监听器(Listener)

    1.什么是Listener 监听器就像老板的秘书,那个秘书就是活的监听器,时时监听着老板,当老板发生一些事情的时候,秘书就会有相应的措施.比如老板口渴了,秘书就会去端茶:比如老板要提提神,秘书就会泡一 ...

  9. 《C#高级编程》笔记系列第一弹-开篇

    虽然以前做过的C#项目也不少了,做过ASP.NET的BS架构的,也做过Winform的CS架构.有一天一位同事给我们看了下面的一个简单的Demo:     public class MainTest ...

  10. 千锋扣丁学堂 如何学习android高级编程

    如何学习android高级编程 学了android高级编程有前途吗?进入2010年之后,android的应用开发进入了一个爆炸式增长的状态,从去年的不到1万款应用程序增加到现在的9万,而且即将突破10 ...

最新文章

  1. AI中pass架构设计优化
  2. Linux Kernel 5.0或在达成600万Git Objects时到来
  3. vmware esxi 5.1 开启嵌套虚拟化
  4. 20160522--20160526----mybatis入门基础
  5. nginx Win下实现简单的负载均衡(2)站点共享Session
  6. python画相关性可视化图上三角_完成这50个Matplotlib代码,你也能画出优秀的图表...
  7. 程序员过关斩将--真的可以用版本号的方式来保证MQ消费消息的幂等性?
  8. 大一C语言大作业ip合法性,c语言实现判断ip地址是否合法
  9. 阿里云计算新增ODPS、SLS两款云产品
  10. 如何保持MacBook电池健康并延长其使用寿命?
  11. Proteus一体化安装STC15库添加
  12. 交换机组播风暴_「广播风暴」CISCO交换机如何防止广播风暴 - seo实验室
  13. 老男孩教育50期-马慧峰-决心书
  14. Elasticsearch7.9集群部署,head插件,canal同步mysql数据到es,亲自测试,无坑
  15. java基础:注解的定义与使用
  16. Obsevability:安全的 APM 服务器访问
  17. 黑客攻防实战,黑客入门到精通,收藏这一篇就够了
  18. matlab atem(),一种直接计算ATEM传输室谐振频率的简单方法
  19. 政务云异构虚拟化平台迁移案例
  20. 用php向新年问候,给客户的新年问候语

热门文章

  1. python提取cad坐标_从CAD图里提取坐标的方法
  2. Iptables 指南
  3. 08.存储Cinder→5.场景学习→02.Create Volume→1.cinder-api处理过程
  4. ESP32-cam 初体验 从esp32-cam的购买到局域网监控的实现
  5. 如何利用用户ID号、关键词或视频时长在自媒体视频软件上批量采集下载关于在自媒体视频软件上批量采集...
  6. 转:三款免费好用的Gif录屏神器
  7. 幅频特性曲线protues_【2017年整理】幅频相频特性multisim11.ppt
  8. 安装程序遇到错误0x80240037-Win7安装Rainmeter
  9. 获取地球某点最新的磁偏角
  10. MIKE水动力笔记5_建立水动力模型