Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多功能参数?_Python_Function_Variables_Parameters - Fatal编程技术网

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聊天室。在使用它之后,我找到了它。非常感谢!