[Plone-IT] Incredibile Python
Giovanni Toffoli
toffoli a uni.net
Mer 9 Feb 2011 16:33:52 UTC
Cari plonisti italiani, prima di fare un post su una mailing list
internazionale, e magari farci una grigia, sottopongo a voi una recente
esperienza.
Quando si usa un dict come valore default di un keyword argument, e si
modifica il valore di quella variabile all'interno del metodo, Python ne
ricorda il valore da una chiamata all'altra !!
Allego, come file di testo, un esempio commentato, che in realtà era un .py.
Dato che non so se gli attachment vengono conservarti in questa lista, ne
riporto il contenuto anche in linea. L'esempio fa riferimento ad un external
method in Plone 3, richiamato da un Python script. Ma ottengo lo stesso
risultato anche usando solo l'interprete Python, oppure Idle. Solo che, nel
caso di Zope/Plone, il valore della variabile sembra memorizzato nel
database, dato che viene ricordato anche se si riavvia l'istanza.
A saperlo, non è una cosa grave, ma io ho perso parecchie ore a
diagnosticare un malfunzionamento misterioso. Secondo voi è un bug di Python
(e quindi di Zope/Plone), o un comportamento previsto?
Grazie e ciao, Giovanni
-----
"""
Giovanni Toffoli <gtoffoli a uni.net>, 110209
create an external method so defined:
Id: keyarg_dict
Title: test the use of Python dict as keyword argument
Module Name: myproduct.keyarg_dict
Function Name: test
then call it 2 times from a Python script as follows:
print context.keyarg_dict()
print context.keyarg_dict()
return printed
I get the following results:
{}
{'a': 1}
subsequent times, if I execute the script,
even if I restart the instance, I get:
{'a': 1}
{'a': 1}
"""
def test(arg={}):
out = repr(arg)
if not arg:
arg['a'] = 1
return out
-------------- parte successiva --------------
È stato filtrato un testo allegato il cui set di caratteri non era
indicato...
Nome: keyarg_dict.txt
URL: <http://lists.plone.org/pipermail/plone-plone-it/attachments/20110209/41ea3c93/attachment-0002.txt>
Maggiori informazioni sulla lista
Plone-IT