我在尝试从另一个文件返回一个函数时遇到了一些问题。
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
答案 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
返回值将是一个可调用的函数。