Faiblement, les ingénieurs de Python ont essayé certaines des nouvelles fonctionnalités de python3.8. Je saute ceux que je ne comprends pas (je saute le profil de construction). Pour plus de détails, reportez-vous au document officiel (https://docs.python.org/ja/3/whatsnew/3.8.html)
Dans le cadre de la syntaxe plus large, une nouvelle syntaxe: = a été ajoutée pour attribuer des valeurs aux variables. Cette syntaxe ressemble aux yeux et aux crocs d'un seiuchi, d'où le surnom d '«opérateur seiuchi».
Opérateur Seiuchi mignon </ font>
array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# python3.8 ou plus tôt
# 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)")
Résultat de sortie
List is too long (True elements, expected <= 10)
Sentir que vous pouvez déclarer des variables avec jugement ??
Puisqu'il peut également être utilisé dans les instructions while et la notation inclusive, consultez le document officiel pour plus de détails (https://docs.python.org/ja/3/whatsnew/3.8.html)
Ajout d'une nouvelle syntaxe / pour indiquer que les arguments de fonction doivent être spécifiés comme arguments de position et ne peuvent pas être spécifiés comme arguments de mot-clé. Cette syntaxe est la même que lorsque help () affiche la fonction C annotée par Argument Clinic de Larry Hasting.
def profile(first_name, last_name, /, gender, age, *, zip_code, address):
print(f'\
Nom de famille:{first_name}\n\
Nom:{last_name}\n\
sexe:{gender}\n\
âge:{age}\n\
〒:{zip_code}\n\
Logement:{address}')
profile('Suzuki', 'Ichiro', 'Homme', 99, zip_code='000-0000', address='espace') # OK
profile('Suzuki', 'Ichiro', 'Homme', age=99, zip_code='000-0000', address='espace') # OK
profile('Suzuki', 'Ichiro', gender='Homme', age=99, zip_code='000-0000', address='espace') # OK
Les arguments sont dans l'ordre à partir de la gauche
Arguments de position: first_name
, last_name
C'est à la fois un argument positionnel et un argument mot-clé: gender
, ʻage Arguments de mot-clé:
zip_code, ʻaddress
profile('Suzuki', 'Ichiro', gender='Homme', 99, zip_code='000-0000', address='espace') # SyntaxError: positional argument follows keyword argument
profile('Suzuki', 'Ichiro', age=99, 'Homme', zip_code='000-0000', address='espace') # SyntaxError: positional argument follows keyword argument
profile('Suzuki', 'Ichiro', 'Homme', 99, '000-0000', address='espace') # TypeError: profile() takes 4 positional arguments but 5 positional arguments (and 1 keyword-only argument) were given
profile('Suzuki', 'Ichiro', 'Homme', 99, zip_code='000-0000', 'espace') # SyntaxError: positional argument follows keyword argument
Puisque les arguments avant /
sont des arguments positionnels, il est maintenant possible d'éliminer les méthodes d'appel suivantes qui étaient possibles avant python3.8.
Il peut être forcé comme argument de position, donc vous pouvez changer le nom de l'argument sans hésitation !!! </ red>
# python3.Avant 8, il pouvait être utilisé à la fois comme argument de position et comme argument de mot-clé.
def profile(first_name, last_name):
print(f'{first_name} {last_name}')
profile2(first_name='Yoshida', last_name='Hanako') # Yoshida Hanako
...
..
.
# python3.8 arguments de position uniquement/utilisation
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'}
Cela rend beaucoup plus simple la définition d'une fonction ou d'une méthode qui accepte des arguments de mot-clé arbitraires.
C'est officiellement dit, mais je suis un ingénieur faible donc je ne comprends pas le goût.
Le cache de bytecode implicite utilise le sous-répertoire pycache dans chaque répertoire de code source par défaut, mais avec la variable d'environnement nouvellement ajoutée PYTHONPYCACHEPREFIX (ou l'option de ligne de commande -X pycache_prefix), le code source et Il sera maintenant stocké dans une arborescence de répertoires distincte.
L'emplacement du cache peut être trouvé dans sys.pycache_prefix (si vous utilisez pycache ce serait: const: None).
Je ne pouvais pas bien le vérifier, alors je l'ai parcouru pour le moment. .. ..
string = 'Chaîne F'
# python3.8.Avant 0
print(f'{string}') #Chaîne F
# python3.8.0
print(f'{string=}') # string='Chaîne F'
Cela semble utile pour le débogage (petite sensation moyenne)
Jusqu'à python3.7, si vous essayez d'inverser dict
avec inversé
, vous obtiendrez TypeError: l'objet 'dict' n'est pas réversible
.
# python3.8.Avant 0
dictionary = {'a': 1, 'b': 2, 'c': 3}
for d in reversed(dictionary):
print(d)
>> TypeError: 'dict' object is not reversible
À partir de python3.8, c'est possible!
# python3.8.Avant 0
dictionary = {'a': 1, 'b': 2, 'c': 3}
for d in reversed(dictionary):
print(d)
>> c
>> b
>> a
Comment faire un tuple nommé en premier lieu [ici](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) a une explication facile à comprendre !!!
Avant python3.8, il retournait ʻOrderedDict`.
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 renvoie maintenant Dict!
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.Même avec 8, si vous souhaitez utiliser les fonctions spécifiques à Ordered Dict, il est recommandé de le lancer et de l'utiliser.
>> {'first_name': 'yamada', 'last_name': 'taro', 'age': 25}
Ce changement vous permet d'exécuter plus rapidement et avec moins d'utilisation de la mémoire tout en maintenant l'ordre.
Il semble. Je l'ai fait.
Ajout des méthodes datetime.date.fromisocalendar () et datetime.datetime.fromisocalendar () pour créer des objets date et datetime par année, numéro de semaine et jour conformément aux réglementations ISO; ceci est pour chaque classe. C'est l'inverse de la méthode isocalendar.
que se passe-t-il? J'ai essayé de le sortir.
from datetime import datetime
date = datetime.now() # 2020-03-06(Heures, minutes et secondes omises)
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 is
2020, 10e semaine vendredi (5) dimanche </ font>
print(date.fromisocalendar(2020, 4, 1)) # 2020-01-20 00:00:00
Les détails des arguments sont de gauche à droite: Calendrier occidental
, semaine
, jour
`` 4ème semaine de 2020, lundi (1) dimanche </ font>
Je suis fatigué, alors j'ai fini. ② sortira bientôt. (Autosuffisant)
Recommended Posts