【问题标题】:Python issue when returning function from another file从另一个文件返回函数时的Python问题
【发布时间】:2016-05-10 16:29:48
【问题描述】:

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

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 的情况下输出。

【问题讨论】:

  • 我认为我们需要有关您的文件结构的更多详细信息。发布的代码没有完全运行:core.brain.master_input 不存在。因为我有定期从另一个文件返回功能结果的代码,所以我知道这通常是有效的。请提供更多描述和示例?

标签: python return


【解决方案1】:

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

return func()

到:

return func

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

【讨论】:

    【解决方案2】:

    您没有展示实例化 Vera() 选项之一的示例,也没有展示将使用(显示/打印或以其他方式操作)此 ma​​sterinputVeta() 实例的 /strong> 属性。

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

    您的模块也没有返回函数。当一个对象被实例化时,它可能会返回一个字符串,这是调用 input()raw_input() 内置函数的结果。

    顺便说一句,在我看来,处理从 Python2.x raw_input() 到 Python3 input() 的变化的聪明方法是使用类似的代码这个:

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

    请注意,我将函数 raw_input 分配给名称 input ...我没有在此处调用该函数并分配其评估结果。

    然后我所有的代码都可以使用 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()
    

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

    【讨论】:

    • 有没有办法在整个文件中使用input。例如,在上面列出的main.py 文件中,我试图解析用户输入,但我想使用正确的input。这就是为什么我有master_input.py 的文件。
    • 正如您尝试使用“master_input.py”...您在某个文件中定义函数、类和变量,然后使用 import声明以使您在其他代码中定义的所有内容都可用。您还可以使用 import 语句的 from ____ import ____ 变体将模块中的项目直接合并到代码的顶级名称空间中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 2010-09-28
    • 1970-01-01
    • 2020-03-27
    • 2017-06-30
    • 2010-11-24
    • 2017-05-15
    相关资源
    最近更新 更多