L'approccio che stai descrivendo in realtà non produce una docstring. Non risulta nella proprietà __ doc __ della funzione impostata, il che significa che non è disponibile per la funzione aiuto e non sarebbe disponibile per (tipica) generatori di documentazione automatizzata. Ecco un semplice esempio che mostra questo in azione. Innanzitutto, una funzione con una docstring "tradizionale":
>>> def bar():
"some value: 42"
return 42
>>> bar.__doc__
'some value: 42'
>>> help(bar)
Help on function bar in module __main__:
bar()
some value: 42
Tieni presente che la proprietà __ doc __ è impostata e aiuto mostrerà il contenuto di quella stringa. Ora proviamo con la "docstring" generata dinamicamente. Metto la docstring in virgolette da paura perché non è in realtà una docstring.
>>> def foo():
"some value: {}".format(3)
return 42
>>> foo.__doc__
>>> help(foo)
Help on function foo in module __main__:
foo()
Non c'è alcun valore per foo .__ doc __ e aiuto non mostra nulla a parte la dichiarazione della funzione, il che significa che il sistema non ha interpretato il valore come una docstring. Questo non è davvero sorprendente, dal momento che la prima espressione nel corpo della funzione non è una stringa, è una chiamata di funzione a una funzione membro di una stringa.
Quindi, per rispondere alle domande,
Is it poor practice to have dynamically updated docstrings?
Ci sono modi per aggiornare dinamicamente una docstring, vale a dire, impostando la proprietà __ doc __ della funzione, ma non è quello che sta facendo il tuo approccio. Che si tratti di buone o cattive pratiche probabilmente dipende dall'applicazione. Se stai generando dinamicamente alcune funzioni e desideri assegnare loro la documentazione, potrebbe andare bene. Nel modo in cui stai descrivendo, però, semplicemente non funziona.
The advantage to this, would be that someone else reading dynamically
from the function would get a more helpful message indicating the
actual number.
Dipende da cosa intendi per "leggere dinamicamente dalla funzione". potrebbe essere utile a qualcuno che legge la fonte, ma sicuramente non è utile a qualcuno che sta guardando l'output di aiuto , o che sta leggendo il valore di __ doc __ proprietà.