3

python2.7では、argparseモジュールにadd_argumentメソッドがあり、以下に示すように、キーワード引数の前に可変数の名前のない引数を取ることができます。

parser = argparse.ArgumentParser(description='D')
parser.add_argument('-a', '-b', ... '-n', action='store', ... <other keyword args>)

私の知る限り、次のような関数定義は機能しません。

def fxn(var_args*, action, otherstuff):
def fxn(action, otherstuff, var_args*): # results in conflict on action

add_argument動作をエミュレートするための適切な手段は何ですか?

4

2 に答える 2

3

Pythonの引数定義の順序は...

  1. 必須および/またはデフォルト値の引数(存在する場合)
  2. 可変長位置引数プレースホルダー(*<name>必要な場合)
  3. キーワード引数プレースホルダー(**<name>必要な場合)

位置引数プレースホルダーはリストを取得し、キーワード引数プレースホルダーは辞書を取得します。

add_arguments宣言で可能なすべての引数を綴るのではなく、単にキーワード引数のdictでキーを探します。の線に沿った何か...

def add_arguments(*posargs, **kwargs):
    if 'action' in kwargs:
        # do something
于 2010-12-15T03:07:46.857 に答える
2

関数には任意の数の引数を渡すことができます。

これが例です

def f(x, *args, **kwargs):
    print x
    for arg in args:
        print arg
    for key, value in kwargs:
        print key + ': ' + value

これを読むと役立ちます:http://docs.python.org/tutorial/controlflow.html#keyword-arguments

于 2010-12-15T03:02:04.923 に答える