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.
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor