python socket函数[]参数

时间:2017-07-23 04:34:08

标签: python sockets

代码:

import socket
def get_protnumber(prefix):
  return dict( (getattr(socket, a), a)
    for a in dir(socket)
      if a.startswith(prefix))

proto_fam = get_protnumber('AF_')
types = get_protnumber('SOCK_')
protocols = get_protnumber('IPROTO_')

for res in socket.getaddrinfo('www.thapar.edu', 'http'):
  family, socktype, proto, canonname, sockaddr = res

print 'Family         :', proto_fam[family]
print 'Type           :', types[socktype]
print 'Protocol       :', protocols[proto]
print 'Canonical name :', canonname
print 'Socket address :', sockaddr

你好我的第一个问题对不起,如果有一些尝试。

我没有理解 get_protnumber 的功能。 socket a 来自。此函数接受来自sqauare的参数括号。如果我这样做:

get_protnumber('AF_')[2]

它给了我 AF_INET

由于

1 个答案:

答案 0 :(得分:0)

  

套接字 a 来自哪里?

套接字是由import socket导入的模块。 模块也是一个对象。此外,它是全局的,因此您可以在函数get_protnumber中访问它。

您可以按dir(object)获取对象的属性。它将返回其所有属性的名称列表。然后,您可以通过for in表达式遍历列表。 所以for a in dir(socket)意味着迭代套接字的所有属性名称。

以下代码

return dict( (getattr(socket, a), a)
    for a in dir(socket)
      if a.startswith(prefix))

相当于

return dict( (getattr(socket, a), a) for a in dir(socket) if a.startswith(prefix))

请注意括号的开头和结尾。

所以a是套接字对象的一些属性名称。

  

此函数如何从sqauare括号中获取参数?

不,它不会从sqaurae括号中获取参数。

get_protnumber('AF_')[2]中,'AF_'是参数,[2]表示按get_protnumber索引函数2的返回值。在您的情况下,get_protnumber返回一个字典,因此您将获得键2的值。

我希望这会有所帮助。