web-dev-qa-db-fra.com

Comment appelle-t-on une fonction dans une fonction?

J'ai vu deux autres questions comme celle-ci mais elles n'ont pas fonctionné ...

Ma question est donc la suivante: j'ai une fonction et j'en crée une autre dans laquelle je dois appeler la première fonction. Je n'ai pas d'expérience en Python, mais je sais que dans des langages comme Matlab, c'est possible tant qu'ils se trouvent dans le même répertoire.

Un exemple de base:

def square(x):
square = x * x

(et sauvé)

maintenant, dans ma nouvelle fonction, je veux utiliser la fonction carrée que j'ai essayée:

def something (y, z)
  import square
  something = square(y) + square(z)
  return something

qui affiche: builtins.TypeError: l'objet 'module' n'est pas appelable

Que devrais-je faire?

3
Jane.0

Pas besoin de import si c'est dans le même fichier.

Appelez simplement square à partir de la fonction something.

def square(x):
  square = x * x
  return square

def something (y, z)
  something = square(y) + square(z)
  return something

Plus simplement:

def square(x):
  return x * x

def something (y, z)
  return square(y) + square(z)
3
Ty Pavicich

Si , et seulement si, vous avez la fonction square définie dans un module square, vous devriez alors importer le nom simple à partir de celui-ci.

from square import square

Si vous ne voulez rien changer, vous devez utiliser son nom complet:

something = square.square(y) + square.square(z)

Le nom du module est square et vous ne pouvez pas appeler de fonctions sur les modules.

2
Makoto

Vous avez plusieurs options.

  1. Mettez tout dans un seul fichier. Ensuite, il vous suffit d'appeler l'autre fonction; oubliez tous les imports alors.

  2. Placez la fonction square dans un autre fichier, e. g. foo.py. Ensuite, votre fonction using doit lui donner import. Pour cela, vous avez encore deux options: import foo et utilisez foo.square(y) ou from foo import square et utilisez square(y). (Vous pouvez également nommer votre module comme votre fonction - les deux ont des espaces de noms distincts - vous devrez donc from square import square.)

Les modules (c'est-à-dire dans un fichier séparé) sont utilisés pour regrouper des éléments connectés logiquement, e. g. toutes les fonctions mathématiques, toutes les choses liées au système d'exploitation, toutes les choses liées au générateur de nombres aléatoires, etc. Ainsi, dans votre cas qui ressemble à un premier test, je vous proposerais de tout mettre dans un fichier et d'oublier tous les imports.

0
Alfe

2 façons d'utiliser une fonction dans une autre:

  1. Vous définissez la fonction square() dans un autre fichier .py (ex: myfile.py), puis vous pouvez importer la fonction de la manière suivante:
from myfile import square

def newFunction():
   square()
  1. Vous définissez la fonction dans le même fichier. La variable import n'est pas nécessaire et vous pouvez utiliser directement square().
0
farhawa