Python 多功能参数?
我有以下功能:Python 多功能参数?,python,function,variables,parameters,Python,Function,Variables,Parameters,我有以下功能: def sendMessage(s, message): messageTemp = "PRIVMSG #" + CHANNEL + " :" + message s.send((messageTemp + "\r\n").encode()) 我可以使用此功能向twitch服务器中的聊天室输出一条消息,但当我想输出一条包含变量的消息时,如下所示: sendMessage(s, var1, "message1", var2, "message2") 我得到一
def sendMessage(s, message):
messageTemp = "PRIVMSG #" + CHANNEL + " :" + message
s.send((messageTemp + "\r\n").encode())
我可以使用此功能向twitch服务器中的聊天室输出一条消息,但当我想输出一条包含变量的消息时,如下所示:
sendMessage(s, var1, "message1", var2, "message2")
我得到一个错误:TypeError:sendMessage()接受2个位置参数,但给出了5个
我知道在函数中,它受到
(s,message)
的限制,但我想知道这是否有什么原因?在整个程序中,我将多次使用此函数,每次使用的变量量都会有所不同,因此我无法为该函数设置特定的限制。如果确实希望以这种方式使用sendMessage()
函数,请更改该函数的定义,以允许无限数量的参数。解释了如何做到这一点。如果要用空格分隔消息的各个部分,可以使用
def sendMessage(s, *args):
messageTemp = "PRIVMSG #" + CHANNEL + " :"
for msg in args:
messageTemp = messageTemp + " " + str(msg)
s.send((messageTemp + "\r\n").encode())
这将消息的各个部分的字符串表示形式组合为一个字符串。这还允许您对消息的各个部分使用各种类型,只要每种类型都有合适的字符串表示。在将字符串传递到函数之前,您可以连接/插入/格式化字符串:
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())
那么您提供的示例调用将起作用!作为奖励,另一种方法仍然有效。您可以添加“kwargs”作为参数,它代表关键字参数。然后,该函数可以接受任何数量的要传递给它的键值对。例如:
def发送消息(消息,**kwargs)
sendMessage(s,message,var1=“message1”,var2=“message2”)你为什么不把
var1
,“message1”
,var2
,和“message2”
串接成一个字符串并传递给我?你能解释一下吗?一般来说,我不熟悉python/编码。如果我试着这样运行它:sendMessage,“var1 message1 var2 message2”,它不会将var1和var2视为变量。简单地说:您向定义的函数发送了错误数量的参数。请参阅教程。我这样做了,它工作正常,我在IDE中得到了正确的结果,但它不会像我的其他命令一样将其输出到twitch聊天室。在使用它之后,我找到了它。非常感谢!