2017-01-23 148 views
-1

我具備的功能:多功能參數?

def sendMessage(s, message): 
    messageTemp = "PRIVMSG #" + CHANNEL + " :" + message 
    s.send((messageTemp + "\r\n").encode()) 

我可以輸出一個消息在抽搐服務器聊天使用此功能,但是當我想輸出有變量,它像這樣的消息:

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

我收到一個錯誤:TypeError: sendMessage() takes 2 positional arguments but 5 were given

我知道在這個函數中,它受到(s, message)的限制,但我想知道是否有這個問題呢?我將在整個程序中多次使用此函數,每次使用的變量數量都不相同,因此我無法爲該函數設置特定的限制。

+2

你爲什麼不正好連接'var1',''message1「','var2'和'」message2「'成一個字符串並傳遞? – blacksite

+0

你能解釋一下嗎?一般來說,我是python /編碼的新手。如果我試圖像這樣運行它:sendMessage(s,「var1 message1 var2 message2),它不會處理var1和var2類似的變量 – Tigel

+0

簡而言之:您發送的錯誤數量的參數給您定義的函數。一個教程 – TigerhawkT3

回答

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

然後您提供的示例調用將起作用!作爲獎勵,另一種方式仍然有效。

+0

我做到了這一點,它的工作原理和我在IDE中得到了正確的結果,但它不會像我的其他命令那樣將它輸出到抽搐式聊天 – Tigel

+0

玩過它之後,我想出了它。 – Tigel

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

這是你郵件的各個部分的字符串表示合併成一個字符串。這還允許您爲消息的各個部分使用各種類型,只要每種類型都具有合適的字符串表示形式即可。

0

您可以添加「kwargs」作爲參數,代表關鍵字參數。然後該函數可以接受任何您想要傳入的鍵值對。例如:

高清的sendMessage(S,消息,** kwargs)

的sendMessage(S,消息,VAR1 = 「MESSAGE1」,VAR2 = 「消息2」)