名前付き引数の1つに加えて名前のない引数を任意の数だけ使用できるPython関数を書きたいと思います(デフォルト)。例えばPythonの名前付きデフォルトで任意の数の引数を持つ
、私はこの
def myFunc(*args, optDefault=1):
のようなものを書きたい。しかし、これは単なる構文エラーを示します。これに相当する方法はありますか?
名前付き引数の1つに加えて名前のない引数を任意の数だけ使用できるPython関数を書きたいと思います(デフォルト)。例えばPythonの名前付きデフォルトで任意の数の引数を持つ
、私はこの
def myFunc(*args, optDefault=1):
のようなものを書きたい。しかし、これは単なる構文エラーを示します。これに相当する方法はありますか?
何について:
def myFunc(optDefault=1, *args):
ありがとうございます!しかし、私はそれを呼び出す方法を知らない。 myFunc(optDefault = 3,1,2)とmyFunc(1,2、optDefault = 3)はどちらもエラーを出します。 – highBandWidth
@highBandWidth myFunc(3,1,2)はどうですか? – Shaokan
@Shaokan:あなたの提案は、キーワードargsを持つことのポイント(highBandWidthのためにあるかもしれませんが)を打ち負かします... –
理由の例では、どのようなきれいな未
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
optparse [非推奨](http://docs.python.org/library/optparse.html)別の使用方法(コマンド行オプションの解析)を意図していました。 – Paolo
アサート(kwargs)は良いイディオムではありません;) – GaretJax
ガートジャックス:それは味の問題だと思います:-)関数としてではありませんか?ヤク! –
そのようなものは、 'AssertionError'ではなく' TypeError'となるはずです。そして、はい、 'not kwargs'はもっと慣用的です(多形性はここではあまり重要ではありませんが、' type(kwarg)is dict'と仮定するとかなり節約できます)。 – delnan