Spécification du langage Python peu connue (compatible avec Python 3.4 ou version ultérieure)

introduction

Voici un résumé des spécifications du langage Python moins connues (et égoïstes).

La classification débutant / intermédiaire / avancé est appropriée.

J'ajouterai s'il y en a d'autres.

Édition débutant

Complexe littéral

Les opérations de nombres complexes peuvent être effectuées en standard. Les indices utilisent j au lieu de i.

>>> c1 = 1 + 1j
>>> c2 = 1 - 2j
>>> c1 + c2
(2-1j)
>>> c1 * c2
(3-1j)
>>> c1 / c2
(-0.2+0.6j)

Notation d'inclusion incluant plusieurs pour..in

Vous pouvez écrire plusieurs for..in dans la notation d'inclusion.

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

Toutes les n tranches

Vous pouvez récupérer des éléments tels que des listes tous les n en écrivant comme suit.

>>> a = list(range(20))
>>> a[::2]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

Copier la liste en découpant

Vous pouvez faire une copie de la liste sans passer un index à la syntaxe de la tranche.

>>> a = range(10)
>>> b = a
>>> b
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b is a #b et a sont le même objet
True
>>> c = a[:]
>>> c
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> c is a #b et a sont des objets séparés
False

Intermédiaire

Ellipsis

... est traité comme un objet représentant une "abréviation". Pour plus d'informations, voir ici.

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

Arguments limités par mot-clé

En écrivant *, dans la définition de la fonction, vous pouvez vous assurer que les arguments suivants doivent être appelés comme arguments de mot-clé.

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

Annotation de fonction

Vous pouvez annoter des arguments de fonction et renvoyer des valeurs. Puisqu'il s'agit d'une annotation à utiliser dans des documents, etc., aucune erreur ne se produira même si un objet d'un type différent est donné.

>>> def f(x : int, y : int) -> int:
...     return x + y
...
>>> f(2, 3)
5
>>> f('hoge', 'fuga') #N'entraîne pas d'erreur
'hogefuga'

global

global vous permet de définir des variables globales au moment de l'exécution à partir de n'importe quelle portée.

>>> def f():
...     global a
...     a = 1
...
>>> a #Ici a est indéfini
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'a' is not defined
>>> f() #La variable globale a est définie en appelant f
>>> a
1

nonlocal

nonlocal permet l'affectation à des variables appartenant à la portée externe. Vous pouvez facilement faire une fermeture.

>>> def make_counter():
...     count = 0
...
...     def counter():
...         nonlocal count
...         count += 1
...         return count
...
...     return counter
...
>>> c = make_counter()
>>> c(), c(), c()
(1, 2, 3)

Édition avancée

Décorateur avec arguments

Vous pouvez créer un décorateur avec des arguments en écrivant "une fonction qui reçoit une fonction et renvoie une fonction". Le @ route ('/') etc. de Flask semble être implémenté en utilisant ceci.

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

Décorateur de classe

Vous pouvez écrire un décorateur qui enveloppe la classe. Voici un exemple d'implémentation d'un singleton simple.

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

Vous pouvez créer un générateur qui renvoie les valeurs d'autres itérateurs.

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

Conservez l'exception de l'expéditeur lors du chaînage des exceptions.

>>> try:
...     raise Exception('e1') from Exception('e2')
... except Exception as e:
...     print(e.__cause__)
...
e2

référence

Recommended Posts

Spécification du langage Python peu connue (compatible avec Python 3.4 ou version ultérieure)
100 coups de traitement du langage avec Python 2015
Python 3.4 ou version ultérieure standard pip
Ruby `` comme en Python.2.6 ou version ultérieure
Mettre à jour Raspberry Pi Python vers 3.7 ou version ultérieure avec pyenv
100 traitements de langage avec Python
100 traitements de langage avec Python (chapitre 3)
10 fonctions du "langage avec batterie" python
Lecture de spécification de taille multiligne avec python
Maîtriser le type avec Python [compatible Python 3.9]
Blender 2.82 ou version ultérieure + notes sur l'environnement de développement python
100 traitements de langage avec Python (chapitre 2, partie 2)
3. Traitement du langage naturel par Python 2-1. Réseau de co-occurrence
3. Traitement du langage naturel par Python 1-1. Word N-gram
J'ai essayé un langage fonctionnel avec Python
100 traitements de langage avec Python (chapitre 2, partie 1)
[Python] Rendons matplotlib compatible avec le japonais
Essayez d'attribuer ou de changer avec Python: lambda
Démarrer avec Python avec 100 coups sur le traitement du langage
3. Traitement du langage naturel par Python 2-2. Réseau de co-occurrence [mecab-ipadic-NEologd]
Python> 3.14_1592_6535_8972> PEP515 (Écriture possible depuis Python v3.6)
[Python] J'ai joué avec le traitement du langage naturel ~ transformers ~
Exécutez l'installation de pip sur MacOS Python 3.7 ou version ultérieure
Installez vim7.3 (+ python2.4) depuis la source (compatible avec Gundo.vim)
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Grattage avec Python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
Grattage facile avec Python (version compatible JavaScript / Proxy / Cookie)
[Pratique] Créez une application Watson avec Python! # 1 [Discrimination linguistique]
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
Créer un environnement pour le traitement du langage naturel avec Python
Joli imprimé json ou yaml avec couleur en python
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
Entrez en contact avec la programmation fonctionnelle en JavaScript ou Python 3
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage