python的语言风格(一)

从本文开始,笔者将介绍一些python的语言风格,利用这些方式去编写代码、组织逻辑将事半功倍。有兴趣的朋友可以阅读Guido van Rossum的文章www.Python.org/dev/peps/pep-0020/

模块结构和布局:

用模块结构来合理组织你的Python代码是简单又自然的方法。你应该建立一种统一且容易阅读的结构,并将它应用到每一个文件中去。下面就是一种非常合理地布局:
# (1) 起始行(Unix)
# (2) 模块文档
# (3) 模块导入
# (4) 变量定义
# (5) 类定义
# (6) 函数定义
# (7) 主程序

(1) 起始行
通常只有在类Unix 环境下才使用起始行,有起始行就能够仅输入脚本名字来执行脚本,无需直接调用解释器。
(2)模块文档
简要介绍模块的功能及重要全局变量的含义,模块外可通过 module.__doc__ 访问这些内容。
(3)模块导入
导入当前模块的代码需要的所有模块;每个模块仅导入一次(当前模块被加载时);函数内部的模块导入代码不会被执行, 除非该函数正在执行。
(4)变量定义
这里定义的变量为全局变量,本模块中的所有函数都可直接使用。从好的编程风格角度说,除非必须,否则就要尽量使用局部变量代替全局变量,如果坚持这样做,你的代码就不但容易维护,而且还可以提高性能并节省内存。
(5)类定义语句
所有的类都需要在这里定义。当模块被导入时class 语句会被执行, 类也就会被定义。类的文档变量是class.__doc__。
(6)函数定义语句
此处定义的函数可以通过module.function()在外部被访问到,当模块被导入时 def 语句
会被执行, 函数也就都会定义好,函数的文档变量是function.__doc__。
(7) 主程序
无论这个模块是被别的模块导入还是作为脚本直接执行,都会执行这部分代码。通常这里
不会有太多功能性代码,而是根据执行的模式调用不同的函数。

下面以一段代码来具体说明
代码块语法遵循标准markdown代码,例如:

#/usr/bin/env python"this is a test module"import sys
import osdebug = Trueclass FooClass (object):"Foo class"passdef test():''test function''foo = FooClass()if debug:print 'ran test()'if __name__ == '__main__':test()    

推荐代码风格:主程序调用main()函数主程序代码通常都和你前面看到的代码相似,检查 __name__ 变量的值然后再执行相应的调用。主程序中的代码通常包括变量赋值, 类定义和函数定义,随后检查__name__来决定是否调用另一个函数(通常调用main()函数)来完成该模块的功能。主程序通常都是做这些事。不管用什么名字,我们想强调一点那就是:这儿是放置测试代码的好地方。

很多项目都是一个主程序,由它导入所有需要的模块。所以请记住,绝大部分的模块创建的目的是为了被别人调用而不是作为独立执行的脚本。我们也很可能创建一个Python 库风格的模块,这种模块的创建目的就是为了被其他模块调用。总之,只有一个模块,也就是包含主程序的模块会被直接执行,或由用户通过命令行执行,或作为批处理执行, 或由Unix cron 任务定时执行,或通过Web 服务器调用,或通过GUI 执行。

时刻记住一个事实,那就是所有的模块都有能力来执行代码。最高级别的Python 语句,也就是说, 那些没有缩进的代码行在模块被导入时就会执行, 不管是不是真的需要执行。由于有这样一个“特性”,比较安全的写代码的方式就是除了那些真正需要执行的代码以外, 几乎所有的功能代码都在函数当中。再说一遍, 通常只有主程序模块中有大量的顶级可执行代码,所有其它被导入的模块只应该有很少的顶级执行代码,所有的功能代码都应该封装在函数或类当中。

在主程序中书写测试代码

优秀的程序员和软件工程师,总是会为我们的应用程序提供一组测试代码或者简单教程。对那些仅仅为了让别的程序导入而创建的模块来说, Python 有效的简化了这个任务。这些模块理论上永远不会被直接执行, 那么,在这个模块被直接执行时进行系统测试岂不妙哉? 设置起来难吗? 一点儿也不。

测试代码仅当该文件被直接执行时运行, 也就是说不是被别的模块导入时。上文及核心笔记中提到如何判断一个模块是被直接运行还是被导入。我们应该利用 __name__ 变量这个有利条件。将测试代码放在一个或者叫main(), 或者叫test()(或者你随便取个啥名字)的函数中,如果该模块是被当成脚本运行, 就调用这个函数。

这些测试代码应该随着测试条件及测试结果的变更及时修改, 每次代码更新都应该运行这些测试代码,以确认修改没有引发新问题。只要坚持这样做,你的代码就会足够健壮,更不用提验证和测试新特性和更新了。

相关模块和开发工具

Python 代码风格指南(PEP8), Python 快速参考和Python 常见问答都是开发者很重要的“工具”。另外, 还有一些模块会帮助你成为一个优秀的Python 程序员。

  • Debugger: pdb
  • Logger:logging
  • Profilers:profile,hotshot,cProfile

调试模块 pdb 允许你设置(条件)断点,代码逐行执行,检查堆栈。它还支持事后调试。

