2017-06-12 19 views
0

私はPythonから始まり、関数を作成しようとしています。私が困っています 1は次のようになります。Python関数の複数の入力

#~ this function should make a directory only if it doesn't exist 
def make_dir(directoryname): 
    if not os.path.exists(directoryname): 
     return os.makedirs(directoryname) 
    else: 
     print "la carpeta %s ya existe" %(directoryname) 

私が知りたいのは何

def make_dir(a,b,c,d,r) #where a,b,c,d,r are directory names. 

とどのように私はそれを行うことができますように複数の入力を与えることが可能である場合です。

明らかな疑問があればお詫び申し上げます。

+1

これまでに何を試しましたか? –

+2

'* args'構文を使用してください。これはPythonに関数が可変量の引数を取ることができることを伝えます。 –

+2

か、リストにそれらを渡してから、単純なループを使用して – depperm

答えて

3

Pythonは、このための具体的な構文があります。それは一般に*argsと呼ばれます。 Pythonはこれを関数定義で認識すると、関数呼び出し側が関数に対してさまざまな引数を渡すことができます。

タプルである*args構文で使用される変数を使用して、引数にアクセスすることができます。あなたの場合は、単に引数をループしてそれに応じて処理することができます。

def make_dir(*dirs): 
    for directory in dirs: 
     if not os.path.exists(directory): 
      return os.makedirs(directory) 
     else: 
      print "la carpeta %s ya existe" %(directory) 

あなたが欲しい*argsものでargsに名前を付けることに注意することが重要です。私はそれをdirs(ディレクトリの略)と改名しました。そして、単にそれを*argsという名前にするのが一般的な習慣ですが、私の意見では、それぞれのケースに合わせて名前を変更するほうがはるかに優れています。そうすれば、関数が期待する引数の種類を明確に伝えることができます。

+0

を知ろうとします。元の投稿の関数に '*'を追加すればどうなりますか?悪いですか? – santimirandarp

+0

@サムミランダプOpps!私はちょうど私のコードが動作しないことに気づいた。代わりにforループを使用する必要があります。私の編集を参照してください。 –

+0

これは(私のunklowledgeに)はるかによく見えます。やってみます。 – santimirandarp

1

tupleまたはlistなどのシーケンスとして変数を渡します。または、可変長の引数をアンパックするには、スプラット演算子*を使用します。

すなわち

def foo(*args): 
    return args 

サンプル出力:

>>> foo(1, 2, 3) 
(1, 2, 3) 
0

あなたは* directorynamesと変数変数引数を使用し、機能にforループを使用することができます。

import os 

def make_dir(*directorynames): 
    for dir_ in directorynames: 
     if not os.path.exists(dir_): 
      return os.makedirs(dir_) 
     else: 
      print("la carpeta %s ya existe" %(dir_)) 

よろしく。

関連する問題