高一上册信息技术 可以复用的代码——共享代码的发布与使用 逐字稿-4,087字
师:上一讲我们了解了函数的概念,除了系统自带函数,还能使用用户自定义函数。其格式以关键词DEF开头,空格后接自定义函数名、括号及所需参数,冒号换行后缩进写语句。参数用于向函数传递值,多个参数用逗号分隔。函数执行完,由return语句将表达式的值返回给调用者,函数结束。回顾下,解决火柴棒摆数字问题时,自定义函数Machnone在主程序中由for循环多次调用,实现了程序内代码复用。那么不同程序间若要共享代码该怎么做?比如A同学写好代码,想给B同学用,怎么共享成果呢?最常见的办法是发布代码,一般把编写好的用户自定义函数转换成模板发布在本机。需要共享的人,像B同学,可下载发布后的共享文件夹,在本地安装、导入模块后使用。下面我们来完成活动:将计算一个数字需要多少根火柴棒的函数转换成模块并发布。
首先,做好发布前的准备工作。在D盘创建一个文件夹,命名为mymodule,大家也可根据自己电脑情况在其他盘符创建,不过后期安装时要注意文件目录。在mymodule文件夹下会有两个.py文件,一个是记录自定义函数的模块文件,另一个是setup文件。我们打开Python的IDLE窗口,新建一个模块文件,它就是上节课自定义函数machnum的主体部分。打开上节课编写的程序,把自定义函数整体复制保存,存到D盘刚新建的mymodule文件夹下,文件名我命名为mymodule,大家也能按需重命名。这样就建立了模块文件。
接着创建setup文件,输入如下代码。主要是setup函数,这里面有两个重要赋值语句,一个是name = ,这里的参数一定要和刚创建的模块文件名一致,比如这里是mymodule。一行结束输入逗号,另一条语句是py_modules = ,这里中括号里同样要输入和模块文件同名的名字。这两条语句是setup函数中必须有的,即name等于文件名,py_modules等于文件名。之后还可输入一些和当前模块有关的信息,比如version是程序版本号,当前是1.0.1版本;还能输入模块作者的Email,这也是对自己版权的一种保护;再加上description用于描述模块功能,同样是赋值语句。检查每个语句结束不要忘记加逗号,setup函数结束加上后括号,这样setup文件就构建好了。保存该文件,存到D盘新建的mymodule文件夹下,命名为setup。此时两个.py文件建立好,完成发布前准备工作。
接下来打开mymodule所在目录,构建发布文件。这需要用到DOS命令,在开始菜单输入运行CMD命令,进入DOS界面。输入DOS命令“D:”回车进入D盘,再用CD命令,即“CD mymodule”回车,进入该文件夹。在文件夹下用Python命令创建发布文件,要先找到本机Python文件位置。通过开始菜单找到Python的命令行主程序,右键选择属性查看起始位置,复制该位置。关闭窗口,在DOS命令下右键粘贴地址,也可手动输入。在地址后输入“python setup.py sdist”命令,若系统没报错,就表明创建好了发布文件。这时查看mymodule文件夹,会发现比之前多了两个文件,发布文件构建完成。
然后要把发布文件安装到本地Python中,也可此时将文件共享给同学。在D盘命令下输入安装命令,输入Python地址,用斜杠分隔,接着输入“python setup.py install”回车。系统会把文件安装到Python副本下,我们检查一下,安装完成后,在C盘Python安装目录Python34下的lib文件夹里的site - packages中,会看到新增了mymodule模块及一个信息文件。再看D盘的mymodules文件夹,安装完成后包含5个文件,至此自定义模块mymodule发布完成。
发布模块mymodule后,要用该模块完成火柴棒摆数字问题,该怎么调用呢?构建发布的模块必须先导入再使用,导入用语句“import + 模块名”,调用模块内函数时,用“模块名.函数名(参数)”来实现。接下来同学们完善程序,导入已安装发布好的模块mymodule,实现火柴棒摆数字问题。代码开头用“import”关键词,后面加上发布好的模块名mymodule,导入自定义模块。看主程序部分,在“for i in range(112)”循环中,“if”什么情况等于“s long”,我们“print”这个i。从前面学习知道,这里要调用mymodule中的matchnone函数,使用方法就是模块名加点加函数名,即“mymodule.matchnone()”,如果函数有参数就代入,没参数括号也不能少,这样就能完成函数调用。
我们实际运行这两个程序,第一个是第一课时用自定义函数在主程序中调用内部自定义函数实现功能的代码,运行可看到完成任务。第二个是本节课生成自定义模块后,通过import导入自定义模块,在主程序中用“模块名.内置函数名”方式完成的程序,运行也能完成任务。比较两种调用方式,左边上节课学的是在程序内部通过自定义函数在主程序中调用实现代码复用;今天学的是通过import导入mymodel模块,在主程序中用“模块名.函数名”方式调用模块中的函数,两者运行结果相同。对比发现调用模块函数时,我们更多把算法集中在问题整体思路上,这是软件工程思想重要部分,也是之前介绍的自顶向下、逐步细化、模块化的设计思想,同时优秀代码得到共享,方便用户、提高效率。