Heim  >  Artikel  >  Backend-Entwicklung  >  Wie können Sie Ihren Python-Code pythonischer gestalten?

Wie können Sie Ihren Python-Code pythonischer gestalten?

高洛峰
高洛峰Original
2016-10-17 17:22:331606Durchsuche

Pythonic ist sehr pythonisch, wenn man es ins Chinesische übersetzt. In China gibt es viele Verwendungen der Substantivstruktur „sehr“, wie zum Beispiel: „sehr mädchenhaft“, „sehr Fußballnationalmannschaft“, „sehr CCTV“ usw. ·

Der Einfachheit halber verwenden wir im Folgenden P, um die pythonische Schreibmethode darzustellen, und NP, um die nicht-pythonische Schreibmethode darzustellen. Natürlich ist dieses P-NP nicht das P-. NP.

Warum Python verfolgen?

Im Vergleich zu NP ist die Schreibmethode von P prägnant, klar und elegant. Meistens ist die Ausführungseffizienz hoch und je weniger Code, desto weniger Fehler -anfällig ist es. Ich denke, dass gute Programmierer beim Schreiben von Code auf Korrektheit, Einfachheit und Lesbarkeit achten sollten. Dies ist genau der Geist von Python.

Für Programmierer (wie mich), die Erfahrung in anderen Programmiersprachen haben und mit Python noch nicht vertraut sind, wird das Erkennen der Python-Schreibmethode mehr Komfort und Effizienz beim Schreiben von Python-Code bringen. Die Hauptleser dieses Artikels wird auch diese Gruppe von Programmierern sein.

N Beispiele für P und NP werden unten als Referenz für die Leser aufgeführt.


Beispiel für P vs. NP

Kettenvergleich

P:

a = 3
b = 1
1 <= b <= a < 10  #True

NP:

a = 3
b = 1
b >= 1 and b <= a and a < 10 #True

P ist eine Syntax, die Grundschüler verstehen können, sie ist einfach und direkt und spart Code ~


Wahrheitstest

P:

