`lambda: class(class, class, ...)` 语法是什么意思? (扭曲 Python 文件)
What does `lambda: class(class, class, ...)` syntax mean? (Twisted Python document)
我想使用 Twisted python 实现 Telnet 服务器。根据 Twisted documentation,我在下面编写了代码并且它工作正常。但我有两个问题。
首先,我无法理解 lambda
语法在这段代码中的确切含义以及这三个 class 是如何使用 lambda 相互关联的。
其次,我需要使用self.transport.getPeer()
来获取客户端的IP地址。但是 HistoricRecvLine
class 中没有类似于 transport
属性的内容。 (self.transport
是 ServerProtocol
属性之一。)
我真的需要使用 recvline
来管理终端,还需要使用 transport
属性。但我不知道如何使用它们。
你推荐什么?
from twisted.application import internet
from twisted.conch import recvline
from twisted.conch.insults import insults
from twisted.conch.telnet import TelnetTransport, TelnetBootstrapProtocol
from twisted.internet import protocol
class DemoRecvLine(recvline.HistoricRecvLine):
def lineReceived(self, line):
print(line)
if line.decode() == "quit":
self.terminal.loseConnection()
self.terminal.write(line)
self.terminal.nextLine()
self.terminal.write(self.ps[self.pn])
#print(self.transport.getPeer().host)
f = protocol.ServerFactory()
f.protocol = lambda: TelnetTransport(TelnetBootstrapProtocol,insults.ServerProtocol, DemoRecvLine)
PORT = 6023
from twisted.internet import reactor
reactor.listenTCP(PORT, f)
reactor.run()
I can not understand what lambda syntax exactly mean in this code
它正在定义一个没有名字的函数。就好像你写了
def noname():
return TelnetTransport(TelnetBootstrapProtocol,insults.ServerProtocol, DemoRecvLine)
f.protocol = noname
即创建带有一些参数的 TelnetTransport
对象的函数。
how those three classes are related to each other using lambda
TelnetTransport
对象将为每个 类 创建一定数量的实例,大概不止一个。
我想使用 Twisted python 实现 Telnet 服务器。根据 Twisted documentation,我在下面编写了代码并且它工作正常。但我有两个问题。
首先,我无法理解 lambda
语法在这段代码中的确切含义以及这三个 class 是如何使用 lambda 相互关联的。
其次,我需要使用self.transport.getPeer()
来获取客户端的IP地址。但是 HistoricRecvLine
class 中没有类似于 transport
属性的内容。 (self.transport
是 ServerProtocol
属性之一。)
我真的需要使用 recvline
来管理终端,还需要使用 transport
属性。但我不知道如何使用它们。
你推荐什么?
from twisted.application import internet
from twisted.conch import recvline
from twisted.conch.insults import insults
from twisted.conch.telnet import TelnetTransport, TelnetBootstrapProtocol
from twisted.internet import protocol
class DemoRecvLine(recvline.HistoricRecvLine):
def lineReceived(self, line):
print(line)
if line.decode() == "quit":
self.terminal.loseConnection()
self.terminal.write(line)
self.terminal.nextLine()
self.terminal.write(self.ps[self.pn])
#print(self.transport.getPeer().host)
f = protocol.ServerFactory()
f.protocol = lambda: TelnetTransport(TelnetBootstrapProtocol,insults.ServerProtocol, DemoRecvLine)
PORT = 6023
from twisted.internet import reactor
reactor.listenTCP(PORT, f)
reactor.run()
I can not understand what lambda syntax exactly mean in this code
它正在定义一个没有名字的函数。就好像你写了
def noname():
return TelnetTransport(TelnetBootstrapProtocol,insults.ServerProtocol, DemoRecvLine)
f.protocol = noname
即创建带有一些参数的 TelnetTransport
对象的函数。
how those three classes are related to each other using lambda
TelnetTransport
对象将为每个 类 创建一定数量的实例,大概不止一个。