多功能参数?

时间:2017-01-23 00:04:48

标签: 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")  

我收到错误:TypeError: sendMessage() takes 2 positional arguments but 5 were given

据我所知,在函数中,它受到(s, message)的限制,但我想知道是否还有这个?我将在整个程序中多次使用此函数,每次使用的变量数量都不同,因此我无法为函数设置特定限制。

3 个答案:

答案 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”)