gpt4 book ai didi

python - 无法理解该函数中的关键逗号

转载 作者:行者123 更新时间:2023-12-01 01:13:49 25 4
gpt4 key购买 nike

我有两个关于回溯方法的问题。所以我正在寻找一个可以生成 n 的函数以所有合法方式添加括号。

def gen_par(p, left, right, parens=[]):
if left:
gen_par(p + '(', left - 1, right)
if right > left:
gen_par(p + ')', left, right - 1)
if not right:
parens += p,
return parens


print(gen_par('', 2, 2))
# >>> ['(())', '()()']

我注意到有一行 parens += p,,最后正在做一些非常重要的事情,但我不明白为什么。

如果我认为,关闭,我会得到这个:

print(gen_par('', 2, 2))
# >>> ['(', '(', ')', ')', '(', ')', '(', ')']

另外,我不明白为什么参数中要写parens=[],如果我把它移到body中:

def gen_par(p, left, right):
parens = []
if left:
gen_par(p + '(', left - 1, right)
if right > left:
gen_par(p + ')', left, right - 1)
if not right:
parens += p,
return parens

这行不通。

所以两个问题是:

  1. 那个,的作用是什么?
  2. 为什么参数区需要加括号?

谢谢

最佳答案

问题的第一部分已经得到解答——逗号是创建元组的东西,而不是括号。需要注意的是,请参阅我的一个问题:Why do tuples need parantheses in list comprehension

问题的第二部分非常简单:在第二个代码中,您将 parens 视为局部变量,该变量在每次迭代中都会重置,并且函数最后返回一个空列表。您可以将其视为全局变量以获得与第一个代码等效的结果,如下所示:

parens = []

def gen_par(p, left, right):
global parens
if left:
gen_par(p + '(', left - 1, right)
if right > left:
gen_par(p + ')', left, right - 1)
if not right:
parens += p,
return parens

print(gen_par('', 2, 2))
# Returns ['(())', '()()'] correctly.

关于python - 无法理解该函数中的关键逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54577667/

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