[英]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.