2011-08-01 11 views
3

名前付き引数の1つに加えて名前のない引数を任意の数だけ使用できるPython関数を書きたいと思います(デフォルト)。例えばPythonの名前付きデフォルトで任意の数の引数を持つ

、私はこの

def myFunc(*args, optDefault=1): 

のようなものを書きたい。しかし、これは単なる構文エラーを示します。これに相当する方法はありますか?

答えて

2

(私はhereから借りる) 、あなたがthisを使用いけないが、できます。

+0

アサート(kwargs)は良いイディオムではありません;) – GaretJax

+0

ガートジャックス:それは味の問題だと思います:-)関数としてではありませんか?ヤク! –

+1

そのようなものは、 'AssertionError'ではなく' TypeError'となるはずです。そして、はい、 'not kwargs'はもっと慣用的です(多形性はここではあまり重要ではありませんが、' type(kwarg)is dict'と仮定するとかなり節約できます)。 – delnan

1

何について:

def myFunc(optDefault=1, *args): 
+1

ありがとうございます!しかし、私はそれを呼び出す方法を知らない。 myFunc(optDefault = 3,1,2)とmyFunc(1,2、optDefault = 3)はどちらもエラーを出します。 – highBandWidth

+0

@highBandWidth myFunc(3,1,2)はどうですか? – Shaokan

+2

@Shaokan:あなたの提案は、キーワードargsを持つことのポイント(highBandWidthのためにあるかもしれませんが)を打ち負かします... –

-2

理由の例では、どのようなきれいな未

def myFunc(*args, **kwargs): 
    optDefault = kwargs.pop('optDefault', 1) 
    assert kwargs == {}, "There may only be one keyword argument to myFunc" 
について

import optparse 

if __name__=="__main__": 
    parser = optparse.OptionParser("usage: %prog [options] arg1 arg2") 
    parser.add_option("-H", "--host", dest="hostname", 
         default="127.0.0.1", type="string", 
         help="specify hostname to run on") 
    parser.add_option("-p", "--port", dest="portnum", default=80, 
         type="int", help="port number to run on") 

    (options, args) = parser.parse_args() 
    if len(args) != 2: 
     parser.error("incorrect number of arguments") 
    hostname = options.hostname 
    portnum = options.portnum 
+1

optparse [非推奨](http://docs.python.org/library/optparse.html)別の使用方法(コマンド行オプションの解析)を意図していました。 – Paolo

関連する問題