代码:
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
由于
答案 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
的值。
我希望这会有所帮助。