2017-05-17 15 views
2

私はresize(h, w)メソッドを定義したい、と私は2つの方法のいずれかでそれを呼び出すことができるようにしたい:前の引数に基づいてデフォルトの引数値を定義する方法は?

  1. resize(x,y)
  2. resize(x)

場合は、2番目の呼び出しでは、I yxと等しくなるようにします。私は、メソッド定義でこれを行うことができますか私はresize(x,y=None)ような何かをし、内部チェックする必要があります:

if y is None: 
    y = x 
+2

はい、あなたの 'なし'コードが好ましい方法です。 –

答えて

2

は、私は、メソッドの定義でこれを行うことができますメソッドの定義中に

番号がありませんがあります実行時にxの値がどのような値を持つかを知る方法です。既定の引数は定義時に1回評価されますが、yの動的値を保存する方法はありません。

または私はresize(x,y=None)ような何かをして正確に

の内側に確認する必要があります。これはPythonの共通のイディオムです。

+0

Thx!しかし、私は関数に、他の引数を渡して、_resize(x、y = argv [1])_のように、Cのメインと幾分似ています。 – CIsForCookies

+1

@CIsForCookiesあなたはそのようなことをすることができますが、メソッドが定義されている場合にのみ評価されます。呼び出しごとに再評価されることはありません。 –

2

Noneがパラメータ値として有効な場合は、可変長引数機能(位置指定および/またはキーワード)を使用できます。位置のための使用例:この例では

def resize(x,*args): 
    if args: 
     if len(args)>1: 
      raise Exception("Too many arguments") 
     y = args[0] 
    else: 
     y = x 

、あなたはxに合格する必要がありますが、あなたは0以上の余分な位置引数を渡すことができます。もちろん、手動でチェックする必要があり、yというキーワードが失われます。

関連する問題