2011-06-03 17 views
5

मैं अजगर के साथ शुरू कर रहा हूँ और एक ebay web service के लिए एक XML अनुरोध का निर्माण करने की कोशिश कर रहा: अब** एक पाइथन समारोह में 10 तर्क बनाम kwargs?

, मेरे सवाल यह है:

def findBestMatchItemDetailsAcrossStores(): 
    request = """<?xml version="1.0" encoding="utf-8"?> 
    <findBestMatchItemDetailsAcrossStoresRequest xmlns="http://www.ebay.com/marketplace/search/v1/services"> 
    <siteResultsPerPage>50</siteResultsPerPage> 
    <entriesPerPage>50</entriesPerPage> 
    <ignoreFeatured>true</ignoreFeatured> 
    <keywords>ipod</keywords> <-----REQUIRED 
    <itemFilter> 
    <paramName>PriceMin</paramName> 
    <paramValue>50</paramValue> 
    <name>Currency</name> 
    <value>USD</value> 
    </itemFilter> 
    <itemFilter> 
    <paramName>PriceMax</paramName> 
    <paramValue>100</paramValue> 
    </itemFilter> 
    </findBestMatchItemDetailsAcrossStoresRequest>""" 
    return get_response(findBestMatchItemDetailsAcrossStores.__name__, request) 

कहाँ, कीवर्ड:

कहते हैं, यह मेरा कार्य है एकमात्र आवश्यक क्षेत्र है। तो, मुझे विधि कैसे बनाना चाहिए? तरीके हो सकते हैं:

  1. एक वस्तु बनाने के लिए, यह समारोह (वस्तु) को पारित: जावा तरीका
  2. पास सभी तर्कों: समारोह (एक = VAL1, ख = val2, ग = val3, घ = val4 आदि)
  3. ** kwargs का उपयोग करें और उस व्यक्ति पर भरोसा करें जो फ़ंक्शन को कॉल करता है, वह मानों के साथ दायां कुंजी पास करता है, क्योंकि मैं वास्तव में XML टैग बनाने के लिए कुंजी का उपयोग करूंगा।

अद्यतन:

सभी एक्सएमएल टैग आप अनुरोध में देखते हैं उपयोगकर्ता द्वारा पारित हो की आवश्यकता है। लेकिन कीवर्ड पारित किया जाना चाहिए और यदि आवश्यक हो तो अन्य शायद पास हो जाएं।

कोई सुझाव?

+0

अन्य कार्यों को बदलने में सक्षम होने की आवश्यकता क्या है? –

+0

उसे नहीं मिला। इन सभी क्षेत्रों में केवल इस समारोह के लिए स्थानीय हैं। – zengr

+0

दूसरे शब्दों में, फ्लाई पर प्रोग्राम को कौन से फ़ील्ड निर्दिष्ट करने की आवश्यकता है? –

उत्तर

7

एक अच्छा विचार समारोह हस्ताक्षर में उचित डिफ़ॉल्ट (या बस None चूक) के साथ सभी मापदंडों डाल करने के लिए है। हाँ, इसे फ़ंक्शन में थोड़ा और टाइपिंग की आवश्यकता होगी, लेकिन इंटरफ़ेस स्वच्छ, स्वयं-दस्तावेज और उपयोग करने में आसान होगा, क्योंकि आपको eBay दस्तावेज़ या फ़ंक्शन स्रोत में संभावित पैरामीटर देखना नहीं होगा। यह आपको बाद में समय बचाएगा।

+0

हाँ, मैं इस दृष्टिकोण के पक्ष में भी हूं, यानी दृष्टिकोण 2. – zengr

+1

सहमत हैं। '** kwargs' मुख्य रूप से उपयोगी होता है जब आप अगली बार नहीं जानते कि आप किस तर्क नाम की उम्मीद कर रहे हैं (देखें, उदाहरण के लिए, 'str.format')।यदि आप विशेष तर्क की अपेक्षा कर रहे हैं, तो उन्हें स्पष्ट रूप से निर्दिष्ट करना बेहतर है। – lvc

0

संदेश के रूप में संदेश को मॉडलिंग करने के बारे में कैसे?

class FindBestMatchItemDetailsAcrossStoresRequest: 
    def __init__(self,keywords): 
     self.keywords = keywords # required parameters in the constructor 
     # set up the default values....etc 
     self.siteResultsPerPage = 50 
     self.name = 'Currency' 


    def send(self): 
     # build message from self.xxx 
     return get_response() 


#usage 
req = FindBestMatchItemDetailsAcrossStoresRequest('ipod') 
response = req.send() 

#usage with optional args 

req.siteResultsPerPage = 150 
response = req.send() 
+0

डाउनवोट क्यों? – Johnsyweb

+0

मैं भी जानना चाहता हूं, यह मेरे लिए अच्छा लगता है। लेकिन मुझे पाइथोनिक तरीकों के बारे में पता नहीं है। – zengr

+0

संभवतः, आपका मतलब था 'req = FindBestMatchItemDetailsAcrossStoresRequest (' ipod ') '? – Johnsyweb

0

मैं सभी के लिए नामित पैरामीटर का उपयोग करूंगा। ऐसा करके डिफ़ॉल्ट मानों को असाइन करना बहुत आसान है, और उपयोगकर्ता को आवश्यक पैरामीटर (डिफ़ॉल्ट को छोड़कर) को आपूर्ति करने के लिए मजबूर करना

संबंधित मुद्दे