设为首页 收藏本站
查看: 2213|回复: 0

[经验分享] 分享书籍[writing idiomatic python ebook]

[复制链接]

尚未签到

发表于 2015-4-23 05:48:59 | 显示全部楼层 |阅读模式
  你是不是总是觉得学了python好久,蓦然回首,总是感觉写的代码不是那么有pythonic的味道。看看别人的代码(django,webpy),再看看自己的代码,觉得就是一java-python的混合体。鉴于这种问题,我准备要多学习别人的一些技术和方式,这不,在网上看到一本不错的书:[writing idiomatic python ebook] 。告诉怎么写出python风格的代码。本来想共享到网盘的,但是一想,这样不好吧,人家的书是挂在上面付费卖的,也不贵,10刀。所以就不共享了。这里把里面的一些注意点以笔记的形式分享出来一起学习。
  ps:我今天发现在163网易阅读里有这本书,提供下链接:http://yuedu.163.com/source/cl_dc23b96c2df84533957ffb1089e90604_4
  在if语句中用链式比较使之更简明



x = 5
if x > 1 and x < 6:
print 'python'

  改成:



if 1 < x < 6:
print 'python'

  
  不要在if语句后面直接写代码,而是换行



x = True
if x:print 'python'
print 'is great!'

  改成:



x = True
if x:
print 'python'
print 'is great!'

  
  在条件判断时,应该避免直接和True,False,None进行比较(==)
  比如我们判断一个集合为空是,会这样写:



l = []
if l == []:
print 'l is empty list'

  改成:



l = []
if not l:
print 'l is empty list'

  其实在if语条的条件判断时,我们一般的语境上下文还是很明确,如对象是否为None,是否条件为True,或者集合是否为空,字典是否为空。python支持直接在if后台跟着这些对象,自动为根据语境转换为相应的布尔值(True或False)。 满足如下的情况,都会认为是False:


  • None
  • False
  • 为0的数值型实例(number)
  • 空的序列,如list, tuple
  • 空的字典,如dict
  • 在自定义的类中定义了__len__返回0 ,或者定义了__nonzero__返回False
  但是有些情况还是不同的,不能适用于这个规则。看下面一个实例:



def getCurrentPositon(position=None):
if not position:
print 'you must set you current position!'
getCurrentPositon(0)   

  方法的作用是得到根据传入的位置做相应的工作。如果传入参数0应该也是合理值,即在坐标原点位置。但是方法还是会打印'you must set you current position!'。 因为0值被条件判断为False。所以应该改成如下 :



def getCurrentPositon(position=None):
if position is None:
print 'you must set you current position!'
getCurrentPositon(0)

  显示的比较是否为None,而不依赖内建的布尔转换。注意这里是用 is 操作符没有用 == 比较符。因为None对象在python中是单实例的,而is就是直接比较两个对象是否一样(可以理解占用同一条内存)
  
  用if,else替换三元(ternary)运算操作符



flag = 2
if flag == 1:
displayValue = 'man'
elif flag == 2:
displayValue = 'woman'

  改成:



displayValue = 'man' if flag == 1 else 'woman'

  
  用enumerate函数代替for循环中的index变量访问



my_container = ['lily', 'lucy', 'tom']
index = 0
for element in my_container:
print '{} {}'.format(index, element)
index += 1

  改成:



for index, element in enumerate(my_container):
print '%d %s' % (index, element)

  
  当for循环体执行完后,可以用else去执行相关的动作
  如这样的场景:遍历所有人的年龄信息,决断当前所有人是不是都是成年人,假如以大于等于20岁划分:



all_person_age = [21, 22, 23, 30]
is_all_adult = True
for age in all_person_age:
if age

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59690-1-1.html 上篇帖子: 使用Tkinter实现python图形界面Hello World 下篇帖子: Python的MySQL库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表