Schwach Python-Ingenieure haben einige der neuen Funktionen in Python3.8 ausprobiert. Ich überspringe diejenigen, die ich nicht verstehe (ich überspringe das Build-Profil). Einzelheiten finden Sie im offiziellen Dokument (https://docs.python.org/ja/3/whatsnew/3.8.html).
Als Teil der größeren Syntax wurde eine neue Syntax: = hinzugefügt, um Variablen Werte zuzuweisen. Diese Syntax ähnelt den Augen und Zähnen eines Seuchi, daher der Spitzname "Seuchi-Operator".
Seiuchi-Operator süß </ font>
array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# python3.8 oder früher
# n = len(array) > 10
# if n:
# print(f"List is too long ({n} elements, expected <= 10)")
# python3.8
if n := len(array) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
Ausgabeergebnis
List is too long (True elements, expected <= 10)
Haben Sie das Gefühl, dass Sie Variablen mit Urteilsvermögen deklarieren können?
Da es auch in while-Anweisungen und inklusive Notation verwendet werden kann, finden Sie Einzelheiten im offiziellen Dokument (https://docs.python.org/ja/3/whatsnew/3.8.html).
Neue Syntax / hinzugefügt, um anzuzeigen, dass Funktionsargumente als Positionsargumente angegeben werden müssen und nicht als Schlüsselwortargumente angegeben werden können. Diese Syntax ist dieselbe wie wenn help () die von Larry Hastings Argument Clinic kommentierte C-Funktion anzeigt.
def profile(first_name, last_name, /, gender, age, *, zip_code, address):
print(f'\
Nachname:{first_name}\n\
Name:{last_name}\n\
Sex:{gender}\n\
Alter:{age}\n\
〒:{zip_code}\n\
Gehäuse:{address}')
profile('Suzuki', 'Ichiro', 'Mann', 99, zip_code='000-0000', address='Raum') # OK
profile('Suzuki', 'Ichiro', 'Mann', age=99, zip_code='000-0000', address='Raum') # OK
profile('Suzuki', 'Ichiro', gender='Mann', age=99, zip_code='000-0000', address='Raum') # OK
Die Argumente sind von links geordnet
Positionsargumente: Vorname
, Nachname
Es ist sowohl ein Positionsargument als auch ein Schlüsselwortargument: "Geschlecht", "Alter"
Schlüsselwortargumente: "Postleitzahl", "Adresse"
profile('Suzuki', 'Ichiro', gender='Mann', 99, zip_code='000-0000', address='Raum') # SyntaxError: positional argument follows keyword argument
profile('Suzuki', 'Ichiro', age=99, 'Mann', zip_code='000-0000', address='Raum') # SyntaxError: positional argument follows keyword argument
profile('Suzuki', 'Ichiro', 'Mann', 99, '000-0000', address='Raum') # TypeError: profile() takes 4 positional arguments but 5 positional arguments (and 1 keyword-only argument) were given
profile('Suzuki', 'Ichiro', 'Mann', 99, zip_code='000-0000', 'Raum') # SyntaxError: positional argument follows keyword argument
Da die Argumente vor /
Positionsargumente sind, ist es jetzt möglich, die folgenden Aufrufmethoden zu entfernen, die vor python3.8 möglich waren.
Es kann als Positionsargument erzwungen werden, sodass Sie den Argumentnamen ohne zu zögern ändern können !!! </ red>
# python3.Vor 8 konnte es sowohl als Positionsargument als auch als Schlüsselwortargument verwendet werden.
def profile(first_name, last_name):
print(f'{first_name} {last_name}')
profile2(first_name='Yoshida', last_name='Hanako') # Yoshida Hanako
...
..
.
# python3.8 Nur-Position-Argumente/verwenden
def profile(first_name, last_name, /):
print(f'{first_name} {last_name}')
profile2(first_name='Yoshida', last_name='Hanako') # TypeError: profile2() got some positional-only arguments passed as keyword arguments: 'first_name, last_name'
def profile(first_name, last_name, /, **kwargs):
print(f'{first_name} {last_name} {kwargs}')
profile('Yoshida', 'Hanako', first_name='Suzuki', last_name='Ichiro') # Yoshida Hanako {'first_name': 'Suzuki', 'last_name': 'Ichiro'}
Dies macht es viel einfacher, eine Funktion oder Methode zu definieren, die beliebige Schlüsselwortargumente akzeptiert.
Es wird offiziell gesagt, aber ich bin ein schwacher Ingenieur, deshalb verstehe ich den Geschmack nicht.
Der implizite Bytecode-Cache verwendet standardmäßig das Unterverzeichnis pycache in jedem Quellcodeverzeichnis, jedoch mit der neu hinzugefügten Umgebungsvariablen PYTHONPYCACHEPREFIX (oder der Befehlszeilenoption -X pycache_prefix), dem Quellcode und Es wird nun in einem separaten Verzeichnisbaum gespeichert.
Der Speicherort des Caches befindet sich in sys.pycache_prefix (wenn Sie pycache verwenden, lautet dies: const: None).
Ich konnte es nicht gut verifizieren, also habe ich es vorerst durchgesehen. .. ..
string = 'F-Saite'
# python3.8.Vor 0
print(f'{string}') #F-Saite
# python3.8.0
print(f'{string=}') # string='F-Saite'
Es scheint nützlich zum Debuggen zu sein (kleines durchschnittliches Gefühl)
Wenn Sie bis zu Python3.7 versuchen, "dict" mit "reverse" umzukehren, erhalten Sie "TypeError:" dict "-Objekt ist nicht umkehrbar".
# python3.8.Vor 0
dictionary = {'a': 1, 'b': 2, 'c': 3}
for d in reversed(dictionary):
print(d)
>> TypeError: 'dict' object is not reversible
Ab python3.8 ist das möglich!
# python3.8.Vor 0
dictionary = {'a': 1, 'b': 2, 'c': 3}
for d in reversed(dictionary):
print(d)
>> c
>> b
>> a
Wie man zuerst ein benanntes Tupel macht [hier](https://qiita.com/Seny/items/add4d03876f505442136#%E3%81%A9%E3%82%93%E3%81%AA%E3%81% A8% E3% 81% 8D% E3% 81% ABnamedtuple% E3% 82% 92% E4% BD% BF% E3% 81% 86% E3% 81% 8B) hat eine leicht verständliche Erklärung !!!
Vor python3.8 gab es "OrderedDict" zurück.
import collections
Human = collections.namedtuple('Human', ['first_name', 'last_name', 'age'])
human = Human('yamada', 'taro', 25)
print(human._asdict())
>> OrderedDict([('first_name', 'yamada'), ('last_name', 'taro'), ('age', 25)])
python3.8 gibt jetzt Dict zurück!
import collections
from collections import OrderedDict
Human = collections.namedtuple('Human', ['first_name', 'last_name', 'age'])
human = Human('yamada', 'taro', 25)
print(human._asdict())
# print(OrderedDict(human._asdict())) # 3.Selbst mit 8 wird empfohlen, die für Ordered Dict spezifischen Funktionen zu verwenden und zu verwenden.
>> {'first_name': 'yamada', 'last_name': 'taro', 'age': 25}
Mit dieser Änderung können Sie schneller und mit weniger Speicherbedarf bei gleichbleibender Reihenfolge ausgeführt werden.
Es scheint. Ich habs gemacht.
Es wurden die Methoden datetime.date.fromisocalendar () und datetime.datetime.fromisocalendar () hinzugefügt, um Datums- und Datums- / Uhrzeitobjekte nach Jahr, Wochennummer und Tag gemäß den ISO-Vorschriften zu erstellen. Dies gilt für jede Klasse. Es ist die Umkehrung der Isocalendar-Methode.
was zur Hölle? Ich habe versucht, es auszugeben.
from datetime import datetime
date = datetime.now() # 2020-03-06(Stunden, Minuten und Sekunden weggelassen)
print(date.isocalendar()) # (2020, 10, 5)
print(date.fromisocalendar(2020, 4, 1)) # 2020-01-20 00:00:00
print(datetime.fromisocalendar(2020, 4, 1)) # 2020-01-20 00:00:00
2020-03-06 ist
2020, 10. Woche Freitag (5) Sonntag </ font>
print(date.fromisocalendar(2020, 4, 1)) # 2020-01-20 00:00:00
Die Details der Argumente sind von links nach rechts: "Westlicher Kalender", "Woche", "Tag"
`` 4. Woche 2020, Montag (1) Sonntag </ font>
Ich bin müde, also bin ich fertig. ② wird bald veröffentlicht. (Selbständig)
Recommended Posts