モジュールのレッスン (2/4)
デフォルトパラメータとキーワードパラメータ
関数パラメータには デフォルト値 を指定できます: 呼び出し元が渡さない場合 それらの場合は、デフォルトが使用されます。パラメータを渡して関数を呼び出すこともできます 名前 (キーワード引数)。
デフォルトパラメータ
def saluta(nome, saluto="Ciao"):
return f"{saluto}, {nome}!"
saluta("Ada") # 'Ciao, Ada!'
saluta("Ada", "Hello") # 'Hello, Ada!'デフォルト値を持つパラメータは、デフォルト値を持たないパラメータの後に来る必要があります:
def f(a, b=1): # OK
def f(a=1, b): # SyntaxErrorキーワード引数
引数を名前で任意の順序で渡すことができるため、呼び出しがより簡単になります。 読み取り可能:
def crea_utente(nome, eta, attivo=True):
return {"nome": nome, "eta": eta, "attivo": attivo}
crea_utente("Ada", 36)
crea_utente(nome="Ada", eta=36, attivo=False)
crea_utente(eta=36, nome="Ada") # any order when all are keyword黄金律: 呼び出しでは、位置引数はキーワード引数の前に置きます。
crea_utente("Ada", eta=36) # OK
crea_utente(nome="Ada", 36) # SyntaxError⚠️ 変更可能なデフォルトの落とし穴
絶対に可変オブジェクト (list、dict、set) をデフォルト値として使用しないでください。 デフォルトは、関数が定義されたときに 1 回評価され、関数間で共有されます。 すべての通話。
def aggiungi(elemento, lista=[]): # BUG!
lista.append(elemento)
return lista
aggiungi(1) # [1]
aggiungi(2) # [1, 2] !!! not [2] as you'd expect
aggiungi(3) # [1, 2, 3]正しいパターン: None をセンチネルとして使用し、内部に作成します。
def aggiungi(elemento, lista=None):
if lista is None:
lista = []
lista.append(elemento)
return lista変更可能なデフォルト引数の危険性
変更可能なオブジェクト (リストや辞書など) をパラメーターのデフォルト値として使用しないでください (例: def add(x, my_list=[]))。デフォルト値は関数の定義時に 1 回だけ評価されます。つまり、後続の呼び出しではまったく同じ可変オブジェクトが共有されることになります。ベスト プラクティスは、None を使用することです。
def add(x, my_list=None):
if my_list is None:
my_list = []
my_list.append(x)
return my_list試してみてください
** 底の指数を返す `power(base, exponent=2)` を定義します。 `square = power(5)` と `cube = power(5, exponent=3)` を計算します。 `(正方形、立方体)`を評価します。
ヒントを表示
基数 ** 指数を返します
3 回の試行後に解決策が利用可能になります
復習演習
値が None の場合に新しい空のリストを使用する `create_record(name,values=None)` を定義します。値に 1 を追加し、レコード dict {'name': name, 'values':values} を返します。値を渡さずに 2 回呼び出して、`a` と `b` に代入します。 `(a['values'], b['values'])` を評価します。
ヒントを表示
デフォルトとして None を使用し、関数内にリストを作成します。
3 回の試行後に解決策が利用可能になります
追加の課題
書式設定された文字列 \`"{message}, {name}!"\` を返す関数 \`greet(name, message="Hello")\` を定義します。最後の式として \`greet("Bob")\` を呼び出して関数をテストします。
ヒントを表示
返されるグリーティングには、デフォルト パラメータ message="Hello" と f-string を使用します。
3 回の試行後に解決策が利用可能になります