मैं वर्तमान में "बटन" को दो अलग-अलग पैरामीटर के रूप में कुछ फ़ंक्शन में पास करता हूं, जैसे:

button1 = {"title": "foo", "url": "bar" /.../ }
button2 = {"title": "foo", "url": "bar" /.../ }
somefunction(id, text, button1, button2)

def somefunction(recipient_id, message_text, button1, button2):
    data = json.dumps({
        "recipient": {
            "id": recipient_id
        },
        "message": {
            "attachment": {
                "type": "template",
                "payload": {
                    "template_type": "button",
                    "text" : message_text,
                    "buttons" : [
                        {
                            "type" : button1["type"],
                            "url" : button1["url"],
                            "title" : button1["title"]
                        },
                        {
                            "type" : button2["type"],
                            "title" : button2["title"],
                            "payload" : button2["payload"]
                        }
                    ]
                }
            }
        }
    })

मैं किसी समारोह में json.dumps को फिर से कैसे लिख सकता हूं ताकि मैं नीचे दिए गए एक पैरामीटर के रूप में बटन भेज सकूं? अर्थात। मैं 'बटन' के माध्यम से कैसे पुनरावृति कर सकता हूं और सही जेसन-डंप को पार्स कर सकता हूं?

buttons = {
   {"title": "foo", "url": "bar" /.../ },
   {"title": "foo", "url": "bar" /.../ }
}
somefunction(id, text, buttons)
0
Joseph 26 जून 2016, 12:41
buttons के लिए बाहरी कोष्ठक के रूप में [] का प्रयोग करें।
 – 
Klaus D.
26 जून 2016, 12:47

2 जवाब

आप 'बटन' की सूची वाला JSON भेज सकते हैं:

{
   "buttons" :
   [
      {"title": "foo", "url": "bar" /.../ },
      {"title": "foo", "url": "bar" /.../ }
   ]
}

और फिर इसे somefunction में पार्स करें

0
Gal Dreiman 26 जून 2016, 13:01

आप इसे प्राप्त करने के लिए कीवर्ड-तर्क अनपॅकिंग के साथ-साथ कीवर्ड-केवल तर्कों का उपयोग कर सकते हैं (केवल तभी काम करता है जब आप पायथन 3 का उपयोग कर रहे हों):

import json
def somefunction(recipient_id, message_text, *, button1, button2):
    return json.dumps({
        "recipient": {
            "id": recipient_id
        },
        "message": {
            "attachment": {
                "type": "template",
                "payload": {
                    "template_type": "button",
                    "text" : message_text,
                    "buttons" : [
                        {
                            "type" : button1["type"],
                            "url" : button1["url"],
                            "title" : button1["title"]
                        },
                        {
                            "type" : button2["type"],
                            "title" : button2["title"],
                            "payload" : button2["payload"]
                        }
                    ]
                }
            }
        }
    })

buttons = {
    'button1' : {"title": "foo", "url": "bar", "type": "baz" },
    'button2' : {"title": "foo", "url": "bar", "type": "type2", "payload": "aLOT"}
}

x = somefunction("ID", "text", **buttons)

सूचना मैंने अपने डिबगिंग उद्देश्यों के लिए json.dumps को वापस करने के लिए आपके फ़ंक्शन को बदल दिया है।

इन निर्माणों के लिए प्रलेखन यहाँ देखें:

https://www.python.org/dev/peps/pep-3102/ https://docs.python.org/3.5/tutorial/controlflow.html#unpacking-argument-lists

0
juanpa.arrivillaga 26 जून 2016, 13:17