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
ougit rebase -i HEAD~4
ougit rebase -i <commit>^
) - on marque le commit à modifier avec
edit
(au lieu depick
) - on lance
git reset HEAD^
- puis
git add -p
etgit commit
petit à petit - pour terminer,
git rebase --continue
(source)