Maîtrisez les compétences en programmation Python 19 qui valent la peine d'être apprises

coldplay.xixi
Libérer: 2020-08-17 16:26:24
avant
2975 Les gens l'ont consulté

Maîtrisez les compétences en programmation Python 19 qui valent la peine d'être apprises

L'un des plus grands avantages de Python est sa syntaxe concise. Un bon code est comme un pseudo-code, propre, ordonné et clair en un coup d'œil. Pour écrire du code pythonique (élégant, authentique, propre), vous devez lire et apprendre davantage de code écrit par des experts. Il existe de nombreux excellents codes sources sur github qui valent la peine d'être lus, tels que : request, flask, tornado, répertoriés ci-dessous. Quelques écritures pythoniques courantes. méthodes.

Recommandations d'apprentissage associées : Tutoriel vidéo Python

0. ordinateur.

« Les programmes doivent être écrits pour que les gens puissent les lire, et seulement accessoirement pour que les machines puissent les exécuter. »

1. Mission d'échange

##不推荐
temp = a
a = b
b = a 

##推荐
a, b = b, a # 先生成一个元组(tuple)对象,然后unpack
Copier après la connexion
<🎜. >

2. Déballage

##不推荐
l = [&#39;David&#39;, &#39;Pythonista&#39;, &#39;+1-514-555-1234&#39;]
first_name = l[0]
last_name = l[1]
phone_number = l[2] 

##推荐
l = [&#39;David&#39;, &#39;Pythonista&#39;, &#39;+1-514-555-1234&#39;]
first_name, last_name, phone_number = l
# Python 3 Only
first, *middle, last = another_list
Copier après la connexion

3. Utiliser l'opérateur dans

##不推荐
if fruit == "apple" or fruit == "orange" or fruit == "berry":
# 多次判断 

##推荐
if fruit in ["apple", "orange", "berry"]:
# 使用 in 更加简洁
Copier après la connexion

4. 🎜>5. Liste des valeurs clés du dictionnaire

##不推荐
colors = [&#39;red&#39;, &#39;blue&#39;, &#39;green&#39;, &#39;yellow&#39;]

result = &#39;&#39;
for s in colors:
result += s # 每次赋值都丢弃以前的字符串对象, 生成一个新对象 

##推荐
colors = [&#39;red&#39;, &#39;blue&#39;, &#39;green&#39;, &#39;yellow&#39;]
result = &#39;&#39;.join(colors) # 没有额外的内存分配
Copier après la connexion

6. Jugement des valeurs clés du dictionnaire

##不推荐
for key in my_dict.keys():
# my_dict[key] ... 

##推荐
for key in my_dict:
# my_dict[key] ...

# 只有当循环中需要更改key值的情况下,我们需要使用 my_dict.keys()
# 生成静态的键值列表。
Copier après la connexion

7.

##不推荐
if my_dict.has_key(key):
# ...do something with d[key] 

##推荐
if key in my_dict:
# ...do something with d[key]
Copier après la connexion

8. Déterminer l'authenticité

##不推荐
navs = {}
for (portfolio, equity, position) in data:
if portfolio not in navs:
navs[portfolio] = 0
navs[portfolio] += position * prices[equity]
##推荐
navs = {}
for (portfolio, equity, position) in data:
# 使用 get 方法
navs[portfolio] = navs.get(portfolio, 0) + position * prices[equity]
# 或者使用 setdefault 方法
navs.setdefault(portfolio, 0)
navs[portfolio] += position * prices[equity]
Copier après la connexion

Parcourir la liste et l'index

##不推荐
if x == True:
# ....
if len(items) != 0:
# ...
if items != []:
# ... 

##推荐
if x:
# ....
if items:
# ...
Copier après la connexion

10. Compréhension de liste

##不推荐
items = &#39;zero one two three&#39;.split()
# method 1
i = 0
for item in items:
print i, item
i += 1
# method 2
for i in range(len(items)):
print i, items[i]

##推荐
items = &#39;zero one two three&#39;.split()
for i, item in enumerate(items):
print i, item
Copier après la connexion

11. Compréhension de liste imbriquée

##不推荐
new_list = []
for item in a_list:
if condition(item):
new_list.append(fn(item)) 

##推荐
new_list = [fn(item) for item in a_list if condition(item)]
Copier après la connexion

Boucles imbriquées

##不推荐
for sub_list in nested_list:
if list_condition(sub_list):
for item in sub_list:
if item_condition(item):
# do something... 
##推荐
gen = (item for sl in nested_list if list_condition(sl) \
for item in sl if item_condition(item))
for item in gen:
# do something...
Copier après la connexion

13. Essayez d'utiliser des générateurs au lieu de listes

##不推荐
for x in x_list:
for y in y_list:
for z in z_list:
# do something for x &amp;amp; y 

##推荐
from itertools import product
for x, y, z in product(x_list, y_list, z_list):
# do something for x, y, z
Copier après la connexion

14 Essayez d'utiliser imap/ifilter au lieu de map/filter pour des résultats intermédiaires

##不推荐
def my_range(n):
i = 0
result = []
while i &amp;lt; n:
result.append(fn(i))
i += 1
return result # 返回列表

##推荐
def my_range(n):
i = 0
result = []
while i &amp;lt; n:
yield fn(i) # 使用生成器代替列表
i += 1
*尽量用生成器代替列表,除非必须用到列表特有的函数。
Copier après la connexion
<🎜. >

15. Utilisez n'importe quelle fonction/toutes les fonctions

##不推荐
reduce(rf, filter(ff, map(mf, a_list)))

##推荐
from itertools import ifilter, imap
reduce(rf, ifilter(ff, imap(mf, a_list)))
*lazy evaluation 会带来更高的内存使用效率,特别是当处理大数据操作的时候。
Copier après la connexion

16. Propriété (propriété)

##不推荐
found = False
for item in a_list:
if condition(item):
found = True
break
if found:
# do something if found... 

##推荐
if any(condition(item) for item in a_list):
# do something if found...
Copier après la connexion

17. ouverture

##不推荐
class Clock(object):
def __init__(self):
self.__hour = 1
def setHour(self, hour):
if 25 &amp;gt; hour &amp;gt; 0: self.__hour = hour
else: raise BadHourException
def getHour(self):
return self.__hour

##推荐
class Clock(object):
def __init__(self):
self.__hour = 1
def __setHour(self, hour):
if 25 &amp;gt; hour &amp;gt; 0: self.__hour = hour
else: raise BadHourException
def __getHour(self):
return self.__hour
hour = property(__getHour, __setHour)
Copier après la connexion

18. Utilisez with pour ignorer les exceptions (Python 3 uniquement)

##不推荐
f = open("some_file.txt")
try:
data = f.read()
# 其他文件操作..
finally:
f.close()

##推荐
with open("some_file.txt") as f:
data = f.read()
# 其他文件操作...
Copier après la connexion

19. 🎜 >

##不推荐
try:
os.remove("somefile.txt")
except OSError:
pass

##推荐
from contextlib import ignored # Python 3 only

with ignored(OSError):
os.remove("somefile.txt")
Copier après la connexion
Recommandations associées : Cours vidéo de programmation

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal