python方法原型设计的更好实践

2024-05-23 18:09:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须提供一个pythonsdk,现在我在如何设计该方法的问题上左右为难。在

只是说,函数名是funcfunc必须接受大约10个参数。我知道我们可以这样定义函数:

def func(para0, para1, para2, para3, para4, para5, para6, para7, para8, para9)

或者

^{pr2}$

并且obj_param被设计为一个类实例,其中包含 para0~para9。在

那么哪种是Python的方式?或者两者都可以?在

基于@deceze的问题,我添加了一些限制:para0~para9名字是字面意思(不能改成其他名字),而{}~param6是必需的,左边是可选的。在


Tags: 方法函数参数定义def名字funcpythonsdk
3条回答

你几乎没有选择。
你可以使用

def foo(my_list):  # pass a list as an argument and iterate over elements
    pass

或者

^{pr2}$

或者

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')

在我看来,这取决于参数和你想用它们做什么。在

例如,假设您的函数需要10个参数来创建和保存一个包含10个字段的模型,那么正确的方法应该是例如:

def func(**kwargs):
    model = Model(**kwargs)
    model.save()

假设第一个参数实际上是模型的类,那么它将是:

^{pr2}$

现在假设所有参数都是模型的实例,并且您希望返回一些组合,那么最合理的逻辑是:

def func(*args):
    average = 0
    for inst in *args:
        average += inst.value
    return average

现在假设参数是构建请求的参数,而函数的目的是返回请求的散列值(例如,在没有适当的身份验证系统的情况下粗略地标识用户),那么分离关注点将使在函数之外构建请求对象成为逻辑,并使函数只返回散列,这样您就可以从代码的其他部分构建请求,从而可以拥有不同种类的请求对象。则函数如下:

def func(request):
    ...

您可以使用kwargs来提取字典的参数。我发现这比定义一个对象更好

def func(**kwargs)

相关问题 更多 >