您的位置:首页 > 编程语言 > Python开发

关于python的一些小建议(整理)

2018-01-09 14:07 351 查看

循环

一、使用while 1 代替 while true

二、在循环时,使用xrange而非range,使用 xrange 可以节省大量的系统内存,因为 xrange() 在序列中每次调用只产生一个整数元素。而 range() 將直接返回完整的元素列表,用于循环时会有不必要的开销。

三、使用Map、Reduce、fileter 代替for循环

1、Map:

>>>def add(x):

>>> return x+100

>>> demo = [11,22,33]

>>>map(add,demo)

[111,122,133]

>>>def abc(a,b,c):

>>> return a*10000+b*100+c

>>>

>>>list1 = [11,22,33]

>>>list2 = [44,55,66]

>>>list3 = [77,88,99]

>>>map(abc,list1,list2.list3)

[114477,225588,336699]

2、reduce:

reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。reduce()还可以接收第3个可选参数,作为计算的初始值。

>>>def f(x,y):

>>> return x+y

>>>reduce(f,[1,3,5,7,9])

>>>25

3、fileter

filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

>>>def is_odd(x):

>>> return x % 2 == 1

>>>fileter(is_odd, [1,4,6,7,9,12,17])

>>>[1,7,9,17]

Lazy if-evaluation 特性:

python 中的条件表达式是具有惰性求值的特性的,或者说短路逻辑,也就是说,如果存在条件表达式:if x and y,在 x 为 false 的情况下 y 表达式的值将不再计算。关于短路逻辑:只有在需要求值时才进行求值。举例来说,表达式x and y需要两个变量都为真时才为真,所以如果x为假,表达式就会立刻返回false,而不管y的值(事实上各个语言都有这个特性)。实际上,如果x为假,表达式会返回x得值----否则它就返回y的值。

于是,对于and,应该把满足条件少的放在前面,对于or,把满足条件多的放在前面。

字符串拼接:

尽量使用join(),而非+:

1、列表

>>> seq1 = ['hello','good','boy','doiido']

>>> print ' '.join(seq1)

hello good boy doiido

2、字符串

>>> seq2 = "hello good boy doiido"

>>> print ':'.join(seq2)

h:e:l:l:o: :g:o:o:d: :b:o:y: :d:o:i:i:d:o

3、字典

>>> seq3 = {'hello':1,'good':2,'boy':3,'doiido':4}

>>> print ':'.join(seq3)

boy:good:doiido:hello

避免不必要的数据拷贝:

关于python中的copy与deepcopy:
使用copy的话,列表会随着原表改变:

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

>>>b = copy.copy(a)

>>>c = copy.deepcopy(a)

>>>a.append(5)

>>>a[4].append(5)

>>>print a

>>>print b

>>>print c

输出:

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

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

[1, 2, 3, 4, [1, 2, 3, 4]]

函数模块化

使用函数,将功能脚本封装成一个函数,同时尽量避免属性的访问,即 '.' 的使用:

1、我们可以通过from module import name 的方式调用函数

2、将对象名方法保存下来(局部变量比全局变量快):

def list_append():

a = []

for i in xrange(1,100):

a.append(i)

return a

可以修改为:

def list_append():

a = []

a_ap = a.append

for i in xrange(1,100):

a_ap(i)

return a

使用Json进行反序列化:json.dumps()

关于两个变量的交换使用:a,b=b,a 而非使用中间变量:t=a;a=b;b=t

使用if is:if done is not None 比语句 if done != None 更快;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python