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

高洛峰
Freigeben: 2016-10-17 17:22:33
Original
1605 Leute haben es durchsucht

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
Nach dem Login kopieren

NP:

a = 3
b = 1
b >= 1 and b <= a and a < 10 #True
Nach dem Login kopieren

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!
Nach dem Login kopieren

NP:

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

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]
Nach dem Login kopieren

NP:

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

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
Nach dem Login kopieren

NP :

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

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以防空列表报错
Nach dem Login kopieren


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 dem Login kopieren

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]
Nach dem Login kopieren

NP:

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

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;}
Nach dem Login kopieren

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;}
Nach dem Login kopieren

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!
Nach dem Login kopieren

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!
Nach dem Login kopieren

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
Nach dem Login kopieren

NP :

if a > 2:
    b = 2
else:
    b = 1
#b = 2
Nach dem Login kopieren

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
Nach dem Login kopieren

NP:

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

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;}
Nach dem Login kopieren

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;}
Nach dem Login kopieren

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


Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage