Retourner au contenu associé (journal : Python et valeurs par défaut des paramètres)
Posté par Victor STINNER (site web personnel) le 02 août 2012 à 02:22. En réponse au journal Python et valeurs par défaut des paramètres. Évalué à 7.
Au cours de mes pérégrination pythranesques, j'ai découvert une fleur du langage python, que je m'empresse de partager.
Ce n'est pas vraiment une "fonctionnalitée" cachée. Il y a d'autres manières d'avoir des variables locales pour une fonction.
Exemple avec une fermeture (closure) :
>>> def with_locals(): ... accu = [] ... def func(): ... accu.append(1) ... print(accu) ... return func ... >>> func = with_locals() >>> func() [1] >>> func() [1, 1] >>> func() [1, 1, 1] >>> func() [1, 1, 1, 1]
À partir de Python 3, on peut également modifier la variable (et non pas juste son contenu) grâce à nonlocal :
>>> def with_locals(): ... x = 0 ... def func(): ... nonlocal x ... x += 1 ... print(x) ... return func ... >>> func = with_locals() >>> func() 1 >>> func() 2 >>> func() 3
On peut également utiliser des attributs arbitraires à la fonction pour y stocker des trucs :
>>> def hello(): ... print(hello.world) ... >>> hello.world="Hello World!" >>> hello() Hello World! >>> hello.world="Bonjour Monde !" >>> hello() Bonjour Monde !
(La fonction peut également modifier hello.world)
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル
# Autres syntaxes
Posté par Victor STINNER (site web personnel) . En réponse au journal Python et valeurs par défaut des paramètres. Évalué à 7.
Au cours de mes pérégrination pythranesques, j'ai découvert une fleur du langage python, que je m'empresse de partager.
Ce n'est pas vraiment une "fonctionnalitée" cachée. Il y a d'autres manières d'avoir des variables locales pour une fonction.
Exemple avec une fermeture (closure) :
À partir de Python 3, on peut également modifier la variable (et non pas juste son contenu) grâce à nonlocal :
On peut également utiliser des attributs arbitraires à la fonction pour y stocker des trucs :
(La fonction peut également modifier hello.world)