Ich werde die Python-Grammatik vorstellen, die Sie krank machen kann, wenn Sie hauptsächlich die neuen Funktionen kennen.
Dies ist eine neue Syntax, die aus Python3.8 hinzugefügt wurde. Es ist gut, etwas Neues zu wissen.
Substitutionsausdrücke werden in der Syntax : =
geschrieben, und bedingte Ausdrücke und Zuweisungsanweisungen können gleichzeitig verwendet werden.
Zum Beispiel die folgenden allgemeinen bedingten Ausdrücke
text = 'Hello New Expression!!'
text_length = len(text)
if text_length > 10:
print(f"String is too long!!({text_length} length, expected <= 10)")
Es kann wie folgt mit : =
abgekürzt werden.
Sie können sehen, dass der Teil von if (text_length: = len (text))> 10:
sowohl die Rolle der Zuweisung als auch des bedingten Ausdrucks spielt.
text = 'Hello New Expression!!'
if (text_length := len(text)) > 10:
print(f"String is too long!!({text_length} length, expected <= 10)")
refs Substitutionsformel: https://www.python.org/dev/peps/pep-0572/
Ich denke, eine übliche Einschlussnotation besteht darin, eine Liste wie die folgende zu erstellen:
numbers = [1,2,3]
dubble_numbers = [x*2 for x in numbers]
print(dubble_numbers)
#[2, 4, 6]
Obwohl selten verwendet, gibt es auch inklusive Notationen für Wörterbücher, Mengen und Generatoren. Dies ist ein Doya-Gesichtspunkt.
Wenn Sie einen Schlüsselwert wie "x: x * 2" in "{}" schreiben, wird ein Wörterbuch generiert.
numbers = [1,2,3]
dubble_number_dict = {x:x*2 for x in numbers}
print(dubble_number_dict)
#{1: 2, 2: 4, 3: 6}
Wenn Sie nur einen Wert in "{}" wie "x" schreiben, wird eine Menge generiert.
numbers = [1,2,3,1,1]
dubble_number_set = {x for x in numbers}
print(dubble_number_set)
# set([1, 2, 3])
Wenn Sie in ()
wie Listeneinschlussnotation schreiben, wird anstelle von Tupel ein Generator generiert.
numbers = [1,2,3]
dubble_number_generator = (x for x in numbers)
print(dubble_number_generator)
# <generator object <genexpr> at 0x10d7779b0>
refs Datenstruktur: https://docs.python.org/3.9/tutorial/datastructures.html
Ab python3.5 ist es möglich, den Typ im Code wie eine statisch typisierte Sprache zu deklarieren (um genau zu sein, mit Anmerkungen zu versehen). Ich habe das Gefühl, dass ich die Vorzüge einer dynamisch typisierten Sprache aufgeben muss, aber wenn es um komplizierte Entwicklungen geht, denke ich, dass viele Menschen konservativ unruhig sind, wenn die Typen nicht explizit deklariert werden. Vorsichtsmaßnahmen bei der Verwendung
Der spezifische Quellcode lautet wie folgt.
Es ist einfacher zu warten, stellt jedoch eine Erweiterung von Kommentaren dar und wird zur Laufzeit nicht überprüft.
text: str = 123 # Assignment int
wird ebenfalls fehlerfrei übergeben.
def greeting(name: str) -> str:
return f'Hello {name}'
text: str = 'Python!!'
print(greeting(text))
# Hello Python!!
text: str = 123 # Assignment int
print(greeting(text)) # No error
# Hello 123
Überprüfungswerkzeuge werden standardmäßig nicht bereitgestellt, daher müssen Sie ein externes Werkzeug verwenden. Am bekanntesten ist wohl "mypy". http://www.mypy-lang.org/
Es gibt verschiedene andere Regeln, wie zum Beispiel das Deklarieren von benutzerdefinierten Klassen mit Typhinweisen, aber ich werde sie hier weglassen.
refs: Geben Sie einen Hinweis ein: https://docs.python.org/3.9/library/typing.html
Ein konkretes Anwendungsbeispiel lautet wie folgt.
from dataclasses import dataclass,asdict,astuple
@dataclass
class Person:
name: str
age: int = 0
def greeting(self) -> str:
return f"My name is {self.name}, {self.age} years old."
tanaka = Person('tanaka',18)
print(tanaka.greeting())
# My name is tanaka, 18 years old.
baby = Person('taro') # Use default value
print(baby.greeting())
# My name is taro, 0 years old.
print(asdict(baby)) # To dict object
# {'name': 'taro', 'age': 0}
print(astuple(baby)) # To tuple object
# ('taro', 0)
Es gibt auch Funktionen wie das Erstellen eines unveränderlichen Objekts und das Erweitern des Initialisierungsprozesses mit __post_init__
, die hier jedoch weggelassen werden.
refs: dataclass: https://docs.python.org/3/library/dataclasses.html
Es ist eine Zeichenkettenvorlage, die aus Python3.6 hinzugefügt wurde.
Es ist einfacher und ausgefeilter als die vorherigen Zeichenfolgenmethoden format ()
und % operator
.
Setzen Sie "f" "" am Anfang der Zeichenkette und verwenden Sie sie wie folgt.
a,b = 1000,2000
print(f'a is {a},b is {b}')
# a is 1000,b is 2000
print(f'sum of ab is {a+b}') # can be calculated
# sum of ab is 3000
print(f'a: {a:,}') # separated by comma
# a: 1,000
Wie oben erwähnt, sind der Punkt, an dem eine Berechnung in der Zeichenfolge möglich ist, und der Punkt, an dem eine flexible Formatierung möglich ist, die Punkte, die lächerlich sein können.
Seit Python3.8 wurde die Funktion für das Debuggen von Variablen erweitert.
a,b = 1000,2000
print(f'a={a},b={b}') # before 3.8
# a=1000,b=2000
print(f'{a=},{b=}') # after 3.8
# a=1000,b=2000
Durch Einfügen von =
nach der Variablen können Sie sehen, dass sowohl der Wert als auch der Name der Variablen ausgegeben werden.
refs: Format: https://docs.python.org/3/tutorial/inputoutput.html Debuggable: https://docs.python.org/3/whatsnew/3.8.html#f-strings-support-for-self-documenting-expressions-and-debugging
Wenn ich vor Ort arbeite, denke ich, dass es schwierig ist, Python2 und andere frühere Schulden zu verwenden. Daher bin ich von den neuen Funktionen begeistert und möchte sie mit einem Slapstick-Gesicht reparieren.