Pergunta sobre python – Atribuindo uma função a uma variável

42

Vamos dizer que eu tenho uma função

<code>def x():
    print(20)
</code>

Agora eu quero atribuir a função a uma variável chamaday, de modo que se eu usar oy chama a funçãox novamente. se eu simplesmente fizer a tarefay = x(), retornaNone.

eu acho quelambda   deve funcionar, pls. verifique minha resposta abaixo. Pengju Zhao
Eu também editei como o que você quer fazer aqui éatribuir uma função a uma variável, nãoatribuir uma variável a uma função. Gareth Latty
Eu editei sua pergunta para reduzi-la aoapenas informação relevante.. Seu entusiasmo é ótimo, mas, no futuro, por favor, concentre-se em explicar sua pergunta real. Li-aung Yip

Sua resposta

5   a resposta
6

y=x() você está realmente atribuindo y ao resultado de chamar o objeto de funçãox e a função tem um valor de retorno deNone. Chamadas de função em python são executadas usando(). Atribuirx to y então você pode ligary assim como você fariax você atribui o objeto de função x para y comoy=x e chame a função usandoy()

77

Você simplesmente não chama a função.

<code>>>>def x():
>>>    print(20)
>>>y = x
>>>y()
20
</code>

Os colchetes dizem ao python que você está chamando a função, então quando você os coloca lá, ele chama a função e atribuiy O valor queretornou porx (que neste caso éNone).

Oh obrigado, isso é tudo que eu queria saber. Estava me deixando louco sem saber por que isso estava aparecendo! obrigado seeker
@ GarethLatty Eu só quero saber porque é chamado mesmo quando você escreve: y = x (). No meu console, 20 aparece quando eu escrevo y = x (). Por que isso acontece quando eu não chamei explicitamente a função? seeker
@seeker Porque sua função está sendo chamada. Para obter o resultado dex(), x deve ser executado. Nesse caso, ele é executado, imprimindo20 e retornandoNone. Então esse resultado (None) é atribuído ay. Funções em Python (como na maioria das linguagens) podem ter efeitos colaterais. Para chamar a função para obter seu valor de retorno (ouNone se não tiver um valor de retorno explícito), a função é executada e os efeitos colaterais acontecem. Gareth Latty
Você pode fazer isso com instâncias de classe? jimh
-1

criar função y = x + 1y=lambda x:x+1

chame a funçãoy(1) então retorne2.

12

não faça use o () mas simplesmente o nome da função.

No seu caso, dadodef x(): ...e variávelsilly_var você faria algo assim:

<code>silly_var = x
</code>

e então você pode chamar a função com

<code>x()
</code>

ou

<code>silly_var()
</code>
1

A sintaxe

<code>def x():
    print(20)
</code>

é basicamente o mesmo quex = lambda: print(20) (Existem algumas diferenças sob o capô, mas para fins mais práticos, os resultados são os mesmos).

A sintaxe

<code>def y(t):
   return t**2
</code>

é basicamente o mesmo quey= lambda t: t**2. Quando você define uma função, você está criando uma variável que tenha a função como seu valor. No primeiro exemplo, você está definindox ser a funçãolambda: print(20). assimx agora se refere a essa função.x() não é a função, é oligar da função. Em python, as funções são simplesmente um tipo de variável e geralmente podem ser usadas como qualquer outra variável. Por exemplo:

<code>def power_function(power):
      return  lambda x : x**power
power_function(3)(2)
</code>

Isso retorna 8.power_function é uma função que retorna uma função como saída. Quando é chamado3, ele retorna uma função que cubra a entrada, então quandonaquela função é chamada na entrada2, ele retorna 8. Você poderia fazercube = power_function(3), e agoracube(2) retornaria 8.

Perguntas relacionadas