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

标签 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 在第一个文件中。

最佳答案

您没有显示实例化 Vera() 选项之一的示例,也没有显示任何将使用(显示/打印或以其他方式操作)此ma​​sterinput<的方法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/

相关文章:

python - 使用 0.8.8+ 版本在页眉或页脚中添加页码

python - 有没有办法在 Django 中删除目录并删除媒体文件?

cocoa - 当用户在 NSSearchField 中按 Enter 键时调用函数?

java - 使用数组获取正数

bash - 你如何返回到源 bash 脚本?

javascript - 从 Javascript 中的嵌套函数返回值

Python,在带有变量的列表中查找项目

python - Django - 包括应用程序网址

python - 从线程迁移到线程

c - 未指定的返回值