Ewen Corre

2024-11-21

TIL #3 - datetime, date et dictionnaires comme valeurs par défaut, diviser un commit

datetime et date

Ce sont des concepts différents, notamment dans Python. Un datetime est un point dans le temps, complètement indépendant. Un date est un concept calendaire. Les convertir n'est pas trivial, et now.date() peut donc donner des trucs bizarres.

Source : la doc de Django.

Donc : pour une date, on utilise date et pas datetime, et dans Django c'est mieux d'utiliser le module timezone.


Dictionnaires et valeurs par défaut

En Python, il est dangereux d'utiliser des mutables comme valeur par défaut dans des fonctions. Une fois rempli une fois, il restera rempli. Exemple :

def fun(default={}):
    print(default)
    default["a"] = 42
    print(default)

fun()
# prints:
# {}
# {'a': 42'}

fun()
# prints:
# {'a': 42}
# {'a': 42}

Une solution pour éviter ce problème :

def fun(default=None):
    if default is None:
        default = {}
    # …

Diviser un commit

Dans ma PR, un commit est trop important. Je veux le séparer en plusieurs commits.

  • on lance un rebase interactif (eg. git rebase -i master ou git rebase -i HEAD~4 ou git rebase -i <commit>^)
  • on marque le commit à modifier avec edit (au lieu de pick)
  • on lance git reset HEAD^
  • puis git add -p et git commit petit à petit
  • pour terminer, git rebase --continue

(source)