2017-01-06 1 views
1

J'essaye d'écrire un programme simple avec python 3 pour la pratique. Ce que je veux faire est dessiner une fonction qui prend un utilisateur input() comme argument. J'ai essayé de stocker le input() dans une variable, mais chaque fois que j'essaye de continuer la variable appelle elle-même demandant le input(), ainsi elle ne stocke rien. J'ai également essayé quelque chose comme ceci:comment utiliser un raw_input comme argument dans une fonction dans python 3

def function(input('give me a '), input('give me b ')): 
    # do stuff with the inputs 

mais cela donne une erreur de syntaxe dans la parenthèse.

Une idée sur la façon de définir une fonction pour utiliser input() comme arguments?

+0

Vous devriez ajouter votre programme d'exemple démontrant comment vous faites exactement référence et essayez de les traiter. Par exemple, votre 'def function' est syntaxiquement incorrecte, car elle doit répertorier les noms d'arguments - pas les actions effectuées. –

Répondre

4

Cela dépend de ce que vous essayez de faire. Très probablement, vous voulez passer l'entrée d'utilisateur à l'appel de fonction plutôt que la définition:

def function(a, b): 
    print(a, b) 

a = input('give me a ') 
b = input('give me b ') 

function(a, b) 

Cependant, si vous voulez passer une entrée utilisateur donné comme argument par défaut à une fonction, vous pouvez le faire comme ça :

def function(a=input('give me a '), b=input('give me b ')): 
    print(a, b) 

function() # prints whatever the user inputted when the file was initially run 

la raison pour laquelle votre code soulève une exception parce que le contenu de la () dans une fonction définition (par opposition à une fonction appel, c.-à-function()) est le nom des paramètres plutôt que les arguments transmis à la fonction. Vous pouvez utiliser input() dans cette partie de la signature de fonction uniquement si vous l'affectez en tant que valeur par défaut à associer à un nom de paramètre, comme je l'ai fait ci-dessus. Ce deuxième cas d'utilisation semble assez étrange, et à chaque fois que function() est appelé, les mêmes arguments que les valeurs par défaut que l'utilisateur a initialement saisis lui seront transmis. Même si c'est ce que vous voulez faire, vous devriez probablement le faire à la place:

input_a = input('give me a ') 
input_b = input('give me b ') 

def function(a=input_a, b=input_b: 
    print(a, b) 

function() 

Alternativement, si vous voulez obtenir une autre paire d'entrées à chaque fois que la fonction est appelée (ce qui semble en fait le plus probable maintenant que J'y pense):

def function(): 
    a = input('give me a ') 
    b = input('give me b ') 
    print(a, b) 
+2

Quelque chose qui n'est pas évident à propos de 'def f (a = input()):' est que les arguments par défaut sont évalués immédiatement lorsque la définition de la fonction est évaluée (et non au premier appel ou quoi que ce soit). –

+0

@JoshLee droite, c'est quelque chose que je n'ai jamais vraiment pensé avant de répondre à cette question. Cela me semble à la fois intuitif et contre-intuitif, car le * corps * de la fonction n'est pas évalué avant d'être appelé. – elethan

+1

Ou 'def func (a = Aucun): a = input ('donne moi') si a est None else a; ... ' –