gpt4 book ai didi

python - 在设置关键字参数的默认值时可以引用位置参数吗?

转载 作者:行者123 更新时间:2023-12-01 06:27:53 24 4
gpt4 key购买 nike

我正在编写一个辅助Python函数,它接受两个列表作为参数并迭代它们。通常,第二个列表需要是与第一个列表长度相同的零数组。我想将第二个列表设置为关键字参数并为其指定默认值。

def iterate(list_a, list_b = np.zeros((len(list_a),), dtype=int)):
for a, b in zip(list_a, list_b):
# do something with a and b

但是,我收到一个错误,提示 list_a 未定义,这表明我在定义函数时无法在括号中执行自引用计算。一个明显的解决方案是为 list_b 选择一个特殊的默认值,如果在调用函数时保持不变,则使用 if 语句将其更改为零列表:

def iterate(list_a, list_b = 'zeros'):

if list_b == 'zeros':
list_b = np.zeros((len(list_a),), dtype=int)

for a, b in zip(list_a, list_b):
# do something with a and b

这个解决方案对我来说似乎不太Pythonic,我想知道是否有更好的实践来实现它。

我故意保持笼统,但如果需要,我可以提供有关我的函数功能的更多详细信息。

最佳答案

不,这是不可能的,但是你基本上已经用通常的方式解决了这个问题。通常在这种情况下,人们会将默认值设置为 None 并执行相同的操作(只是因为这对于键入和因此 linting 来说不太奇怪 - 该函数接受数组或不接受任何内容,而不是数组或一个字符串。)

就可用性而言,您可以告诉用户默认值在文档脚本中有效执行的操作。

def iterate(list_a, list_b=None):
'list_b defaults to zero array of size a'
if not list_b:
list_b = np.zeros((len(list_a),), dtype=int)

for a, b in zip(list_a, list_b):
# do something with a and b

不可能的原因是,当您在同一行中调用 list_a 变量时,它尚未创建,因为 python 解释器是逐行执行的。

关于python - 在设置关键字参数的默认值时可以引用位置参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60038413/

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