[Tutor] How can I have type "function" in my script?
xancorreu
xancorreu at gmail.com
Mon May 7 22:37:54 CEST 2012
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.
More information about the Tutor
mailing list