从函数返回 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 语句 或 赋值的情况下进行无用的调用。
我只是想了解为什么会得到以下结果
来自以下代码
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 语句 或 赋值的情况下进行无用的调用。