繁体   English   中英

从函数返回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变量会给出值而不是变量名吗?

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

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

在第二个函数中,将创建的实例分配给变量,然后返回变量引用的内容(即创建的实例)。

您可以放弃变量,而直接返回实例:

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

请注意,这与命名元组无关。 任何班级都会发生这种情况; 您将返回类对象本身。

因为在第一种情况下,您不会通过httpStatus的调用对结果实例执行任何操作,然后仅返回作为参数传递的namedtuple类。

而在第二个中,为b 分配httpStatus的实例,该实例使用

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

然后返回。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM