gpt4 book ai didi

python - 最佳实践 : handle functions with lots of parameters and reserved names

转载 作者:行者123 更新时间:2023-11-28 22:46:51 24 4
gpt4 key购买 nike

我正在研究 python client for the api uwsgi.it 和我发现有必要编写接受大量(可选)参数的方法,这些参数将通过 http 请求发送。

最初我想声明用户可以插入哪些参数,因为它们太多了,我认为这样更容易,也更安全,让用户有一个列表作为参数,而不是让他自由地在字典中插入任何东西,我最终得到了这样的结果:

def alarms(self, container=None, _class=None, color=None,
vassal=None, level=None, line=None, filename=None,
func=None, with_total=None, range=None):
params = {k: v for k, v in locals().iteritems() if k != 'self' and v}
if '_class' in params:
params['class'] = params['_class']
del params['_class']
return self.get('alarms', params)

但它非常丑陋,我真的不喜欢这种处理“_class”参数的方式。因此,我想到的另一种可能性是接受可以包含任何内容(或 **kwargs)的字典,在文档字符串中列出接受的键,然后清理输入。一种可能的方法是声明一个只接受允许的参数的“私有(private)”方法。但是随后又出现了同样的问题!有什么建议吗?有这么多参数的方法有什么最佳实践吗?

最佳答案

我同意使用 **kwargs 是个好主意,您可以使用集合轻松清理它的键。我使用的是 Python 2.6,所以我没有设置理解,但我的代码应该很容易翻译成更现代的版本。

FWIW,实际上我昨晚深夜发布了这个程序的一个版本,但后来我决定它应该对错误的参数做些什么,所以我暂时删除了它。这是修改后的版本。

validate_params.py

#! /usr/bin/env python

''' Validate the keys in kwargs

Test keys against a container (set, tuple, list) of good keys,
supplying a value of None for missing keys

Also, if a key ends with an underscore, strip it.

Written by PM 2Ring 2014.11.15

From
http://stackoverflow.com/questions/26945235/best-practice-handle-functions-with-lots-of-parameters-and-reserved-names

'''

import sys

def test(**kwargs):
good_keys = ("container", "class_", "color",
"vassal", "level", "line", "filename",
"func", "with_total", "range")
new_kwargs = validate_keys(kwargs, good_keys)
for t in new_kwargs.items():
print "%-12s : %r" % t


#def alarms(**kwargs):
#good_keys = ("container", "class_", "color",
#"vassal", "level", "line", "filename",
#"func", "with_total", "range")
#return self.get('alarms', validate_keys(kwargs, good_keys))


def validate_keys(kwargs, good_keys):
good_keys = set(good_keys)
bad_keys = set(kwargs.keys()) - good_keys
if bad_keys:
bad_keys = ', '.join(bad_keys)
print >>sys.stderr, "Unknown parameters: %s\n" % bad_keys
raise KeyError, bad_keys

new_kwargs = {}
for k in good_keys:
new_kwargs[k.rstrip('_')] = kwargs.get(k, None)
return new_kwargs


test(color="red", class_="top",
#bar=1, foo=3, #Some bad keys
level=2, func="copy",filename="text.txt")

输出

container    : None
with_total : None
level : 2
color : 'red'
filename : 'text.txt'
vassal : None
range : None
func : 'copy'
line : None
class : 'top'

关于python - 最佳实践 : handle functions with lots of parameters and reserved names,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26945235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com