2010年12月2日

Python programming tips

一些實用的小技巧,可減少多餘的動作

  1. Swap
  2. //C++和Java的寫法:
    temp = x
    x = y
    y = temp

    #Python建議使用
    x, y= y, x

  3. 讀dict時避免判斷key的存在
  4. d = { 'key': 'value' }
    #一般寫法
    if 'key' in d: print d['key']
    else: print 'not find'

    #建議寫法
    print d.get('key', 'not find')

  5. 尋找最小值和對應位置
  6. s = [ 4,1,8,3 ]
    #一般寫法
    mval, mpos = MAX, 0
    for i in xrange(len(s)):
    if s[i] < mval: mval, mpos = s[i], i

    #建議寫法
    mval, mpos = min([ (s[i], i) for i in xrange(len(s)) ])

  7. 讀取檔案
  8. #一般寫法
    line = ''
    fp = open('text.txt', 'r')
    for line in fp: text += line

    #建議寫法1
    text = string.join([ line for line in open('text.txt')], '']

    #建議寫法2
    text = ''.join([ line for line in open('text.txt')])

    #建議寫法3
    text = file('text.txt').read()

  9. Python使用三元式
  10. #一般寫法,C++會使用?:來處理
    if n >= 0: print 'positive'
    else: print 'negitive'

    #建議寫法1, 但後面式子為None會有問題
    print (n >= 0) and 'positive' or 'negitive'

    #建議寫法2, 解決了None的問題
    print (n >= 0 and ['positive'] or ['negitive])[0]

    #建議寫法3
    print ('negitive', 'positive')[n >= 0]

  11. Dict成員是複雜類別時的初使用
  12. #一般寫法
    if not y in d: d[y] = { }
    d[y][x] = 3

    #建議寫法
    d.setdefault(y, { })[x] = 3

    #如果為list時
    d.setdefault(key, []).append(val)