J'ai touché certaines des nouvelles fonctionnalités de Python 3.8 ①

introduction

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)

Opérateur Seiuchi

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».

image.png 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)

Arguments de position uniquement

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.

Appel de fonction correct

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

Mauvais appel de fonction

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

Éliminer l'utilisation comme argument de mot-clé

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'

Vous pouvez également l'écrire comme ceci pour recevoir des arguments de mot-clé arbitraires.

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.

Possibilité de stocker les fichiers de cache dans un autre emplacement

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

"=" Spécificateur activé pour le littéral de chaîne formaté (chaîne f)

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)

dict et dictview peuvent maintenant être itérés dans l'ordre inverse en utilisant reverse ()

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

La méthode _asdict () de collections.namedtuple () renvoie maintenant un dict

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}

csv.DictReader renvoie désormais également dict

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.

Deux méthodes ajoutées au module datetime

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

Tout d'abord, l'isocalendar existant ()

2020-03-06 is 2020, 10e semaine vendredi (5) dimanche </ font> image.png

Depuis isocalendar ajouté en 3.8

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>

image.png

① se termine ici

Je suis fatigué, alors j'ai fini. ② sortira bientôt. (Autosuffisant)

Recommended Posts