从另一个文件返回函数时的Python问题

时间:2016-02-02 01:59:45

标签: python return

我在尝试从另一个文件返回一个函数时遇到了一些问题。

main.py:

from master_input import load_input

class Vera(object):
    def __init__(self):
        masterinput = load_input()
        self.masterinput = masterinput

    def load_masterinput(self):
        return self.masterinput

master_input.py:

import sys

def load_input():
    if sys.version_info <= (3,0,0):
        masterinput = raw_input()
    elif sys.version_info >= (2,7,11):
        masterinput = input()
    return masterinput

运行第一个文件时似乎没有输出。我希望它在第二个文件中返回masterinput因为如果我要用load_input()结束函数,在第二个文件中,它只会在第一个文件中输出而不返回self.masterinput

2 个答案:

答案 0 :(得分:2)

您没有显示实例化其中一个 Vera()选项的示例,也没有显示任何将使用(显示/打印或以其他方式操作) masterinput <的方法/ strong> Veta()实例的属性。

所以你的代码似乎很可能没有“做”任何事情。您已经声明了对象的外观,如何实例化它们以及如何响应(名称不详的) load_masterinput()方法调用。

此外,您的模块未返回功能。当一个对象被实例化时,它可以返回一个字符串,即调用 input() raw_input()内置函数的结果。

顺便说一句,在我看来,智能方式来处理从Python2.x raw_input()到Python3 input()的变化就是使用像这样:

#!python
if 'raw_input' in dir(__builtins__):
    input = raw_input

请注意,我将函数 raw_input 分配给名称​​ input ...我不是在调用函数并在此处分配其评估结果。< / p>

然后我的所有代码都可以使用 input(),我们可以忘记Python2(已评估的) input()语义曾经存在。

如果我想从函数中实际返回一个函数,这是一种方法:

#!python
# filename: my_input.py
def get_input_function():
    if 'raw_input' in dir(__builtins__):
        # Python2.x and earlier
        return raw_input
    else:
        # Python3
        return input

......我会这样称呼它:

#!python
import my_input
input = my_input.get_input_function()

这是不必要的迟钝。对于这么微不足道的事情,没有理由做这样的事情。在某些情况下,您可能会想象调用某些函数,使用某些参数并根据这些参数返回不同的函数。但是,在大多数情况下,您最好还是创建 并实例化该实例。

答案 1 :(得分:0)

问题是你实际上没有返回函数,而是调用函数并返回结果。只需删除括号即可将函数调用更改为函数本身。即,改变:

return func()

为:

return func

返回值将是一个可调用的函数。