Wenig bekannte Python-Sprachspezifikation (kompatibel mit Python 3.4 oder höher)

Einführung

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.

Anfängerausgabe

Komplexes Literal

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)

Einschlussnotation einschließlich mehrerer für..in

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]

Alle n Scheiben

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]

Kopieren der Liste durch Schneiden

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

Mittlere

Ellipsis

... wird als Objekt behandelt, das "Abkürzung" darstellt. Weitere Informationen finden Sie unter hier.

>>> ...
Ellipsis
>>> bool(...)
True

Schlüsselwortbegrenzte Argumente

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)
>>>

Funktionsanmerkung

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)

Erweiterte Ausgabe

Dekorateur mit Argumenten

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.

Klassendekorateur

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

Referenz

Recommended Posts

Wenig bekannte Python-Sprachspezifikation (kompatibel mit Python 3.4 oder höher)
100 Sprachverarbeitungsklopfen mit Python 2015
Python 3.4 oder höher Standard Pip
Rubys `` wie in Python. 2.6 oder höher
Aktualisieren Sie Raspberry Pi Python mit pyenv auf 3.7 oder höher
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
10 Funktionen von "Sprache mit Batterie" Python
Lesen von mehrzeiligen Größenangaben mit Python
Beherrsche den Typ mit Python [Python 3.9 kompatibel]
Blender 2.82 oder höher + Hinweise zur Python-Entwicklungsumgebung
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
3. Verarbeitung natürlicher Sprache durch Python 2-1. Netzwerk für das gleichzeitige Auftreten
3. Verarbeitung natürlicher Sprache durch Python 1-1. Word N-Gramm
Ich habe eine funktionale Sprache mit Python ausprobiert
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
[Python] Lassen Sie uns matplotlib mit Japanisch kompatibel machen
Versuchen Sie, Python: Lambda zuzuweisen oder zu wechseln
Erste Schritte mit Python mit 100 Klopfen bei der Sprachverarbeitung
3. Verarbeitung natürlicher Sprache durch Python 2-2. Koexistenznetzwerk [mecab-ipadic-NEologd]
Python> 3.14_1592_6535_8972> PEP515 (Mögliches Schreiben seit Python v3.6)
[Python] Ich habe mit der Verarbeitung natürlicher Sprache ~ Transformatoren ~ gespielt
Führen Sie die Pip-Installation unter MacOS Python 3.7 oder höher aus
Installieren Sie vim7.3 (+ python2.4) von der Quelle (kompatibel mit Gundo.vim)
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Scraping mit Python
Python mit Go
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Zundokokiyoshi mit Python
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
Einfaches Scraping mit Python (JavaScript / Proxy / Cookie-kompatible Version)
[Übung] Erstellen Sie eine Watson-App mit Python! # 1 [Sprachdiskriminierung]
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Erstellen einer Umgebung für die Verarbeitung natürlicher Sprache mit Python
Hübscher Druck json oder yaml mit Farbe in Python
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Nehmen Sie Kontakt mit der funktionalen Programmierung in JavaScript oder Python 3 auf
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung