0

複数の引数を取ることができるモジュールをPythonで作成しています。メソッドの定義に引数を渡すための最良の方法は何でしょうか?

def abc(arg):
    ..。

abc({"host": "10.1.0.100"、 "protocol": "http"})
def abc(host、protocol):
    ..。

abc( "10.1.0.100"、 "http")
def abc(** kwargs):
    ..。

abc(host = "10.1.0.100"、protocol = "http")

または、他の何か?

編集

私は実際にそれらの引数(ユーザー名、パスワード、プロトコル、ホスト、パスワード2)を持っていますが、それらはどれも必要ありません。

4

3 に答える 3

2
def abc(host, protocol):
    ...

abc("10.1.0.100", "http")
abc(host="10.1.0.100", protocol="http")

位置引数またはキーワード引数を使用して呼び出すかどうかは、引数の数と、いずれかをスキップするかどうかによって異なります。あなたの例では、キーワードargsを使用して関数を呼び出すことはあまり使用されていません。


ここで、他のソリューションが悪い理由がいくつかあります。

abc({"host" : "10.1.0.100", "protocol" : "http"})

これは、実際のキーワード引数(通常はJavaScript)がない言語で一般的に使用されるキーワード引数の回避策です。それらの言語ではそれは素晴らしいですが、Pythonではそれからまったく何も得られないのでそれは間違っています。dictからargsを使用して関数を呼び出したい場合は、abc(**{...})とにかくいつでも実行できます。

def abc(**kwargs):

人々は、関数が多くの(おそらく任意の)引数を受け入れることを期待しています。それに加えて、彼らはどの引数が可能/必須であるかを理解しておらず、あなたは自分で特定の引数を要求するコードを書かなければならないでしょう。

于 2012-04-23T18:01:53.470 に答える
0

すべての引数が事前にわかっている場合は、明示的な引数リストを使用します。オプションで、などのデフォルト値を使用しますdef abc(arg1="hello", arg2="world",...)。これにより、コードが最も読みやすくなります。

関数を呼び出すときは、またはのいずれかを使用できabd("hello", "world")ますabc(arg1="hello", arg2="world")。引数が4つまたは5つを超える場合は、長い形式を使用します。これは好みの問題です。

于 2012-04-23T18:03:13.377 に答える
0

これは、実際には、メソッドのコンテキスト、設計、および目的によって異なります。

パラメータが定義されており、必須である場合、最適なオプションは次のとおりです。

def abc(host, protocol):
    ...

abc('10.1.0.100', 'http')

パラメータが定義されているがオプションの場合、次のようになります。

def abc(host=None, protocol=None): # I used None, but put a default value
    ...

abc('10.1.0.100', 'http')あなたはそれを彼らの名前としてまたはそれらの名前で徹底的な位置的議論と呼ぶことができますabc(protocol='http')

また、最初に受け取る引数が何であるかがわからない場合(たとえば、文字列の書式設定)、最良のオプションは**kwargs引数を使用することです。

def abc(**kwargs):
    ...

このように、名前付き引数を使用して呼び出す必要があります。

于 2012-04-23T18:10:22.233 に答える