** kwargs与python函数中的10个参数?

时间:2011-06-03 06:05:33

标签: python ebay

我开始使用python并尝试为ebay web service构建XML请求:

现在,我的问题是:

说,这是我的功能:

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. 创建一个对象,将其传递给func(对象):java方式
  2. 传递所有参数:func(a = val1,b = val2,c = val3,d = val4等)
  3. 使用** kwargs并信任调用该函数的人,他使用值传递正确的键,因为我将使用键来实际构造XML标记。
  4. 更新

    您在请求中看到的所有xml标记都需要由用户传递。但是关键字应该传递,其他人可以在需要时传递。

    有什么建议吗?

3 个答案:

答案 0 :(得分:7)

一个好主意是在函数签名中放入具有适当默认值(或仅None默认值)的所有参数。是的,它需要在函数本身中输入更多内容,但界面将是干净的,自我记录的并且易于使用,因为您不必在ebay文档或函数源中查找可能的参数。它会节省你的时间。

答案 1 :(得分: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()

答案 2 :(得分:0)

我会为所有人使用命名参数。通过这样做,很容易分配默认值,并强制用户提供所需的参数(通过省略默认值)