一日一技:你一定經(jīng)常寫出來的冗余代碼
有一些同學(xué)是從其它語言遷移到Python的,所以寫Python代碼的時候,還帶有其它語言的一些語法特征。于是寫出來的Python代碼包含了大量沒什么用的無效代碼。我們今天來看看常見的無效代碼有哪些。
先定義再復(fù)制
列表和字典是重災(zāi)區(qū)。有一些人在Python里面創(chuàng)建一個元素已經(jīng)確定的列表,卻這樣寫代碼:
- a = list()
- a.append('x')
- a.append('y')
- a.append('z')
但實際上,你可以直接一行代碼寫為:
- a = ['x', 'y', 'z']
初始化一個元素已經(jīng)確定的字典,有人也喜歡這樣寫代碼:
- a = dict()
- a['name'] = 'kingname'
- a['age'] = 100
- a['address'] = 'xx'
但實際上,一行代碼就可以搞定了:
- a = {'name': 'kingname', 'age': 100, 'address': 'xx'}
還有些人字典的Key存入列表,是這樣寫代碼的:
- key_list = []
- for key in target_dict.keys():
- key_list.append(key)
但實際上,一行代碼就搞定了:
- key_list = list(target_dict)
條件判斷真、假、是否為空
有些人在寫條件判斷的時候,是這樣寫的:
- if a == False:
- print('xx')
- if a == []:
- print('xx')
- if a == '':
- print('xx')
- if a == None:
- print('xx')
- if a == 0:
- print('xx')
但實際上,這些判斷全部可以合并成一個:
- if not a:
- print('xx')
同理,對于判斷真、非空、非零的代碼:
- if a == True
- if len(a) > 0
- if a != 0
- if a != None
全部都可以合并成:
- if a:
- print('xxx')
稍稍有點技術(shù)含量的冗余
有些人在寫條件判斷的分支檢測的時候,是這樣寫的:
- for ele in target_list:
- if ele > 0:
- print('列表中至少有一個數(shù)字大于0')
- return True
- else:
- continue
這里的else: continue實際上沒有任何作用,完全可以刪除:
- for ele in target_list:
- if ele > 0:
- print('列表中至少有一個數(shù)字大于0')
- return True
列表推導(dǎo)式式我們經(jīng)常使用的一種語法糖。但Python里面,其實還有一個生成器推到式,它寫為(x for x in yyy),這里使用小括號。所以對于下面這幾行代碼:
- a = ['1', '2', '3']
- sum_result = sum([int(x) for x in a])
知道生成器推到式的同學(xué)可能會這樣寫:
- a = ['1', '2', '3']
- sum_result = sum((int(x) for x in a))
但實際上,如果一個生成器推到式作為另一個函數(shù)的唯一參數(shù),那么可以省略內(nèi)層括號:
- a = ['1', '2', '3']
- sum_result = sum(int(x) for x in a)
大家也可以在評論區(qū)說說你知道的其它冗余寫法。
本文轉(zhuǎn)載自微信公眾號「未聞Code」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系未聞Code公眾號。