On 05/07/2012 04:37 PM, xancorreu wrote: > Al 07/05/12 21:07, En/na Dave Angel ha escrit: >> On 05/07/2012 02:24 PM, xancorreu wrote: >>> Hi, >>> >>> I have this script: >>> >>> from types import * >>> >> Bad idea. Once you do that, you can silently overwrite globals in your >> own module with stuff that the current version of types happens to have >> in it. Besides, it then becomes very hard to read your program and >> figure out which names you really did want to import. >> >> If you're just getting one or two names, such as in your case, better >> just do >> import types >> >>> class Tag: >>> >>> def __init__(self, nom, tipus, valor): >>> self.nom = nom >>> self.tipus = tipus >>> self.valor = valor >>> >>> def __str__(self): >>> return "Nom: " + str(self.nom) + ", Tipus: " + >>> str(self.tipus) + ", Valor: " + str(self.valor) >>> >>> >>> def main(): >>> a = Tag("descripció", str, "primera tasca") >>> b = Tag("unmes", str, lambda x: x+1) >>> print(a) >>> print(b) >>> >>> if __name__ == '__main__': >>> main() >>> >>> >>> All is ok, but when I substitute b = Tag("unmes", str, lambda x: x+1) >>> for b = Tag("unmes", function, lambda x: x+1) I receive an error that >>> function is not globally defined variable. How can I say that function >>> is the types.function? (the type of lambda x: x+1) >>> >> Where's the stack trace and the exact error message? >> >> types.function is undefined. The types module does not expose a name >> called 'function,' at least not in python 3.2 >> >> The type of a lambda is<class 'function'>, so it's not clear what you >> really want. >> >> Why don't you show the program as you actually run it (perhaps with both >> versions of the b= assignment), and the output and stack trace you got. >> Then explain just what you'd hoped to get, as output. >> > > This is the code: > > class Tag: > > def __init__(self, nom, tipus, valor): > self.nom = nom > self.tipus = tipus > self.valor = valor > > def __str__(self): > return "Nom: " + str(self.nom) + ", Tipus: " + str(self.tipus) > + ", Valor: " + str(self.valor) > > class Task: > _nombre = 0 > > def __init__(self): > self.tags = [] > Task._nombre = Task._nombre + 1 > self.num = Task._nombre > > > def __str__(self): > return "Número: " + str(self.num) + ", Tags: " + str(self.tags) > > def main(): > a = Tag("descripció", str, "primera tasca") > b = Tag("unmes", str, lambda x: x+1) > c = Tag("twice", type(lambda: x: x), lambda x: 2*x) > # en comptes de str ha de ser lambda > print(a) > print(b) > print(b.valor(2)) > t = Task() > print("Tasca 1:", t) > t2 = Task() > print("Tasca 2:", t2) > > if __name__ == '__main__': > main() > > > and it fails here: > > $ python3 tasques.py > File "tasques.py", line 26 > c = Tag("twice", type(lambda: x: x), lambda x: 2*x) > ^ > SyntaxError: invalid syntax > > > Really, I want to specify "manually" the type of lambda, but it does not > work. How to do that? > > > Thanks, > >>> I use python3 >>> >>> >>> Thanks in advance, >>> Xan. > >
def main(): a = Tag("descripció", str, "primera tasca") print (a) b = Tag("unmes", str, lambda x: x+1) print(b) c = Tag("unmes", "function", lambda x: x+1) print(c) Does that help? -- DaveA _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor