1
votes

Attribuer des valeurs spécifiques à partir du retour en python

Je suis nouveau dans toute la terminologie python et je peux utiliser des termes incorrects. Je serais heureux de toute correction. Voici le code associé:

new_sum = func(sum)

Maintenant, supposons que je veuille seulement la variable de compteur, comment puis-je l'assigner à une variable globale (j'espère que le terme est correct)?

Un autre question, si la fonction renvoie quelques variables et que je n'en veux que quelques-unes, comment dois-je faire cela?

J'ai vu quelque chose comme ça:

def func(a,b):
    counter = 0
    sum = a+b
    counter += 1
    return sum, counter

Mais quand je fais cela, il s'attend à ce que j'écrive un & b. Je suis un peu déroutant ...

En gros, je veux utiliser les variables que j'ai créées dans les fonctions extérieures.


0 commentaires

3 Réponses :


1
votes
  1. utilisez global pour indiquer à python qu'une var est globale.
  2. Le retour de valeurs multiples en python est un tuple.
  3. Voir ci-dessous ce que vous recherchez:

    >>> counter = 0
    >>> def func(a,b):
    ...     sum = a+b
    ...     global counter
    ...     counter = counter + 1
    ...     print("global counter: ", counter)
    ...     return sum, counter
    ...
    >>> func(2,3)
    global counter:  1
    (5, 1)
    >>> func(2,4)
    global counter:  2
    (6, 2)
    >>> func(2,6)
    global counter:  3
    (8, 3)
    >>> sum,count = func(2,6)
    global counter:  4
    >>> sum
    8
    >>> count
    4
    >>> type(func(2,6))
    global counter:  5
    <class 'tuple'>
    >>>
    

2 commentaires

Selon votre exemple ... chaque affectation appelle la fonction encore et encore ... et si la fonction produit une sortie volumineuse ou poursuit une api et que je ne veux pas l'utiliser autant de fois


@Racheli C'est pour démontrer comment fonctionne la variable globale, elle conserve les valeurs sur plusieurs appels. C'est la même fonction que vous avez écrite.



2
votes

Pour répondre à votre première question sur la déclaration des variables globales, bien que ce ne soit pas tout à fait recommandable, voici comment cela peut être fait:

a = 5
b = 10
result = func(a,b)
print(result)

Quant à votre deuxième question, car vous avez déclaré votre fonction pour prendre 2 arguments d'entrée, vous devez passer 2 valeurs séparées dans. Par exemple, voici comment utiliser la fonction pour renvoyer la somme de 5 et 10:

counter = 0
def func(a,b):
    global counter
    #print(counter) gives 0
    sum = a+b
    counter += 1
    return sum, counter

Où result sera un tuple avec 2 valeurs: somme (15) et compteur (1). Notez également que déclarer counter comme valeur globale modifie la valeur du compteur lui-même, il n'est donc pas nécessaire de retourner la valeur de counter (la valeur mise à jour peut simplement être indexée dans le script). J'espère que cela vous aidera!


6 commentaires

Cela aide, merci! Que faire si une fonction renvoie 5 valeurs et que je ne veux que la deuxième valeur et la quatrième. Comme @drd a écrit sum, count = func (2,6) . Comment attribuer certaines valeurs?


Vous pouvez utiliser une variable factice pour "attraper" la ou les variables indésirables comme ceci: _, var2, var3, var4, var5 = f (x, y) . Mieux encore, vous pouvez essayer var2, var3, var4, var5 = f (x, y) [1:] , qui capture la sortie de la fonction à partir de la deuxième valeur.


Quelque chose comme ça sera bien aussi? var = (f (x, y) [1]) parce que c'est un tuple, n'est-ce pas?


Absolument, les parenthèses ne sont pas nécessaires


Selon l'exemple ... je comprends que chaque affectation appelle la fonction encore et encore ... que se passe-t-il si la fonction produit une sortie volumineuse ou utilise une API et que je ne veux pas l'utiliser autant de fois ...


Vous pouvez enregistrer la sortie dans un tuple, puis indexer séparément les valeurs pertinentes. array = f (x, y) puis var1, var2 = array [1], array [2] .



1
votes

Ce que vous voulez faire lorsque vous traitez avec plusieurs valeurs de retour est la suivante:

##multiple line solution
new_sum = return_value[0]
new_counter = return_value[1]
new_val3 = return_value[2]

##single line solution
sum, counter, val3, val4, val5 = return_value

## code to do sth with sum, counter, val3 ....

Vous pouvez ensuite accéder aux valeurs de vos fonctions simplement par;

counter = 0 ##global variable
def func(a,b):
    counter = 0
    sum = a+b
    counter += 1
    return sum, counter, val3, val4, val5

return_value = func(a,b) ##assign result to a variable


0 commentaires