如何将一个 Python 函数进行模块化封装( 三 )

内联函数函数不必在单独的文件中创建 。如果你只是针对一个任务编写一个简短的脚本 , 那么在同一个文件中编写函数可能更有意义 。唯一的区别是你不必导入自己的模块 , 但函数的工作方式是一样的 。以下是时间测试应用程序的最新迭代:
#!/usr/bin/env python3import timetotal = 0def Timer(msg): print(str(msg) + str(time.time() ) ) charge = .02 return chargeprint("Press RETURN for the time (costs 2 cents).")print("Press Q RETURN to quit.")while True: kbd = input() if kbd.lower() == "q": print("You owe $" + str(total) ) exit() else: charge = Timer("Time is ") total = total+charge它没有外部依赖(Python 发行版中包含 time 模块) , 产生与模块化版本相同的结果 。它的优点是一切都位于一个文件中 , 缺点是你不能在其他脚本中使用 Timer() 函数 , 除非你手动复制和粘贴它 。
全局变量在函数外部创建的变量没有限制作用域 , 因此它被视为 全局 变量 。
全局变量的一个例子是在 charge.py 中用于跟踪当前花费的 total 变量 。total 是在函数之外创建的 , 因此它绑定到应用程序而不是特定函数 。
应用程序中的函数可以访问全局变量 , 但要将变量传入导入的模块 , 你必须像发送 msg 变量一样将变量传入模块 。
全局变量很方便 , 因为它们似乎随时随地都可用 , 但也很难跟踪它们 , 很难知道哪些变量不再需要了但是仍然在系统内存中停留(尽管 Python 有非常好的垃圾收集机制) 。
但是 , 全局变量很重要 , 因为不是所有的变量都可以是函数或类的本地变量 。现在你知道了如何向函数传入变量并获得返回 , 事情就变得容易了 。
总结你已经学到了很多关于函数的知识 , 所以开始将它们放入你的脚本中 —— 如果它不是作为单独的模块 , 那么作为代码块 , 你不必在一个脚本中编写多次 。在本系列的下一篇文章中 , 我将介绍 Python 类 。


推荐阅读