瞧瞧,这样的代码才叫 Pythonic.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
瞧瞧,这样的代码才叫 Pythonic 交换两个变量的值,正常都会想利用一个两头临时变量来过渡。 tmp?=?a a?=?b b?=?tmp 能用一行代码处理的(并且不影响可读性的),决不用三行代码。 a,b?=?b,a 02. 列表推导 下面是一个格外简约的 for 循环。 my_list?=?[] for?i?in?range(10): ????my_list.append(i*2) 在一个 for 循环中,假如规律比较简约,不如试用一下列表的列表推导式,虽然只要一行代码,但也规律清楚。 my_list?=?[i*2?for?i?in?range(10)] 03. 单行表达式 上面两个案例,都将多行代码用另一种方式写成了一行代码。 这并不意味着,代码行数越少,就越 Pythonic 。 比如下面这样写,就不推举。 print(hello);?print(world) if?x?==?1:?print(hello,world) if??and?: ????#?do?something 建议还是依据如下的写法来 print(hello) print(world) if?x?==?1: ????print(hello,world) cond1?=? cond2?=? if?cond1?and?cond2: ????#?do?something 04. 带索引遍历 使用 for 循环时,如何取得对应的索引,初学者习惯使用 range + len 函数 for?i?in?range(len(my_list)): ????print(i,?--,?my_list[i]) 更好的做法是利用 enumerate 这个内置函数 for?i,item?in?enumerate(my_list): ????print(i,?--,item) 05. 序列解包 使用 * 可以对一个列表解包 a,?*rest?=?[1,?2,?3] #?a?=?1,?rest?=?[2,?3] a,?*middle,?c?=?[1,?2,?3,?4] #?a?=?1,?middle?=?[2,?3],?c?=?4 06. 字符串拼接 假如一个列表(或者可迭代对象)中的全部元素都是字符串对象,想要将他们连接起来,通常做法是 letters?=?[s,?p,?a,?m] s= for?let?in?letters: ????s?+=?let 更推举的做法是使用 join 函数 letters?=?[s,?p,?a,?m] word?=?.join(letters) 07. 真假推断 推断一个变量能否为真(假),新手习惯直接使用 == 与 True、False、None 进行对比 if?attr?==?True: ????print(True!) if?attr?==?None: ????print(attr?is?None!) 实际上,、[]、{} 这些没有任何元素的容器都是假值,可直接使用 if not xx 来推断。 if?attr: ????print(attr?is?truthy!) if?not?attr: ????print(attr?is?falsey!) 08. 访问字典元素 当直接使用 [] 来访问字典里的元素时,若key不存在,是会抛特别的,所以新会可能会先推断一下能否有这个 key,有再取之。 d?=?{hello:?world} if?d.has_key(hello): ????print(d[hello])????#?prints?world else: ????print(default_value) 更推举的做法是使用 get 来取,假如没有该 key 会默认前往 None(当然你也可以设置默认前往值) d?=?{hello:?world} print(d.get(hello,?default_value))?#?prints?world print(d.get(thingy,?default_value))?#?prints?default_value 09. 操作列表 下面这段代码,会依据条件过滤过列表中的元素 a?=?[3,?4,?5] b?=?[] for?i?in?a: ????if?i??4: ????????b.append(i) 实际上可以使用列表推导或者高阶函数 filter 来实现 a?=?[3,?4,?5] b?=?[i?for?i?in?a?if?i??4] #?Or: b?=?filter(lambda?x:?x??4,?a) 除了 filter 之外,还有 map、reduce 这两个函数也很好用 a?=?[3,?4,?5] b?=?map(lambda?i:?i?+?3,?a) #?b:?[6

文档评论(0)

duanbingbing + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档