从函数返回 namedtuple

Returning namedtuple from function

我只是想了解为什么会得到以下结果

来自以下代码

def sendHTTP(httpStatus):   
    status_code = 400
    reason = "Unauthorized"
    httpStatus(Code=req.status_code,Desc=req.reason)
    return httpStatus

if __name__ == '__main__':
    httpStatus = namedtuple('httpStatus','Code Desc')
    http_results = sendHTTP(httpStatus)
    print "1:",http_results

打印结果为:

1: <class '__main__.httpStatus'>

def sendHTTP(httpStatus):

    status_code = 400
    reason = "Unauthorized"
    b = httpStatus(Code=req.status_code,Desc=req.reason)
    return b

if __name__ == '__main__':
    httpStatus = namedtuple('httpStatus','Code Desc')
    http_results = sendHTTP(httpStatus)
    print "1:",http_results

打印结果为:

1: httpStatus(Code=401, Desc='Unauthorized')

有人可以解释为什么添加 b 变量会给出值而不是变量名吗?

在第一个函数中,您忽略 创建的实例,然后return namedtuple class。您可以直接打印 class 而无需使用函数来获得相同的结果:

>>> from collections import namedtuple
>>> httpStatus = namedtuple('httpStatus','Code Desc')
>>> print httpStatus
<class '__main__.httpStatus'>

在第二个函数中,您将创建的实例分配给一个变量,然后 return 任何变量引用(即您创建的实例)。

您可以放弃变量而直接 return 实例:

return httpStatus(Code=req.status_code, Desc=req.reason)

请注意,这与命名元组无关。 任何class都会发生这种情况;您正在 returning class 对象本身。

因为在第一种情况下,您没有对 httpStatus 调用的结果实例做任何事情,然后只是 returning namedtuple class作为参数传递。

而在第二个中,b 分配 httpStatus 的实例,它是用

创建的
b = httpStatus(Code=req.status_code,Desc=req.reason)

然后 returned。

如果您希望在两种情况下都有相同(正确)的行为,您会希望直接

return httpStatus(Code=req.status_code,Desc=req.reason)

在您的第一种情况下,而不是在没有 return 语句 赋值的情况下进行无用的调用。