優雅なpythonコード

23721 ワード

プログラマーとして、平凡から優雅に書かなければならない.
本明細書では、2つのブレークコードごとに1つのモジュールを理解します.
  • pythonにおける多変数付与について:
  • a = 0 
    b = 1
    c = 2
    

    優雅になる:元祖文法を使う
    a, b, c = 0, 1, 2
    
  • シーケンスのパケット解除:
  •  colors = ['red', 'black', 'yellew', 100]
     red = colors[0]
     black = colors[1]
     yellew = colors[2]
     num = colors[3]
     
    

    優雅になる:シーケンスの自動解包
     red, black, yellew, num = ['red', 'black', 'yellew', 100]
    
    
  • 仲介変数を減らし、少ないネスト
  • name = 'Hello, World!!'
    a = name.replace.(',','')
    b = a.replace.('!!','')
    print(b)
    
    name = 'Hello, World!!'
    b = name.replace.(',','').replace.('!!','')
    print(b)
    
  • 三目演算if...else...
  •  a = 100
     if a>=0:
     	b = a
     else:
     	b = -a
     print(b)
    

    優雅になる:
    a = 100
    b= a if a>=0 else -100
    
    
  • 区間判定
  • score = 100
    if score >= 50 and score < 60
    	print('  ')
    

    優雅にチェーン判断
    score = 100
    if 50 <= score < 60:
    	print('  ')
    
  • 複数の値のうちの1つであるか否かを判断する
  • .
    if num in == 1 or num == 'd' or num == '2':
    	print(num)
    

    キーワードinの使用
    if num in (1,'d','2'):
    	print(num)
    
    
  • 空リスト、空辞書、空文字列
  • であるか否かを判断する.
    i,y,z = [1,2,3], {
         }, ''
    if len(i)>0:
    	print('...')
    if len(y)>0:
    	print('...')
    if len(z)>0:
    	print('...')
    

    優雅になる:隠しタイプ変換直接判断
    i,y,z = [1,2,3], {
         }, ''
    if i:
    	pass
    if y:
    	pass
    if z:
    	pass
    
  • 多くの条件が少なくとも1つ成立しているかどうか
  • book, card, num = 10, 20, 30
    
    if book < 30 or card <30 or num < 30:
    	printy('...')
    

    優雅にany関数を使う
    book, card, num = 10, 20, 30
    if any([ book<30, card<30, num <30 ]):
    	pass
    
  • 多くの条件がすべて成立するかどうか
  • book, card, num = 10, 20, 25
    
    if book < 30 or card <30 or num < 30:
    	printy('...')
    

    優雅にany関数を使う
    book, card, num = 10, 20, 30
    if all([ book<30, card<30, num <30 ]):
    	pass
    
  • 導出式
  • ##    a         
    a = [1,2,3,'dadada',4,5]
    list = []
    for i in a:
    	if isinstance(i,(int,float)):
    		list.append(i)
    sum(list)
    

    エレガントに導く
    a = [1,2,3,'dadada',4,5]
    sum([i for i in a if type(i) in [int,float]])
    
  • シーケンスの要素と要素の両方を同時に巡回する
  •  colors = ['red', 'black', 'yellew', 100]
     for i in range(len(colors )):
     	print(i:':',colors[i] )
    

    優雅にenumerate関数を使用して下付きと要素ペアを生成
     colors = ['red', 'black', 'yellew', 100]
     for i,s in enumerate(colors):
     	print(i,':',s)
    
  • 循環進捗
  • を表示する.
    ここでは、1秒ごとに1行の結果を印刷します.
    import time
    for i in range(100):
    	times.sleep(0.1)
    	print(i)
    
    import time
    for i in range(100):
    	times.sleep(0.1)
    	print(i, end='\r')
    
    def process_bar(num, total):
    	rate = float(num)/total
    	ratenum = int(100*rate)
    	r = '\r[{} {}]{}%'.format('*'*ratenum, ' '*(100-ratenum), ratenum)
    	sys.stdout.write(r)
    	sys.stdout.flush()
    
    i,n = 0,100
    for i in range(n):
    	time.sleep(0.1)
    	process_bar(i+1,n)