12
返回列表 发新帖
楼主: jieforest

理解Pythonic

[复制链接]
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
11#
 楼主| 发表于 2014-6-24 21:45 | 只看该作者
稍有编程经验的人都可以通过上例认识到利用Python 编程极为容易这一事实。

一个Pythonic 的框架不会对已经通过惯用法完成的东西重复发明“轮子”,而且它也遵循常用的Python 惯例。创建Pythonic 的框架极其困难,什么理念更酷、更符合语言习惯对此毫无帮助,事实上这些年来优秀的Python 代码的特性也在不断演化。比如现在认为像generators 之类的特性尤为Pythonic。

另一个有关新趋势的例子是:Python 的包和模块结构日益规范化。现在的库或框架跟随了以下潮流:

1)包和模块的命名采用小写、单数形式,而且短小。

2)包通常仅作为命名空间,如只包含空的 __init__.py 文件。

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
12#
 楼主| 发表于 2014-6-25 23:45 | 只看该作者
建议2:编写Pythonic 代码

如何编写更加Pythonic 的代码,与定义什么是Pythonic 一样困难。在这里,只能给出一些经验之谈,希望对大家有所帮助。

(1)要避免劣化代码

与优化代码对应,劣化代码就是一开始写出来就是不合理的代码,比如不合适的变量命名等。通常有以下几个值得注意的地方:

1)避免只用大小写来区分不同的对象。如a 是一个数值类型变量,A 是String 类型,虽然在编码过程中很容易区分二者的含义,但这样做毫无益处,它不会给其他阅读代码的人带来多少便利。

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
13#
 楼主| 发表于 2014-6-25 23:46 | 只看该作者
2)避免使用容易引起混淆的名称。容易引起混淆的名称的使用情形包括:重复使用已经存在于上下文中的变量名来表示不同的类型;

误用了内建名称来表示其他含义的名称而使之在当前命名空间被屏蔽;没有构建新的数据类型的情况下使用类似于element、list、dict 等作为变量名;

使用o(字母O 小写的形式,容易与数值0 混淆)、l(字母L 小写的形式,容易与数值1 混淆)等作为变量名。因此推荐变量名与所要解决的问题域一致。有如下两个示例,示例二比示例一更好。

示例一:
  1. >>> def funA(list,num):
  2.     for element in list:
  3.         if num==element:
  4.             return True
  5.         else:
  6.             pass
  7. ...
复制代码

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
14#
 楼主| 发表于 2014-6-25 23:47 | 只看该作者
示例二:
  1. >>> def find_num(searchList,num):
  2.     for listValue in searchList:
  3.         if num==listValue:
  4.             return True
  5.         else:
  6.             pass
  7. ...
复制代码

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
15#
 楼主| 发表于 2014-6-25 23:48 | 只看该作者
3)不要害怕过长的变量名。为了使程序更容易理解和阅读,有的时候长变量名是必要的。不要为了少写几个字母而过分缩写。下例是一个用来保存用户信息的字典结构,变量名person_info 比pi 的可读性要强得多。
  1. >>> person_info={'name':'Jon','IDCard':'200304','address':'Num203,Monday Road', 'email':'test@gail.com'}
复制代码

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
16#
 楼主| 发表于 2014-6-25 23:49 | 只看该作者
(2)深入认识Python 有助于编写Pythonic 代码

可以从以下几个方面进行着手:

1)‰‰全面掌握 Python 提供给我们的所有特性,包括语言特性和库特性。其中最好的学习方式应该是通读官方手册中的Language Reference 和Library Reference。掌握了语言特性和库特性,以后许多“惯用法”自然而然就掌握了,写代码的时候,自然会使用常见的、公认的、简短的惯用法来实现预期效果,也使得代码显得尤为Pythonic。

2)‰‰随着 Python 的版本更新、时间的推移,Python 语言不断演进,社区不断成长,还需要学习每个Python 新版本提供的新特性,以及掌握它的变化趋势。

从另一角度来看,一方面Python 语言推荐使用大量的惯用法来完成任务(“完成任务的唯一方法”);另一方面,社区不断演变的新惯用法反过来又影响了语言的进化,以更好地支持惯用法。比如早年的Pythonista 常用dict.has_key() 方法来判断字典对象是否包含某个元素,但新版本的Python 中提供了in 操作符(支持多种容器类型)取代它。改变习惯的阻力很大,而克服这些阻力的唯一方法就是加深对Python 的认识,因为在语言支持正确的惯用法之后,非推荐的代码通常执行起来更慢。所以说,不更新知识是不行的。

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
17#
 楼主| 发表于 2014-6-25 23:49 | 只看该作者
(2)深入认识Python 有助于编写Pythonic 代码

可以从以下几个方面进行着手:

1)全面掌握 Python 提供给我们的所有特性,包括语言特性和库特性。其中最好的学习方式应该是通读官方手册中的Language Reference 和Library Reference。掌握了语言特性和库特性,以后许多“惯用法”自然而然就掌握了,写代码的时候,自然会使用常见的、公认的、简短的惯用法来实现预期效果,也使得代码显得尤为Pythonic。

2)随着 Python 的版本更新、时间的推移,Python 语言不断演进,社区不断成长,还需要学习每个Python 新版本提供的新特性,以及掌握它的变化趋势。

从另一角度来看,一方面Python 语言推荐使用大量的惯用法来完成任务(“完成任务的唯一方法”);另一方面,社区不断演变的新惯用法反过来又影响了语言的进化,以更好地支持惯用法。比如早年的Pythonista 常用dict.has_key() 方法来判断字典对象是否包含某个元素,但新版本的Python 中提供了in 操作符(支持多种容器类型)取代它。改变习惯的阻力很大,而克服这些阻力的唯一方法就是加深对Python 的认识,因为在语言支持正确的惯用法之后,非推荐的代码通常执行起来更慢。所以说,不更新知识是不行的。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表