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

循环

一、使用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 更快;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值