【问题标题】:Multiple Function Parameters? [duplicate]多个函数参数? [复制]
【发布时间】:2017-01-23 00:04:47
【问题描述】:

我有这个功能:

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) 的限制,但我想知道这是否有任何问题?我将在整个程序中多次使用此函数,每次使用的变量数量都会有所不同,因此我无法为函数设置特定限制。

【问题讨论】:

  • 你为什么不把var1"message1"var2"message2"连接成一个字符串并传递呢?
  • 你能解释一下吗?一般来说,我是 python/编码的新手。如果我尝试像这样运行它:sendMessage(s, "var1 message1 var2 message2),它不会将 var1 和 var2 视为变量。
  • 简而言之:您向定义的函数发送了错误数量的参数。请看教程。

标签: python function variables parameters


【解决方案1】:

在将字符串传递给函数之前,您可以连接/插入/格式化字符串:

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())

那么您提供的示例调用将起作用!作为奖励,另一种方式仍然有效。

【讨论】:

  • 我这样做了,它工作正常,我在 IDE 中得到了正确的结果,但它不像我的其他命令那样将它输出到 twitch 聊天中
  • 玩过之后我想通了。非常感谢!
【解决方案2】:

如果您真的想以这种方式使用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())

这会将消息的各个部分的字符串表示形式组合成一个字符串。这也允许您对消息的各个部分使用各种类型,只要每种类型都有合适的字符串表示。

【讨论】:

    【解决方案3】:

    您可以添加“kwargs”作为参数,它代表关键字参数。然后该函数可以接受您想要传递给它的任意数量的键值对。例如:

    def sendMessage(s, message, **kwargs)

    sendMessage(s, message, var1="message1", var2="message2")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 2015-03-28
      • 2012-07-30
      • 2012-11-18
      • 2020-11-20
      • 2015-01-21
      • 2018-11-28
      相关资源
      最近更新 更多