首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

编写高效简洁代码的那些招式1

高效的代码,每期都会给大家介绍一下编码的技巧,让我们代码更整洁更高效。我们会从python 语言切入,讲一讲如何写的代码更pythonic 。Pythonic 风格,既不是非常严密的规范,也不是编译器强加给开发者的规则。而是大家在使用python 语言协同工作的工程中逐渐形成的习惯。Python 崇尚的就是直观,简洁而又易读的代码。

1

第1招:字符串的反转

A.提倡

def reverse_str( s ):

return s[::-1]

B.土方法

def reverse_str( s ):

t = ''

for x in xrange(len(s)-1,-1,-1):

t += s[x]

return t

小贴士

A方法采用了python 中特有的切片的方法,简单快捷,高效。而且很优雅。

扩展贴士

扩展切片语法如下:

s[begin : end : stride]

与简单切片语法相比,扩展切片只是增加了第3个参数,即步长参数(英文资料中通常称为"stride"或"step")。

扩展切片语法引入的"stride"参数是个需要特别注意的参数,因为它的正/负取值将会影响切片操作对源序列s的访问方向,而这正是本文开始那几个示例可能引起Python新手困惑的原因。

其实规则很简单,说穿不值一文钱:

1)当stride参数为正值(positive)时,表明切片操作从左至右(即正向)访问源序列s的元素,此时,若begin和end参数有缺省,则Python解释器默认将其设置为None。如s[0 : : 1]会被解释器当作s[0 : None : 1],此时,end实际取值要大于其有效索引范围的上限值,以保证切片操作能访问到源序列s从begin开始的所有元素(从左向右)。

2)当stride参数为负值(negative)时,表明切片操作从右至左(即逆向)访问源序列s的元素,此时,若begin和end参数有缺省,则Python解释器默认将其设置为None。如s[-1 : : -1]会被解释器当作s[-1 : None : -1],此时,end实际取值要小于其有效索引范围的下限值,已保证切片操作能访问到源序列s从begin开始的所有元素(逆向,从右向左)。

3)无论stride参数取正值还是负值,切片表达式的begin和end索引值需要保证在切片操作的访问方向上,从begin到end之间有元素,这样切片操作才能保证返回非空集。

2

第2招:Enumerate的使用

A.提倡

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

for i, e in enumerate(array,0):

print i, e

#0 1

#1 2

#2 3

#3 4

#4 5

B.土方法

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

for i in xrange(len(array)):

print i, array[i]

#0 1

#1 2

#2 3

#3 4

#4 5

#{'Age': 23, 'Name': 'Tim', 'Sex': 'Male'}

小贴士

使用enumerate可以一次性将索引和值取出,避免使用索引来取值,而且

enumerate的第二个参数可以调整索引下标的起始位置,默认为0。

扩展贴士

enumerate()是python的内置函数

enumerate在字典上是枚举、列举的意思

对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串)

enumerate将其组成一个索引序列,利用它可以同时获得索引和值

enumerate多用于在for循环中得到计数

例如对于一个seq,得到:

(, seq[0]), (1, seq[1]), (2, seq[2])

3

第3招:使用zip创建键值对

A.提倡

keys = ['Name', 'Sex', 'Age']

values = ['Tim', 'Male', 23]

dic = dict(zip(keys, values))

#{'Age': 23, 'Name': 'Tim', 'Sex': 'Male'}

B.土方法

keys = ['Name', 'Sex', 'Age']

values = ['Tim', 'Male', 23]

dic = {}

for i,e in enumerate(keys):

dic[e] = values[i]

#{'Age': 23, 'Name': 'Tim', 'Sex': 'Male'}

小贴士

zip方法返回的是一个元组,用它来创建键值对,简单明了。

扩展贴士

zip()函数是Python的内建函数,(与序列有关的内建函数有:sorted()

reversed()、enumerate()、zip()),其中sorted()和zip()返回一个序列

(列表)对象,reversed()、enumerate()返回一个迭代器(类似序列)

zip()参数可以接受任何类型的序列,同时也可以有两个以上的参数;当传入

参数的长度不同时,zip能自动以最短序列长度为准进行截取,获得元组

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171209G08QJE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券