Að stilla sjálfgefna frumbreytu í Python fallaskilgreiningu veldur því að sjálfgefið gildi er notað ef röksemdinni er sleppt meðan á fallkalli stendur.
Eftirfarandi smáatriðum er lýst hér að neðan.
- Stilla sjálfgefin rök
- Takmarkanir á stöðu sjálfgefnar röksemda
- Athugaðu að þegar listi eða orðabók er notuð sem sjálfgefið gildi
Stilla sjálfgefin rök
Ef nafn viðfangs = sjálfgefið gildi í fallskilgreiningunni, verður sjálfgefið gildi notað þegar samsvarandi viðfangsefni er sleppt.
def func_default(arg1, arg2='default_x', arg3='default_y'): print(arg1) print(arg2) print(arg3) func_default('a') # a # default_x # default_y func_default('a', 'b') # a # b # default_y func_default('a', arg3='c') # a # default_x # c
Takmarkanir á stöðu sjálfgefnar röksemda
Að setja sjálfgefin rök fyrir venjulegan rökstuðning (rafbrigði sem ekkert sjálfgefið gildi er tilgreint fyrir) þegar fall er skilgreint leiðir til villu.SyntaxError
# def func_default_error(arg2='default_a', arg3='default_b', arg1): # print(arg1) # print(arg2) # SyntaxError: non-default argument follows default argument
Athugaðu að þegar listi eða orðabók er notuð sem sjálfgefið gildi
Ef uppfæranlegur (breytanleg) hlutur eins og listi eða orðabók er tilgreindur sem sjálfgefið gildi, verður sá hlutur búinn til þegar aðgerðin er skilgreind. Síðan, þegar fallið er kallað án samsvarandi röksemda, er sami hluturinn notaður.
Sjálfgefin rökgildi eru metin frá vinstri til hægri þegar fallskilgreiningin er keyrð. Þetta þýðir að sjálfgefna tjáningin er aðeins metin einu sinni þegar fallið er skilgreint og sama „reiknaða“ gildi er notað fyrir hvert símtal.
8.7. Function definitions — Python 3.10.2 Documentation
Þannig, til dæmis, ef fall er skilgreint sem tekur lista eða orðabók sem sjálfgefin rök og bætir þáttum við það, og er kallað margsinnis án þeirrar röksemdar, verður þáttum bætt við sama hlutinn ítrekað.
Dæmi um skráningu.
def func_default_list(l=[0, 1, 2], v=3): l.append(v) print(l) func_default_list([0, 0, 0], 100) # [0, 0, 0, 100] func_default_list() # [0, 1, 2, 3] func_default_list() # [0, 1, 2, 3, 3] func_default_list() # [0, 1, 2, 3, 3, 3]
Dæmi fyrir orðabók.
def func_default_dict(d={'default': 0}, k='new', v=100): d[k] = v print(d) func_default_dict() # {'default': 0, 'new': 100} func_default_dict(k='new2', v=200) # {'default': 0, 'new': 100, 'new2': 200}
Nýr hlutur er búinn til í hvert sinn sem fallið er kallað.
def func_default_list_none(l=None, v=3): if l is None: l = [0, 1, 2] l.append(v) print(l) func_default_list_none() # [0, 1, 2, 3] func_default_list_none() # [0, 1, 2, 3]