python函数定义下 python自定义函数( 四 )


条件语块内添加了四行代码(第12,13,14和15行):
现在,在命令行中运行best_practices.py,并观察输出的变化:
首先 , 输出显示了process_data()函数外的print()的调用结果 。
之后,data的值被打印 。因为当Python解释器将文件作为脚本执行时,变量__name__具有值"__main__" , 因此条件语句被计算为True 。
接下来,脚本将调用process_data()并传入data进行修改 。当process_data执行时,将输出一些状态信息 。最终,将输出modified_data的值 。
现在您可以验证从解释器(或其他模块)导入best_practices.py后发生的事情了 。如下示例演示了这种情况:
注意,当前结果与将条件语句添加到文件末尾之前相同 。因为此时__name__变量的值为"best_practices",因此条件语句结果为False,Python将不执行process_data() 。
创建名为main()的函数来包含要运行的代码
现在,您可以编写作为脚本由从命令行执行并导入且没有副作用的Python代码 。接下来,您将学习如何编写代码并使其他程序员能轻松地理解其含义 。
许多语言,如C , C++,Java以及其他的一些语言 , 都会定义一个叫做main()的函数,当编译程序时 , 操作系统会自动调用该函数 。此函数通常被称为入口点(entry point),因为它是程序进入执行的起始位置 。
相比之下,Python没有一个特殊的函数作为脚本的入口点 。实际上在Python中可以将入口点定义成任何名称 。
尽管Python不要求将函数命名为main(),但是最佳的做法是将入口点函数命名为main() 。这样方便其他程序员定位程序的起点 。
此外,main()函数应该包含Python解释器执行文件时要运行的任何代码 。这比将代码放入条件语块中更好,因为用户可以在导入模块时重复使用main()函数 。
修改best_practices.py文件如下所示:
在这个示例中,定义了一个main()函数 , 它包含了上面的条件语句块 。之后修改条件语块执行main() 。如果您将此代码作为脚本运行或导入,将获得与上一节相同的输出 。
在main()中调用其他函数
另一种常见的实现方式是在main()中调用其他函数,而不是直接将代码写入main() 。这样做的好处在于可以实现将几个独立运行的子任务整合 。
例如,某个脚本有如下功能:
如果在单独的函数中各自实现这些子任务 , 您(或其他用户)可以很容易地实现代码重用 。之后您可以在main()函数中创建默认的工作流 。
您可以根据自己的情况选择是否使用此方案 。将任务拆分为多个函数会使重用更容易,但会增加他人理解代码的难度 。
修改best_practices.py文件如下所示:
在此示例代码中,文件的前10行具有与之前相同的内容 。第12行的第二个函数创建并返回一些示例数据,第17行的第三个函数模拟将修改后的数据写入数据库 。
第21行定义了main()函数 。在此示例中,对main()做出修改 , 它将调用数据读?。?数据处理以及数据写入等功能 。
首先,从read_data_from_web()中创建data 。将data作为参数传入process_data() , 之后将返回modified_data 。最后,将modified_data传入write_data_to_database() 。
脚本的最后两行是条件语块用于验证__name__ , 并且如果if语句为True,则执行main() 。
在命令行中运行如下所示:
根据执行结果,Python解释器在执行main()函数时,将依次执行read_data_from_web(),process_data()以及write_data_to_database() 。当然,您也可以导入best_practices.py文件并重用process_data()作为不同的数据输入源,如下所示:

推荐阅读