讲解Python之禅 掌握python的文化艺术精华

摘要: 紧紧围绕一门語言学习培训它的文化艺术精粹能给你变成一位更出色的程序猿更进一步,假如你要没读过Python之禅(Zen of Python) ,那麼开启Python的指令提醒符键入import this,目录中的每一...

紧紧围绕一门語言学习培训它的文化艺术精粹能给你变成一位更出色的程序猿更进一步,假如你要没读过Python之禅(Zen of Python) ,那麼开启Python的指令提醒符键入import this,目录中的每一项你都可以以在这里里寻个相对性应的事例。


(Credit: itswater ) 

吸引住我留意力的一条是:


雅致胜于丑恶 (Beautiful is better than ugly)


看看面事例:


一个含有数据主要参数的list涵数其作用是回到主要参数中的单数能够分离写:


#----------------------------------------------------------------------- 

 halve_evens_only = lambda nums: map(lambda i: i/2,\ 

 filter(lambda i: not i%2, nums)) 

 #----------------------------------------------------------------------- 

def halve_evens_only(nums): 

 return [i/2 for i in nums if not i % 2] 

记牢Python中这些十分简易的事


2个自变量的互换:


1 a, bb = b, a 

主要参数在切成片实际操作中的流程,如:


a = [1,2,3,4,5] 

 a[::2] # 以步长为2的增加量迭代更新全部list目标 

[1,3,5] 

一个独特的事例 x[::-1]用于翻转x的好用英语的语法。


a = [1,2,3,4,5] 

 a[::2] # 以步长为2的增加量迭代更新全部list目标 

[1,3,5] 

不必用可变性目标做为默认设置主要参数值(Don’t use mutable as defaults)


def function(x, l=[]): # 不必那么干 

def function(x, l=None): # 更强的一种方法 

 if l is None: 

 l = [] 

而并不是items


iteriterms 应用的是 generators,因此当迭代更新非常大的编码序列是此方式更强


d = {1:  1 , 2:  2 , 3:  3 } 

 

for key, val in d.items() # 启用items()之后搭建一个详细的list目标 

 

for key, val in d.iteritems() # 仅有在迭代更新时每恳求一次才转化成一个值 

此场景和range与xrange的关联类似。


应用isinstance 而并不是type


不必那样做:


if type(s) == type( ): ... 

if type(seq) == list or \ 

type(seq) == tuple: ... 

应当是那样:


if isinstance(s, basestring): ... 

if isinstance(seq, (list, tuple)): ... 

对于为何那样做,看这儿:a/1549854/504262


必须留意的是这儿应用basestring而并不是str是由于你可以能用到一个unicode目标去查验是不是为string,比如:


   a=u aaaa  

 print isinstance(a, basestring) 

True 

 print isinstance(a, str) 

False 

由于在Python中3.0下列的版本号存有二种标识符串种类str和unicode


object


|


basestring


/ \


str unicode


学习培训各种各样结合(learn the various collections)


python有各种各样各种各样的器皿数据信息种类,在特殊状况下挑选python內建的器皿如:list和dict。一般大量像以下方法应用:


freqs = {} 

for c in  abracadabra : 

try: 

freqs[c] += 1 

except: 

freqs[c] = 1 

一种更强的计划方案以下:


freqs = {} 

for c in  abracadabra : 

freqs[c] = freqs.get(c, 0) + 1 

一种更强的挑选 collection种类defautdict:


from collections import defaultdict 

freqs = defaultdict(int) 

for c in  abracadabra : 

freqs[c] += 1 

其他结合


namedtuple() # 用特定的域建立元组子类的加工厂涵数 

deque # 相近list的器皿,迅速追多方面及删掉在编码序列的两边 

Counter # 统计分析哈希表的dict子类 

OrderedDict # 纪录实体线加上次序的dict子类 

defaultdict # 启用加工厂方式为key出示默认设置值的dict子类 

当建立类时Python的魔术师方式:


__eq__(self, other) # 界定相同实际操作的个人行为, ==. 

__ne__(self, other) # 界定不相同实际操作的个人行为, !=. 

__lt__(self, other) #界定低于实际操作的个人行为,  . 

__gt__(self, other) #界定并不大于实际操作的个人行为,  . 

__le__(self, other) #界定低于相当于实际操作的个人行为,  =. 

__ge__(self, other) #界定超过相当于实际操作的个人行为,  =. 

标准取值


x = 3 if (y == 1) else 2 

 

表述式请起來刚好像:假如y相当于1就把3取值给x,不然把2取值给x,自然一样可使用链条式标准取值假如你要有更繁杂的标准得话。


x= 3 if (y == 1) else 2 if (y == -1) else 1 

但是来到某一特殊的点,它就会有点儿太过了。


记牢,你可以以在一切表述式中应用if-else比如:


(func1 if y == 1 else func2)(arg1, arg2) 

 

func1将被启用假如y相当于1得话,相反func2被启用。二种状况下,arg1和arg22个主要参数都将附加在相对的涵数中。


相近地,下边这一表述式一样是恰当的


x = (class1 if y == 1 else class2)(arg1, arg2) 

class1和class2是2个类


在必须的时侯应用Ellipsis


建立类时,你可以令其用__getitem__,给你的类像字典一个工作中,拿到面这一类举例说明来讲:


class MyClass(object): 

def __init__(self, a, b, c, d): 

self.a, self.b, self.c, self.d = a, b, c, d 

 

def __getitem__(self, item): 

return getattr(self, item) 

 

x = MyClass(10, 12, 22, 14) 

由于拥有__getitem__,你也就可以根据目标x的x[‘a’]获得a的值,这应当是认可的客观事实。


这一目标一般用以承继Python的切成片(slicing) (#bltin-ellipsis-object),假如加上以下句子:


def __getitem__(self, item): 

if item is Ellipsis: 

return [self.a, self.b, self.c, self.d] 

else: 

return getattr(self, item) 

大家便可令其用x[…]获得的包括全部项的编码序列


 x = MyClass(11, 34, 23, 12) 

 x[...] 

[11, 34, 23, 12] 



2016 嘿!编码 copy right  
嘿!编码-测算机程序编写新手入门网站,关心手机软件开发设计全新技术性,收集企业网站建设受欢迎資源。
手机软件开发设计全集,企业网站建设手册,程序猿必上的程序编写新手入门网站。 


联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503

技术支持:网站自助建站