вызов внешней функции в python - PullRequest
0 голосов
/ 18 декабря 2009

Я пытаюсь вернуть (выполнить) функцию из другого файла в операторе if. Я читал, что оператор return не будет работать, я надеялся, что кто-нибудь узнает, какой оператор позволит мне вызывать внешнюю функцию.

Функция создает песочницу, но если она существует, я хочу передать оператор if.

Это небольшой фрагмент кода, который я использовал.

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  

Ответы [ 8 ]

5 голосов
/ 18 декабря 2009

Скажите, что ваша функция bar находится в файле с именем foo.py в вашем пути Python.

Если foo.py содержит это:

def bar():
  return True

Тогда вы можете сделать это:

from foo import bar

if bar():
  print "bar() is True!"
2 голосов
/ 21 декабря 2009

В последнее время у меня много общего с этим, когда я работал над своим последним проектом на python. Я бы тоже хотел посмотреть на ваш внешний файл функций.

Если вы вызываете модуль (ну, на самом деле, любая функция за пределами того же файла может рассматриваться как модуль, я не хочу указывать слишком точные данные), вам нужно что-то в этом убедиться. Вот пример модуля, назовем его 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__

Теперь я хочу вызвать всю эту функцию в другом файле с именем work.py

.
import my_module

x = my_module
x.main()
2 голосов
/ 18 декабря 2009

посмотрим что говорят документы :

return может встречаться только синтаксически, вложенным в определение функции, а не в определение вложенного класса.

что вы пытаетесь сделать, я думаю, это:

from mksfunction import mks_create_sandbox  
import os.path

if not os.path.exists('home/build/test/new_sandbox/project.pj'):
    mks_create_sandbox()
1 голос
/ 18 декабря 2009

Что именно вы подразумеваете под "оператором возврата не сработает"?

Вы можете import функцию из другого файла и вызывать ее как локальную функцию.

1 голос
/ 18 декабря 2009

Вам, вероятно, нужно import модуль, который содержит функцию, нет?

Конечно, немного больше информации о том, чего вы пытаетесь достичь, поможет.

0 голосов
/ 18 декабря 2009

file1.py (закомментируйте 2 версии)

#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))

file2.py

def outsidefunction(num):
    return num * 2

Командная строка: python file1.py

0 голосов
/ 18 декабря 2009

Вы имеете в виду import? Скажем, ваша внешняя функция находится в mymodule.py в той же директории, вы должны сначала импортировать ее:

import mymodule
# or
from mymodule import myfunction

Тогда просто использовать функцию:

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

или со вторым импортом:

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

См. этот урок .

0 голосов
/ 18 декабря 2009

Это зависит от того, что вы имеете в виду. Если вы хотите создать статический метод, вы должны сделать что-то вроде

class fubar(object):

    @classmethod
    def foo():
      return bar

fubar.foo() # returns bar

Если вы хотите запустить внешний процесс, вы должны использовать библиотеку subprocess и делать

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

действительно зависит от того, что вы хотите сделать

...