Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

**kwargs vs 10 arguments in a python function?

I am starting out with python and trying to construct an XML request for an ebay web service:

Now, my question is:

Say, this is my function:

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)

Where, keyword is the only required field. So, how should I construct the method? The ways can be:

  1. Create an object, pass it to the func(object) : The java way
  2. Pass all the arguments: func(a=val1, b=val2, c=val3, d=val4 etc)
  3. Use **kwargs and trust the person who calls the function, that he passes the right keys with the values, because I will use the keys to actually construct the XML tags.

Update:

All the xml tags you see in the request are needed to be passed by the user. But keywords should be passed and others maybe passed if required.

Any suggestions?

like image 932
zengr Avatar asked Jun 03 '11 06:06

zengr


1 Answers

A good idea is to put all the parameters with appropriate defaults (or just None defaults) in the function signature. Yeah, it will require a little more typing in the function itself, but the interface will be clean, self-documented and simple to use, as you won't have to look up possible parameters in ebay docs or function source. It will save you time later on.

like image 92
letitbee Avatar answered Oct 04 '22 22:10

letitbee