6 façons d'enchaîner des objets en Python

Connexes: % et str.format () en Python. Lequel utilisez-vous?

Il y avait une mention de f-strings ci-dessus, mais je pense que ce n'est pas le seul moyen de le convertir en chaînes. Voici quelques éléments qui me viennent à l'esprit sous forme de mémos.

str () et repr ()

>>> import datetime
>>> d = datetime.datetime(2017, 9, 1, 12, 12, 0, 0)
>>> str(d)
'2017-09-01 12:12:00'
>>> repr(d)
'datetime.datetime(2017, 9, 1, 12, 12)'
>>> eval(repr(d))
datetime.datetime(2017, 9, 1, 12, 12)

repr (obj) appelle en interne ʻobj .__ repr__ () , et str (obj) implémente en interne ʻobj .__ str__ (), sinon ʻobj. repr () ʻest appelé et utilisé à la place.

Le résultat de repr (obj) devrait être une expression Python si possible, mais ce n'est pas toujours le cas. L'exemple datetime ci-dessus renvoie une chaîne qui peut être évaluée avec ʻeval () `.

Il n'est pas nécessaire que le résultat de str (obj) soit une expression Python, et il est courant de donner la priorité à un format lisible par l'homme.

Quand vous dites "convertir un objet en une chaîne facile à lire", vous pouvez penser, par exemple, au module pprint. Il semble qu'il utilise ʻobj .__ repr__ () . Eh bien, il est impossible de saisir la structure à partir du résultat de __str __ ()`.

% Opérateur et méthode de chaîne str.format ()

C'était le sujet de l'article ci-dessus. Je pense que c'est le plus important dans le développement quotidien, mais il est omis.

f-strings

Une notation introduite dans Python 3.6 qui vous permet d'écrire des expressions Python directement dans une chaîne.

PEP 498 -- Literal String Interpolation

Un exemple de FizzBuzz.

>>> print(*[f"{'Fizz'*(not i%3)}{'Buzz'*(not i%5)}" or i for i in range(1,31)], sep='\n')
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz

Je me réfère au "[un oneliner Py3.6 fizzBuzz avec f-strings] de Reddit (https://www.reddit.com/r/Python/comments/5k7lnb/a_py36_fizzbuzz_oneliner_with_fstrings/)", mais map () Je l'ai changé pour la notation d'inclusion de liste car il semble être plus confortable récemment (reduction () a peut-être laissé tomber la bibliothèque).

Par mesure de sécurité, le «*» au début de l'argument «print ()» indique le déballage de la liste.

En termes de vérification de type, au moins mypy 0.521 regarde à l'intérieur des f-strings.

$ mypy --version
mypy 0.521
$ cat /tmp/test.py
def func(a: int) -> int:
    return a ** 2

print(f'{func(10.0)}')
$ python /tmp/test.py
100.0
$ mypy /tmp/test.py
/tmp/test.py:4: error: Argument 1 to "func" has incompatible type "float"; expected "int"

Malheureusement, j'utilise souvent la version 3.5 ou antérieure, je n'ai donc pas pris l'initiative de l'unifier. Cependant, dans le futur, je pense qu'il y a une possibilité que les f-strings deviennent le centre, en surmontant str.format ().

Chaîne de modèle

[https://docs.python.jp/3/library/string.html#template-strings](chaîne de modèle)

Il existe une fonctionnalité Python intégrée pour les chaînes de modèle qui remplace la $ variable en tant qu'ancienne fonctionnalité. Je présenterai brièvement l'exemple ci-dessus.

>>> from string import Template
>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes kung pao'

Malheureusement, l'échappement HTML, etc. n'est pas pris en charge. Je le vois rarement personnellement, mais j'ai envisagé de l'utiliser.

Autre

Le titre en dit six, mais il existe encore des fonctionnalités Python standard.

Il devrait y avoir d'autres façons de le convertir en chaîne à l'aide d'une bibliothèque externe telle que jinja2. Bien sûr, si vous le faites vous-même, vous aurez plus de choix.

Recommended Posts

6 façons d'enchaîner des objets en Python
Manipulation de chaîne en python
3 façons d'analyser les chaînes de temps avec python [Note]
Comment incorporer des variables dans des chaînes python
[python] Convertir la date en chaîne
Pour vider stdout en Python
Méthodes d'objet chaîne en Python
Jugement d'équivalence d'objet en Python
Parler avec Python [synthèse vocale]
Manipulation de la date des chaînes en Python
Comment développer en Python
Publier sur Slack en Python
Analyser une chaîne JSON écrite dans un fichier en Python
Comment convertir / restaurer une chaîne avec [] en python
Je souhaite intégrer une variable dans une chaîne Python
Comment écrire une concaténation de chaînes sur plusieurs lignes en Python
[Python] Comment développer des variables dans une chaîne de caractères
Préparation au contrôle des objets rhino avec des scripts dans Grasshopper / Python
[Python] Comment faire PCA avec Python
Convertir Markdown en PDF en Python
Comment collecter des images en Python
Dans la commande python, python pointe vers python3.8
Affectations et modifications des objets Python
Différentes façons de calculer la similitude entre les données avec python
Essayez de calculer Trace en Python
Comment utiliser Mysql avec python
Comment envelopper C en Python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Chaîne Python
Examiner la classe d'un objet avec python
5 façons de créer un chatbot Python
Créer une chaîne aléatoire en Python
Comment gérer le japonais avec Python
Une alternative à `pause` en Python
Comment transformer une chaîne en tableau ou un tableau en chaîne en Python
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
Spécification du fuseau horaire lors de la conversion d'une chaîne de caractères en type datetime avec python
Différentes façons de créer un tableau de nombres de 1 à 10 en Python.
J'ai essayé d'implémenter PLSA en Python
Conversion de la chaîne <-> date (date, datetime) en Python
[Introduction à Python] Comment utiliser la classe en Python?
Essayez de vous connecter à qiita avec Python
Installez Pyaudio pour lire des vagues en python
J'ai essayé d'implémenter la permutation en Python
Méthode pour créer un environnement Python dans Xcode 6
Comment définir dynamiquement des variables en Python
Comment faire R chartr () en Python
Épingler le répertoire actuel au répertoire de script en Python
[Itertools.permutations] Comment créer une séquence en Python
PUT gzip directement dans S3 en Python
Envoyer des e-mails à plusieurs destinataires avec Python (Python3)
Convertir un fichier psd en png en Python
Exemple de script pour piéger les signaux en Python
J'ai essayé d'implémenter PLSA dans Python 2
Pour définir le codage par défaut sur utf-8 en python
Decorator pour éviter UnicodeEncodeError dans Python 3 print ()
[Python] Comment inverser une chaîne de caractères
Connectez-vous à Slack à l'aide de requêtes en Python
Comment obtenir stacktrace en python