我必须提供一个python sdk,现在我应该如何设计该方法陷入两难境地。
只是说,函数名称是func
,func
必须接受大约10个参数。我知道我们可以这样定义函数:
def func(para0, para1, para2, para3, para4, para5, para6, para7, para8, para9)
或
def func(obj_param)
并且obj_param
被设计为包含的类实例
para0
〜para9
。
然后哪个是pythonic方式?或两者都可以吗?
根据@ deceze的问题,我添加了一些限制:para0
〜para9
名称字面意思(不能更改为其他名称),para0
〜{{1必须是强制性的,左边是可选的。
答案 0 :(得分:3)
您可以使用kwargs
代替并提取字典的参数。我觉得它比定义一个对象更好的解决方案
def func(**kwargs)
答案 1 :(得分:1)
您的选择很少 你可以使用
def foo(my_list): # pass a list as an argument and iterate over elements
pass
或
def bar(*args): # pass only arguments
pass
# example
bar("text1", "text2", 2, 3)
或
def foobar(**kwargs): # pass keyword arguments
for key in kwargs:
print(key, str(kwargs[key])) # will print key and value
# example
>>foobar(name="My name" surname="my last name", age=24, weight=80)
('name', 'My name')
('surname', 'my last name')
('age', '24')
('weight', '80')
答案 2 :(得分:1)
在我看来,这取决于参数以及你想用它们做什么。
例如,假设您的函数需要10个参数来创建和保存包含10个字段的模型,那么正确的方法就是:
def func(**kwargs):
model = Model(**kwargs)
model.save()
然后让我们想象第一个参数实际上是模型的类,那么它将是:
def func(Class, **kwargs):
model = Class(**kwargs)
model.save()
现在想象所有参数都是模型的实例,并且你想要返回一些组合,那么最多的逻辑就是:
def func(*args):
average = 0
for inst in *args:
average += inst.value
return average
现在假设参数是构建请求的参数,并且您的函数的目的是返回请求的哈希值(例如,粗略地识别没有适当身份验证系统的用户),然后分离关注点使得在函数外部构建请求对象是合乎逻辑的,并使函数只返回散列,以便您可以从代码的其他部分构建请求,以便您可以拥有不同类型的请求对象。那么函数就像:
def func(request):
...