name = &#39;Tim&#39;
langs = [&#39;AS3&#39;, &#39;Lua&#39;, &#39;C&#39;]
info = {&#39;name&#39;: &#39;Tim&#39;, &#39;sex&#39;: &#39;Male&#39;, &#39;age&#39;:23 }    
  
if name and langs and info:
    print(&#39;All True!&#39;)  #All True!

NP:

if name != &#39;&#39; and len(langs) > 0 and info != {}:
    print(&#39;All True!&#39;) #All True!

Kurz gesagt, die Art und Weise, wie P geschrieben wird, besteht darin, die Authentizität eines Objekts direkt zu beurteilen, ohne die Beurteilungsbedingungen zu schreiben. Dies kann nicht nur die Richtigkeit sicherstellen, sondern auch die Menge reduzieren Code.


Wahr- und Falsch-Wertetabelle (Sie können viel Code sparen, wenn Sie sich an Falsch erinnern!)

Wahr Falsch

Wahr Falsch

Jede nicht leere Zeichenfolge, leere Zeichenfolge''

Jede Zahl ungleich 0, Zahl 0

Jeder nicht leere Container, leerer Container[] () {} set()

Alle anderen Nicht-Falsch-Keine


String Reverse

P:

def reverse_str( s ):
    return s[::-1]

NP:

def reverse_str( s ):
    t = &#39;&#39;
    for x in xrange(len(s)-1,-1,-1):
        t += s[x]
    return t

P ist einfach zu schreiben und nach dem Testen effizienter.

Wenn es zur Erkennung von Palindromen verwendet wird, ist es ein Satz von input == input[::-1], wie elegant!


Verkettung von Stringlisten

P:

strList = ["Python", "is", "good"]  
  
res =  &#39; &#39;.join(strList) #Python is good

NP :

res = &#39;&#39;
for s in strList:
    res += s + &#39; &#39;
#Python is good
#最后还有个多余空格

string.join() wird häufig zum Verbinden von Zeichenfolgen in einer Liste verwendet. Im Vergleich zu NP ist die P-Methode sehr effizient und fehlerfrei . .


Listensumme, Maximum, Minimum, Produkt

P:

numList = [1,2,3,4,5]   
sum = sum(numList)  #sum = 15
maxNum = max(numList) #maxNum = 5
minNum = min(numList) #minNum = 1
from operator import mul
prod = reduce(mul, numList, 1) #prod = 120 默认值传1以防空列表报错


NP:

sum = 0
maxNum = -float(&#39;inf&#39;)
minNum = float(&#39;inf&#39;)
prod = 1
for num in numList:
    if num > maxNum:
        maxNum = num
    if num < minNum:
        minNum = num
    sum += num
    prod *= num
# sum = 15 maxNum = 5 minNum = 1 prod = 120

Nach einem einfachen Test wird die Liste summiert, wenn die Länge von numList 10000000 beträgt Auf meiner Maschine benötigt P 0,6 Sekunden und NP 1,3 Sekunden, was fast dem Doppelten des Unterschieds entspricht. Erfinden Sie also nicht Ihr eigenes Rad neu.


Listenverständnis

P:

l = [x*x for x in range(10) if x % 3 == 0]
#l = [0, 9, 36, 81]

NP:

l = []
for x in range(10):
    if x % 3 == 0:
        l.append(x*x)
#l = [0, 9, 36, 81]

Sehen Sie, wie einfach und intuitiv es wird, mit Ps Listenverständnis eine neue Liste zu erstellen!


Wörterbuch-Standardwert

P:

dic = {&#39;name&#39;:&#39;Tim&#39;, &#39;age&#39;:23}  
  
dic[&#39;workage&#39;] = dic.get(&#39;workage&#39;,0) + 1
#dic = {&#39;age&#39;: 23, &#39;workage&#39;: 1, &#39;name&#39;: &#39;Tim&#39;}

NP:

if &#39;workage&#39; in dic:
    dic[&#39;workage&#39;] += 1
else:
    dic[&#39;workage&#39;] = 1
#dic = {&#39;age&#39;: 23, &#39;workage&#39;: 1, &#39;name&#39;: &#39;Tim&#39;}

Die Methode get(key,default) von dict wird verwendet, um den Wert des Schlüssels im Wörterbuch abzurufen. Dem Schlüssel wird der Standardwert zugewiesen. Der Wert ist Standard.

Im Vergleich zu NP wird P weniger als if...else... geschrieben, was wirklich die erste Wahl für Leute ist, die if...else... hassen!


für…sonst… Aussage

P:

for x in xrange(1,5):
    if x == 5:
        print &#39;find 5&#39;
        break
else:
    print &#39;can not find 5!&#39;
#can not find 5!

NP :

find = False
for x in xrange(1,5):
    if x == 5:
        find = True
        print &#39;find 5&#39;
        break
if not find:
    print &#39;can not find 5!&#39;
#can not find 5!

Der else-Teil von for...else... wird verwendet, um Situationen zu behandeln, in denen es keine Unterbrechung durch die for-Schleife gibt. Damit müssen wir keine Statusvariablen festlegen, um zu prüfen, ob die for-Schleife ausbricht, was einfach und praktisch ist.


Ersatz des ternären Symbols

P:

a = 3  
  
b = 2 if a > 2 else 1
#b = 2

NP :

if a > 2:
    b = 2
else:
    b = 1
#b = 2

Wenn Sie C-Programmiererfahrung haben, suchen Sie nach Alternativen zu A : B ? Sie werden vielleicht feststellen, dass A und B oder C gut aussehen, aber b = a > 1 und False oder True gibt True zurück, obwohl die eigentliche Absicht darin bestehen sollte, False zurückzugeben.

Die Verwendung von b = False, wenn a > 1, sonst gibt True False korrekt zurück, es handelt sich also um einen authentischen ternären Symbolersatz.


Aufzählen

P:

array = [1, 2, 3, 4, 5]
  
for i, e in enumerate(array,0):
    print i, e
#0 1
#1 2
#2 3
#3 4
#4 5

NP:

for i in xrange(len(array)):
    print i, array[i]
#0 1
#1 2
#2 3
#3 4
#4 5

Mit enumerate können Sie den Index und den Wert gleichzeitig herausnehmen und vermeiden, dass der Index zum Abrufen des Werts verwendet wird. Der zweite Parameter von enumerate kann die Startposition des Indexindex anpassen. Der Standardwert ist 0.


Verwenden Sie zip, um Schlüssel-Wert-Paare zu erstellen

P:

keys = [&#39;Name&#39;, &#39;Sex&#39;, &#39;Age&#39;]
values = [&#39;Tim&#39;, &#39;Male&#39;, 23]
  
dic = dict(zip(keys, values))
#{&#39;Age&#39;: 23, &#39;Name&#39;: &#39;Tim&#39;, &#39;Sex&#39;: &#39;Male&#39;}

NP:

dic = {}
for i,e in enumerate(keys):
    dic[e] = values[i]
#{&#39;Age&#39;: 23, &#39;Name&#39;: &#39;Tim&#39;, &#39;Sex&#39;: &#39;Male&#39;}

Die Zip-Methode gibt ein Tupel zurück, mit dem einfach und klar Schlüssel-Wert-Paare erstellt werden.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn