前文所述的一些程序实例,虽然确实可以完成某一特定功能,但是还不能做到系统、全面的保证任意一段程序都可以用一行python实现。为了达到理论上的完备这一目标,博主决定按照“结构化程序设计方法”进行系统的整理。
“结构化程序设计方法”,据度娘的解释是这样滴——
结构化程序设计(structured programming)是进行以模块功能和处理过程设计为主的详细设计的基本原则。其概念最早由迪克斯特拉(E.W.Dijikstra)在1965年提出的,是软件发展的一个重要的里程碑。它的主要观点是采用自顶向下、逐步求精的过程的功能程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。是以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块,这样使完成每一个模块的工作变单纯而明确,为设计一些较大的软件打下了良好的基础。
我们把其中软件工程的思想忽略,专注于程序设计过程的实现,就可以注意到结构化程序设计方法“使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造”。因此,只要能用python在一行中实现这三种结构(当然还要有一些细节),就可以说任意的面向过程的功能都可以用python在一行中完成。
对于顺序结构,我们可以利用python解释List、Tuple、Dictionarie时从左到右的特性来实现,即先把功能写成一个个函数,然后就可以用“[func1(),func2(),func3()...]”的方式,顺序执行func1、func2、func3了。
这里要插进来讨论一下一些import功能。
我们知道python之所以强大,是因为本身带有大量的包,这些包要用import packageName的形式导入后,才可以在当前的程序中使用,比如求1的对数:
>>> import math
>>> math.log10(1)
0.0
>>>
那么如何那么如何在一行中使用包的功能呢?答案很简单,就是用__import__() 函数。这个函数是《Python Library Reference》中“2.1 Built-in Functions”的第一个,详细的用法大家可以参照官方文档。前面求1的对数就可以写作:
>>> __import__("math").log10(1)
0.0
>>>
这里有个隐含问题,就是如果我想多次使用import 的包,总不能每次都用__import__() 函数吧?这个问题相当于如何使用python在一行中创建一个变量,稍稍有点复杂,咱们下次再接着说。