2009-12-18 10 views
0

J'essaie de retourner (exécuter) une fonction d'un autre fichier dans une instruction if. J'ai lu que la déclaration de retour ne fonctionnera pas, j'espérais que quelqu'un sache quelle déclaration me permettrait d'appeler une fonction extérieure.appeler une fonction externe en python

La fonction crée un sandbox mais s'il en existe un, je souhaite passer l'instruction if.

Ceci est un petit extrait de code que j'ai utilisé.

import mks_function 
from mksfunction import mks_create_sandbox 
import sys, os, time 
import os.path 

if not os.path.exists('home/build/test/new_sandbox/project.pj'): 
return mks_create_sandbox() 
else: 
print pass 
+3

s'il vous plaît préciser - quel est le scénario vous êtes dans? montrez-nous du code –

+1

Pour commencer, ce que vous essayez de faire n'est pas très clair: voulez-vous retourner une fonction définie dans un fichier externe, retourner la valeur renvoyée en exécutant cette fonction externe, ou simplement exécuter la fonction externe? Que diriez-vous d'un exemple de code? –

+0

Quelle erreur obtenez-vous avec ce code? –

Répondre

2

Voyons voir what docs say:

return ne peut se produire syntaxiquement niché dans une définition de fonction, et non pas dans une définition de classe imbriquée.

ce que vous essayez de faire, je pense est:

from mksfunction import mks_create_sandbox 
import os.path 

if not os.path.exists('home/build/test/new_sandbox/project.pj'): 
    mks_create_sandbox() 
+0

Notez que la partie else: pass n'est pas nécessaire. – Brian

+1

-1: 'else: pass' –

+0

' pass' est un espace réservé pour le code. – SilentGhost

1

Vous avez probablement besoin de import le module qui contient la fonction, non?

Bien sûr, un peu plus de précision sur ce que vous essayez d'accomplir serait utile.

4

Supposons que votre fonction bar se trouve dans un fichier appelé foo.py sur votre chemin Python.

Si foo.py contient ceci:

def bar(): 
    return True 

Ensuite, vous pouvez faire ceci:

from foo import bar 

if bar(): 
    print "bar() is True!" 
1

Que voulez-vous dire par "la déclaration de retour ne fonctionnera pas"?

Vous pouvez import la fonction de l'autre fichier et l'appeler comme une fonction locale.

0

Cela dépend de ce que vous voulez dire. Si vous voulez créer une méthode statique, alors vous feriez quelque chose comme

class fubar(object): 

    @classmethod 
    def foo(): 
     return bar 

fubar.foo() # returns bar 

Si vous voulez exécuter un processus externe alors que vous utilisez subprocess bibliothèque et faire

import subprocess 
subprocess.popen("cmd echo 'test'",shell=true) 

dépend vraiment ce que vous voulez faire

0

Voulez-vous dire import? Dites, votre fonction externe vit dans mymodule.py dans le même répertoire, vous devez d'abord importer:

import mymodule 
# or 
from mymodule import myfunction 

Ensuite, il est simple d'utiliser la fonction:

if mymodule.myfunction() == "abc": 
    # do something 

ou avec la deuxième importation:

if myfunction() == "abc": 
    # do something 

Voir this tutorial.

-1

file1.py (en commentaire 2 des versions)

#version 1 
from file2 import outsidefunction 
print (outsidefunction(3)) 

#version 2 
import file2 
print (file2.outsidefunction(3)) 

#version 3 
from file2 import * 
print (outsidefunction(3)) 

fichier2.py

def outsidefunction(num): 
    return num * 2 

ligne de commande: python file1.py

1

J'ai une grande touche sur cette récemment que je travaillais sur mon projet en python. Je serais engagé à regarder votre fichier de fonction externe aussi.

Si vous appelez un module (en fait, toute fonction en dehors du même fichier peut être traitée comme un module, je déteste spécifier des choses trop précises), vous devez vous assurer de quelque chose. Voici un exemple d'un module, nous allons l'appelaient my_module.py

# Example python module 

import sys 
# Any other imports... imports should always be first 

# Some classes, functions, whatever... 
# This is your meat and potatos 

# Now we'll define a main function 
def main(): 
    # This is the code that runs when you are running this module alone 
    print sys.platform 

# This checks whether this file is being run as the main script 
# or if its being run from another script 
if __name__ == '__main__': 
    main() 
# Another script running this script (ie, in an import) would use it's own 
# filename as the value of __name__ 

Maintenant, je veux appeler cette fonction entière dans un autre fichier, appelé work.py

import my_module 

x = my_module 
x.main() 
Questions connexes