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 = 'Tim' langs = ['AS3', 'Lua', 'C'] info = {'name': 'Tim', 'sex': 'Male', 'age':23 } if name and langs and info: print('All True!') #All True!
NP:
if name != '' and len(langs) > 0 and info != {}: print('All True!') #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 = '' 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 = ' '.join(strList) #Python is good
NP :
res = '' for s in strList: res += s + ' ' #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('inf') minNum = float('inf') 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 = {'name':'Tim', 'age':23} dic['workage'] = dic.get('workage',0) + 1 #dic = {'age': 23, 'workage': 1, 'name': 'Tim'}
NP:
if 'workage' in dic: dic['workage'] += 1 else: dic['workage'] = 1 #dic = {'age': 23, 'workage': 1, 'name': 'Tim'}
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 'find 5' break else: print 'can not find 5!' #can not find 5!
NP :
find = False for x in xrange(1,5): if x == 5: find = True print 'find 5' break if not find: print 'can not find 5!' #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 = ['Name', 'Sex', 'Age'] values = ['Tim', 'Male', 23] dic = dict(zip(keys, values)) #{'Age': 23, 'Name': 'Tim', 'Sex': 'Male'}
NP:
dic = {} for i,e in enumerate(keys): dic[e] = values[i] #{'Age': 23, 'Name': 'Tim', 'Sex': 'Male'}
Die Zip-Methode gibt ein Tupel zurück, mit dem einfach und klar Schlüssel-Wert-Paare erstellt werden.