TVP

# 分享python 提高效率的几个小技巧

1.1. 最常见

Toggle line numbers

1 shortStrs = [ str0, str1, ..., strN]

2 #N+1个字串所组成的数列

3 longStr = ”

4 for s in shortStrs: longStr += s

1.1.1. 找出速度瓶颈

1)首先在大家应先学会怎么去找出速度瓶颈: Python 自带有profile

Toggle line numbers

1 import profile

2 profile.run (’想要检查的函数名()’)

1.1.2. 字串相并

Toggle line numbers

1 longStr =”.join(shortStrs)

Toggle line numbers

1 shortStrs = [str(s) for s in shortStrs[i]]

2 longStr = ”.join(shortStrs)

1.1.3. 数列排序

list.sort ()

Python2.4以后, sort和sorted的使用可以参考这片 Wiki: HowToSort

1.1.4. 循环

Toggle line numbers

1 import string

2 newL = []

3 for s in l: newL.append( string.upper(s) )

Toggle line numbers

1 import string

2 newL = map (string.upper, l)

Guido的文章讲得很详细.

1.1.5. 局域变量 及 ‘.’

Toggle line numbers

1 import string

2 append = newL.append

3 for s in l: append (string.upper(s))

1.1.6. try的使用

Toggle line numbers

1 count = {}

2 for s in l:

3 if not count.has_key(s): count[s] = 0

4 else: count[s] += 1

Toggle line numbers

1 count ={}

2 for s in l:

3 try: count[s] += 1

4 except KeyError: count[s] = 0

1.1.7. import语句

1.1.8. 大量数据处理

Toggle line numbers

1 def f():

2 for d in hugeData: …

3 f()

Toggle line numbers

1 def f(d): …

2 for d in hugeData: f(d)

1.1.9. 减少周期性检查

—编/译完毕. 看来Python 是易学难精了, 象围棋?

2. 我们自个儿的体悟

Toggle line numbers

1 count = {}

2 for s in l:

3 count.setdefault(s, 0) += 1

Toggle line numbers

1 count = {}

2 for s in l:

3 count.setdefault(s, []).append(s)

totals = dict((key, group)

for key, group in groupby(sequence, lambda x: x.get(’Age’)))

1. 交换变量值时避免使用临时变量：(cookbook1.1)

temp = x

x = y

y = temp

u, v, w = w, v, u

u, v = v, u

2. 读字典时避免判断键值是否存在：(cookbook1.2)

d = { 'key': 'value' }

if 'key' in d: print d['key']

else: print 'not find'

print d.get('key', 'not find')

3. 寻找最小值和位置的代码优化：

s = [ 4,1,8,3 ]

mval, mpos = MAX, 0

for i in xrange(len(s)):

if s[i ]

4. 文件读取工作的最简单表达：

line = ''

fp = open('text.txt', 'r')

for line in fp: text += line

text = string.join([ line for line in open('text.txt')], '']

text = ''.join([ line for line in open('text.txt')])

5. 如何在Python实现三元式：

if n >= 0: print 'positive'

else: print 'negitive'

print (n >= 0) and 'positive' or 'negitive'

print (n >= 0 and ['positive'] or ['negitive])[0]

print ('negitive', 'positive')[n >= 0]

6. 避免字典成员是复杂对象的初始化：(cookbook1.5)

if not y in d: d[y] = { }

d[y][x] = 3

d.setdefault(y, { })[x] = 3

f = lambda ip: sum( [ int(k)*v for k, v in zip(ip.split('.'), [1

[('192',0x1000000),('168',0x10000),('10',0x100),('214',1)]

C++程序员不肖道：“你似乎太相信数据了，根本没有考虑道错误的输入”

Python程序员回答：“外面的try/except已帮我完成所有异常处理，不必担心越界崩溃而无法捕获”

Java程序员得意的看着自己百行代码：“我想知道你如何让你的同事来理解你的杰作？你有没有考虑过将类似gettoken之类的功能独立处理，让类似问题可以复用？我的代码说明了如何充分发挥Reflection和interface的优秀特性，在增加重用性的同时，提供清晰可读的代码”

Python无奈道：“这是‘纯粹的代码’，意思是不可修改，类似正则表达式，只要让人明白他的功能就行了，要修改就重写。再我能用三行代码完成以内绝不会有封装的想法，况且熟悉Python者也不觉得难读啊？”

C++程序员抛出杀手简：“如果让你一秒钟处理10w个ip转化的话怎么办？”

Python程序员觉得想睡觉：“你觉得我会蠢到还用Python做这样的事情么？”

g = lambda m: '\n'.join([ '%s=%s'%(k, repr(v)) for k, v in m.__dict__.iteritems() ])

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

2023-09-29

2023-09-29

2018-03-15

2023-09-29

2023-09-29

2023-09-29

2023-09-29

2023-09-29

2018-07-02

2023-09-29

2023-09-29

Get大咖技术交流圈