logging 模块是在 Python2.3 中新增的, 它定义了一些函数和类帮助你的程序实现灵活的日志系统。共有五级日志级别: 紧急, 错误,警告,信息和调试。

python的语言风格(一)相关推荐

  1. python古诗词风格分析_2017年高考古诗词鉴赏技巧:分析语言风格题解题模式

    2017年高考古诗词鉴赏技巧:分析语言风格题解题模式 1 设问方式:这首诗在语言上有何特色? 2 设问变式:(1)谈谈这首诗的语言特色.(2)分析这首诗的语言风格(或语言艺术). 3 解答提示:语言风 ...

  2. python古诗词风格分析_古诗词语言风格鉴赏分类探析

    冉洁 [摘要]古诗词语言风格鉴赏中,重在考查对语言的感悟能力,以词语甄别风格,结合内容分析,体味出作者的情感.其类型分为单首诗词语言特色与风格鉴赏.单曲上下阙对比鉴赏.多首诗词对比鉴赏等. [关键词] ...

  3. Shell Perl Python 脚本语言介绍

    一.  Shell 文字操作系统与外部最主要的接口就叫做shell.shell是操作系统最外面的一层.shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系 ...

  4. python入门语言教程_Python入门教程(1)

    人生苦短,我用Python! Python(英语发音:/ˈpaɪθən/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于19 ...

  5. Python脚本语言写法

    Python脚本语言写法 脚本语言的开始行,是指文件中的代码用什么可执行程序去运行它,就这么简单. #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的pyth ...

  6. 各种编程语言功能综合简要介绍(C,C++,JAVA,PHP,PYTHON,易语言)

    各种编程语言功能综合简要介绍(C,C++,JAVA,PHP,PYTHON,易语言) 总结 a.一个语言或者一个东西能火是和这种语言进入某一子行业的契机有关.也就是说这个语言有没有解决社会急需的问题. ...

  7. 如何用Python一门语言通吃高性能并发、GPU计算和深度学习

    [CTO讲堂]如何用Python一门语言通吃高性能并发.GPU计算和深度学习 发表于2016-01-04 15:11| 4374次阅读| 来源CSDN| 4 条评论| 作者蒲婧 CTO俱乐部CTOCT ...

  8. C++_系列自学课程_第_9_课_C语言风格字符串_《C++ Primer 第四版》

    前面说了写关于数组和指针的内容,这次在这里讨论一下字符串,讨论一下C语言风格的字符串. 在C语言里面我们利用字符数组来对字符串进行处理, 在C++里面我们前面说过一种类类型string可以对字符串进行 ...

  9. python计算在月球的体重程序_# Python程序语言设计基础(第二版)程序练习题

    Python程序语言设计基础(第二版)程序练习题 3.1 重量计算,月球上物体的体重是在地球上的16.5%,假如你在地球上每年增长0.5kg,编写程序输出未来10年你在地球和月球上的体重状况. cur ...

  10. python实现多语言语种识别_用Python进行语言检测

    最近正好碰到这个需求,总结一下用Python进行语言检测的方法. 1.用unicode编码检测 汉字.韩文.日文等都有对应的unicode字符集范围,只要用正则表达式匹配出来即可. 在判断的时候,往往 ...

最新文章

  1. AB_PLC_入门教程
  2. numpy逻辑运算符
  3. SpringMVC的国际化
  4. webview300毫秒点击问题
  5. pandas 按字符串肚脐眼 读取数据_十分钟学习pandas! pandas常用操作总结!
  6. Oracle中的单行函数
  7. 浙江农林大学蓝桥杯程序设计竞赛校选拔赛(同步赛)签到题ABFGHIJ
  8. SIGCHLD waitpid, 小心子进程结束事件被偷了
  9. 【VMCloud云平台进阶篇】应用层面优化
  10. OpenCV交叉编译ARM版本
  11. Python实现多重弹窗脚本 整蛊朋友
  12. 邮件服务器搭建安装部署文档
  13. 【电脑修复小知识】电脑网络正常连接,但是浏览器却无法打开网页是什么原因?三招教你修复!
  14. 什么是微内核,看这一篇就够了
  15. 新的一年,知足,上进,不负野心!
  16. getValueFromEvent和shouldUpdate
  17. Mifare Ultra Light 非接触式IC卡
  18. 微信支付签名失败(几种解决方案)
  19. Mac用Homebrew安装MySQL
  20. 阿里云主机遭受DDOS攻击IP不能使用如何更换弹性公网IP

热门文章

  1. centos6.6搭建LANP环境(yum)
  2. Excel时间段计算的相关公式
  3. 磁珠 符号_电子元件磁珠该如何使用呢?
  4. 「英语六级作文」整体框架-Essay Map
  5. 戴尔r410服务器raid装系统,Dell R410 Raid磁盘阵列驱动
  6. 晶闸管相控交流调压的详细计算
  7. Codeforces1548 D1. Gregor and the Odd Cows (Easy)(皮克公式+gcd+数学推导)
  8. html 两个表合并,html如何合并表格
  9. veeam的备份策略(每周6增量备份,每周日合成全量备份)
  10. gatk过滤_VCF文件中的原始突变过滤–filter raw variants in vcf