我有这个功能:
def sendMessage(s, message):
messageTemp = "PRIVMSG #" + CHANNEL + " :" + message
s.send((messageTemp + "\r\n").encode())
我可以使用此功能在twitch服务器中向聊天输出单个消息,但是当我想输出包含变量的消息时,如下所示:
sendMessage(s, var1, "message1", var2, "message2")
我收到错误:TypeError: sendMessage() takes 2 positional arguments but 5 were given
。
据我所知,在函数中,它受到(s, message)
的限制,但我想知道是否还有这个?我将在整个程序中多次使用此函数,每次使用的变量数量都不同,因此我无法为函数设置特定限制。
答案 0 :(得分:2)
您可以在将字符串传递给函数之前连接/插入/格式化字符串:
sendMessage(s, var1 + " message1 " + var2 + " message2")
sendMessage(s, "%s message1 %s message2" % (var1, var2))
或者你可以像print()
那样接受可变数量的参数,将第二个到第n个包装成一个元组,然后在你的函数中处理你想要的那个。如:
def sendMessage(s, *message):
messageTemp = "PRIVMSG #" + CHANNEL + " :" + " ".join(map(str, message))
s.send((messageTemp + "\r\n").encode())
然后你提供的示例电话就可以了!作为奖励,另一种方式仍然有效。
答案 1 :(得分:0)
如果您真的想以这种方式使用sendMessage()
函数,请更改函数的定义以允许无限数量的参数。 This part of the Python tutorial解释了如何做到这一点。如果您想用空格分隔邮件的各个部分,可以使用
def sendMessage(s, *args):
messageTemp = "PRIVMSG #" + CHANNEL + " :"
for msg in args:
messageTemp = messageTemp + " " + str(msg)
s.send((messageTemp + "\r\n").encode())
这会将邮件各个部分的字符串表示形式组合成一个字符串。这也允许您为消息的各个部分使用各种类型,只要每种类型都有合适的字符串表示。
答案 2 :(得分:0)
您可以添加“kwargs”作为参数,它代表关键字参数。然后,该函数可以接受您想要传递给它的任意数量的键值对。例如:
def sendMessage(s,message,** kwargs)
sendMessage(s,message,var1 =“message1”,var2 =“message2”)