Hier ist eine Zusammenfassung der weniger bekannten (und selbstsüchtigen) Python-Sprachspezifikationen.
Anfänger / Mittelstufe / Fortgeschrittene Klassifizierung ist angemessen.
Ich werde hinzufügen, wenn es andere gibt.
Komplexe Zahlenoperationen können standardmäßig ausgeführt werden. Indizes verwenden j anstelle von i.
>>> c1 = 1 + 1j
>>> c2 = 1 - 2j
>>> c1 + c2
(2-1j)
>>> c1 * c2
(3-1j)
>>> c1 / c2
(-0.2+0.6j)
Sie können mehrere for..in in die Einschlussnotation schreiben.
>>> a = range(3)
>>> b = range(4)
>>> [x + y for x in a for y in b]
[0, 1, 2, 3, 1, 2, 3, 4, 2, 3, 4, 5]
Sie können Elemente wie Listen alle n abrufen, indem Sie wie folgt schreiben.
>>> a = list(range(20))
>>> a[::2]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Sie können eine Kopie der Liste erstellen, ohne einen Index an die Slice-Syntax zu übergeben.
>>> a = range(10)
>>> b = a
>>> b
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b is a #b und a sind dasselbe Objekt
True
>>> c = a[:]
>>> c
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> c is a #b und a sind getrennte Objekte
False
Ellipsis
...
wird als Objekt behandelt, das "Abkürzung" darstellt.
Weitere Informationen finden Sie unter hier.
>>> ...
Ellipsis
>>> bool(...)
True
Durch Schreiben von "*" in die Funktionsdefinition können Sie sicherstellen, dass die folgenden Argumente als Schlüsselwortargumente aufgerufen werden müssen.
>>> def f(a, *, b):
... pass
...
>>> f(1)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: f() missing 1 required keyword-only argument: 'b'
>>> f(1,2)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: f() takes 1 positional argument but 2 were given
>>> f(1,b=2)
>>>
Sie können Funktionsargumente mit Anmerkungen versehen und Werte zurückgeben. Da es sich um eine Anmerkung zur Verwendung in Dokumenten usw. handelt, tritt kein Fehler auf, selbst wenn ein Objekt eines anderen Typs angegeben wird.
>>> def f(x : int, y : int) -> int:
... return x + y
...
>>> f(2, 3)
5
>>> f('hoge', 'fuga') #Führt nicht zu einem Fehler
'hogefuga'
global
Mit global
können Sie zur Laufzeit globale Variablen aus einem beliebigen Bereich definieren.
>>> def f():
... global a
... a = 1
...
>>> a #Hier ist a undefiniert
Traceback (most recent call last):
File "<input>", line 1, in <module>
NameError: name 'a' is not defined
>>> f() #Die globale Variable a wird durch Aufrufen von f definiert
>>> a
1
nonlocal
nonlocal
ermöglicht die Zuordnung zu Variablen, die zum äußeren Bereich gehören.
Sie können leicht einen Verschluss machen.
>>> def make_counter():
... count = 0
...
... def counter():
... nonlocal count
... count += 1
... return count
...
... return counter
...
>>> c = make_counter()
>>> c(), c(), c()
(1, 2, 3)
Sie können einen Dekorator mit Argumenten erstellen, indem Sie "eine Funktion schreiben, die eine Funktion empfängt und eine Funktion zurückgibt". Flask '@ route (' / ') `usw. scheint damit implementiert zu werden.
>>> def greet(before, after):
... def decorator(func):
... def wrapper(*args, **kwargs):
... print(before)
... func(*args, **kwargs)
... print(after)
... return wrapper
... return decorator
...
>>> @greet('Hi.', 'Bye.')
... def introduce(name):
... print('I am ' + name + '.')
...
>>> introduce('yubessy')
Hi.
I am yubessy.
Bye.
Sie können einen Dekorateur schreiben, der die Klasse einschließt. Das Folgende ist ein Beispiel für die Implementierung eines einfachen Singletons.
>>> def singleton(cls):
... instances = {}
... def getinstance(*args, **kwargs):
... if cls not in instances:
... instances[cls] = cls(*args, **kwargs)
... return instances[cls]
... return getinstance
...
>>> @singleton
... class C(object):
... pass
...
>>> c1 = C()
>>> c2 = C()
>>> c1 is c2
True
yield from
Sie können einen Generator erstellen, der Werte von anderen Iteratoren zurückgibt.
>>> def g():
... yield from range(5)
... yield from range(5, 10)
...
>>> [i for i in g()]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
raise from
Behalten Sie die Ausnahme des Absenders bei, wenn Sie Ausnahmen verketten.
>>> try:
... raise Exception('e1') from Exception('e2')
... except Exception as e:
... print(e.__cause__)
...
e2
Recommended Posts