gpt4 book ai didi

python - 如何删除此参数处理代码的重复项?

转载 作者:行者123 更新时间:2023-12-02 11:44:52 24 4
gpt4 key购买 nike

我有以下代码来从脚本中的命令行设置 y 和 x 轴限制,该脚本最终调用 matplotlib (这里,ax 是一个 matplotlib axes 对象,但这并不重要,并且 p 是一个 ArgumentParser 实例):

p.add_argument('--ylim', help='Set the y axis limits explicitly (e.g., to cross at zero)', type=float, nargs='+')
p.add_argument('--xlim', help='Set the x axis limits explicitly', type=float, nargs='+')

# more stuff


if args.ylim:
if (len(args.ylim) == 1):
ax.set_ylim(args.ylim[0])
elif (len(args.ylim) == 2):
ax.set_ylim(args.ylim[0], args.ylim[1])
else:
sys.exit('provide one or two args to --ylim')

if args.xlim:
if (len(args.xlim) == 1):
ax.set_xlim(args.xlim[0])
elif (len(args.xlim) == 2):
ax.set_xlim(args.xlim[0], args.xlim[1])
else:
sys.exit('provide one or two args to --xlim')

如果你相信DRY这可能会让你眼睛发烫:这两个 block 是相同的,只是 xlim 替换了第二个 block 中的 ylim

如何重构它以删除重复项?我调用两次的某种限制设置函数似乎是显而易见的,但是我如何传递这样一个事实:我想在一种情况下调用 set_ylim ,在另一种情况下调用 set_xlim ,例如?

请注意,在不指定一个或两个 --*lim 参数的情况下调用脚本是完全有效的,并且其行为应与相应的 set_*lim 函数相同从未被调用(即,如上面的代码所示 - 尽管调用函数但具有与示例相同的效果也可以)。

最佳答案

函数是一流的对象。如果您编写 ax.set_ylim 而不调用它,您将获得对 set_ylim() 函数的引用,该函数绑定(bind)到 ax

def check(name, lim, setter) 
if not lim:
return

if (len(lim) == 1):
setter(lim[0])
elif (len(lim) == 2):
setter(lim[0], lim[1])
else:
sys.exit(f'provide one or two args to {name}')

check('--ylim', args.ylim, ax.set_ylim)
check('--xlim', args.xlim, ax.set_xlim)

关于python - 如何删除此参数处理代码的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59073720/

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