我在尝试从另一个文件返回函数时遇到了一些问题。
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
在第一个文件中。
最佳答案
您没有显示实例化 Vera() 选项之一的示例,也没有显示任何将使用(显示/打印或以其他方式操作)此masterinput<的方法Veta() 实例的/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()
这是不必要的迟钝。没有理由为了这么微不足道的事情做这样的事情。在某些情况下,您可能会想象使用某些参数调用某个函数,并根据这些参数返回不同的函数。但是,在大多数情况下,您仍然最好创建一个类并实例化该类的实例。
关于从另一个文件返回函数时的 Python 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35143800/