0

我有一个基本上可以做到这一点的程序:

class principal():
    def execute(self):
        x = calculate()
        final = x.vars1()
        print str(type(final))

class calculate():
    def __init__(self):
        t = self.vars1()
    def vars1(self):
        a = {}
        for i in xrange(0,10):
            a[i] = i*10

        self.result(a)

    def result(self,r):
        return r


m = principal()
x = m.execute()

我的返回是“type 'NoneType'” 为什么不返回 dict 类型,女巫是我所期望的?

4

3 回答 3

1

您的方法中没有返回,因此它返回None.

将您的方法更改vars1为:

def vars1(self):
    a = {}
    for i in xrange(0,10):
        a[i] = i*10
    return a

您不能像尝试那样调用方法来执行返回。return 语句允许您将对象返回给函数的调用者。您的函数result基本上是将参数返回r给方法vars1。但是vars1除非你在这里也放一个return语句,否则不会返回任何东西。

于 2013-09-24T14:24:12.687 回答
1

你必须返回一个字典,你的函数没有返回任何值。这有时被称为从函数的末尾脱落。每种语言对此的处理方式不同,但最重要的是要明确。例如在函数中,vars1您应该return在末尾添加一条语句:

def vars1(self):
    a = {}
    for i in xrange(0,10):
        a[i] = i*10

    return self.result(a)

目前,vars1(self)是没有返回值的“结束”,Python实际上会返回一个NoneType

return 语句返回一个函数的值。没有表达式参数的返回返回无。从函数末尾掉下来也返回 None。

这是文档

于 2013-09-24T14:24:14.313 回答
1

您没有从该vars1方法返回任何内容。你需要return a代替self.result(a).

调用另一个函数return并不像您认为的那样工作。您的result方法本质上是无操作的;它只是将其输入返回给调用它的任何内容。它不会神奇地从堆栈上的其他方法返回该输入。您的vars1方法没有return声明,因此它不返回任何内容。

您的流程目前看起来像这样:

m.execute()
    creates x
    -> calls x.vars1()
        creates a
        -> calls x.result(a)
            -> returns a
            <-
        discards the return value of x.result()
        returns None
        <-
    assigns the return value of x.vars1() to final
    prints str(type(final)), which is None

你想要的是它看起来像这样:

m.execute()
    creates x
    -> calls x.vars1()
        creates a
        returns a
        <-
    assigns the return value of x.vars1() to final
    prints str(type(final)), which is a
于 2013-09-24T14:24:48.300 回答