python 預設引數的遞迴呼叫

2021-09-11 18:32:04 字數 939 閱讀 5845

leetcode刷題時,看到一段**(第22題)

題目描述:

given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

for example, given n = 3, a solution set is:

[ "((()))",

"(()())",

"(())()",

"()(())",

"()()()"

]

class solution:

def generateparenthesis(self, n: int) -> list[str]:

def generate(p, left, right, parens=):

if left: generate(p + '(', left-1, right)

if right > left: generate(p + ')', left, right-1)

if not right:

parens += p,

return parens

return generate('', n, n)

這裡每次遞迴呼叫時傳入的實際上都是引數parens,而不是空的list。

解釋如下:

python函式在定義的時候,預設引數l的值就被計算出來了,即,因為預設引數l也是乙個變數,它指向物件,每次呼叫該函式,如果改變了l的內容,則下次呼叫時,預設引數的內容就變了,不再是函式定義時的了。

所以,定義預設引數要牢記一點:預設引數必須指向不變物件!

參考廖雪峰的官方**

「parens += p, 」 這一句,等價於 "parents+=[p] ".

python預設引數呼叫方法解析

最常見的一種形式是的是為乙個或者多個引數指定預設值,這會建立乙個可以使用比定義時允許的引數更少的引數呼叫的函式,def ask ok prompt,ret程式設計客棧ries 4,reminder please try again while true ok input prompt if ok i...

python 預設引數 Python預設引數有坑?

最近有小夥伴在面試中遇到了 關於函式預設引數的坑 的題目,少數夥伴對此問題理得不是太清楚,今天匯智妹請到匯智動力高階教師鄧老師為大家詳細講解一下,幫助不太清楚的小夥伴清晰的梳理一遍。鄧老師本次主要從以下三點來講解 什麼是預設引數?函式預設引數的坑是什麼?函式預設引數為什麼會有坑?一 什麼是預設引數 ...

python的預設引數 Python 預設引數的坑

話不多說,上 def fun x,a b c b b x print f a b c fun 1 fun 2 fun 3 我們在這段 中 定義了乙個位置引數 x,乙個乙個預設引數 a,a 的預設值為空列表,另乙個預設引數 b,b 的預設值為乙個空字串,在函式體中定義了乙個變數 c,並也給 c 傳遞了...