我只想了解为什么会得到以下结果
来自以下代码
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
变量会给出值而不是变量名吗?
答案 0 :(得分:2)
在第一个函数中,您忽略创建的实例,然后返回int x = 0xFF;
unsigned char *test = (unsigned char *)&x;
if(test[sizeof(int)-1] == 0xFF)
/* big-endian */
if(test[sizeof(int)-1] == 0x00)
/* little-endian */
类。您可以直接打印该类而不使用相同结果的函数:
namedtuple
在第二个函数中,您将创建的实例分配给变量,然后返回变量引用的任何内容(即您创建的实例)。
您可以放弃变量并直接返回实例:
>>> from collections import namedtuple
>>> httpStatus = namedtuple('httpStatus','Code Desc')
>>> print httpStatus
<class '__main__.httpStatus'>
请注意,这与命名元组无关。这将发生在任何类;你正在返回类对象本身。
答案 1 :(得分:2)
因为在第一种情况下,你不能通过调用httpStatus
对结果实例做任何事情,然后只返回作为参数传递的namedtuple类。
而在第二天,b
已分配 httpStatus
的实例,该实例是使用
b = httpStatus(Code=req.status_code,Desc=req.reason)
然后返回。
如果你想在两种情况下都有相同的(正确的)行为,你可以直接
return httpStatus(Code=req.status_code,Desc=req.reason)
在第一种情况下,而不是没有返回语句或赋值的无用调用。