Python tricks

format()

Vous pouvez spécifier un séparateur des milliers pour format() :

>>> format(123456789, ",")
'123,456,789'
>>> format(123456789, "_")
'123_456_789'

Idem pour les f-string :

>>> f"{123456789:,}"
'123,456,789'
>>> f"{123456789:_}"
'123_456_789'

pow()

pow() peut prendre un 3ème argument pour calculer pow(x, y) % z :

x, y, z = 123456789, 2345678, 17

# Option 1: not efficient at all
res = pow(x, y) % z  # Does not end in more than 1 minute!

# Option 2: here we can talk!
res = pow(x, y, z)  # Instantly

re.sub()

re.sub() peut être utilisée pour remplacer plusieurs caractères dans un texte (évitant ainsi d’avoir à enchaîner les appels à str.replace ou au plus coûteux str.translate) :

import re

fname = "Ça, c'est un nom de fichier (2).odt"
pattern = re.compile(r'([/:"|*<>?\\])')
fname_sanitized = re.sub(pattern, "-", fname)

str.startswith & str.endswith

str.startswith et str.endswith peuvent prendre un tuple en paramètre :

text = "azerty"

# Option 1: basic usage, not efficient
if (
    text.startswith("a")  # noqa:PIE810
    or text.startswith("b")
    or text.startswith("c")
    or text.startswith("d")
    or text.startswith("e")
    or text.startswith("f")
):
    pass

# Option 2: best usage, efficient
if text.startswith(("a", "b", "c", "d", "e", "f")):
    pass

time & datetime

Vous pouvez supprimer les zéros ajoutés pour les différentes fonctions du module time qui prennent un format en entrée (valable pour datetime également) :

>>> import datetime, time
>>> today = datetime.datetime.now().timetuple()
>>> time.strftime("%Y-%m-%d", today)
'2017-12-06'
>>> time.strftime("%Y-%m-%-d", today)  # Check the '%-d'
'2017-12-6'

📜 Historique

2024-02-01

Déplacement de l’article depuis le blog.

2019-12-13

Ajout de re.sub().

2019-04-19

Ajout de format().

2017-12-06

Ajout de time & datetime.

2017-10-09

Premier jet avec str.startswith() & str.endswith() et pow(), il vaut mieux publier maintenant que jamais ☺