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