2011-08-11 15 views
2

私は関数の定義と呼び出しに没頭していますが、私がその概念を把握しているかどうかはわかりません。私は、XML文書を含むフォルダをループするPythonのif/else文を持っています。以下のスクリプトでは、if xmlfilename ==の条件のたびに再入力する必要があるコードブロックがあります。Pythonでの関数の定義と呼び出し

if element.tag ==から始まるブロックを関数として定義すると、各条件の後で呼び出すことができると私は考えていますif xmlfilename ==関数の定義方法を考え出したと思いますが、私はif xmlfilename ==の状態が発生した後にそれを呼び出すでしょう。誰でもこれを行う方法を提案することができますか、または関数の定義と使用の仕方については私の方法ですか?

if xmlfilename == "Soil": 

    if element.tag == "timeinfo": 
    tree = root.find(".//timeinfo") 
    tree.clear() 

    if SINGLEDATE == "'Single Date'": 

     child1 = ET.SubElement(tree, "sngdate") 
     child2 = ET.SubElement(child1, "caldate") 
     child3 = ET.SubElement(child1, "time") 


    if MULTIPLEDATES == "'Multiple Dates'":       

     parent = ET.SubElement(tree, "mdattim") 

     for x, y in enumerate(Date2.split(";")):       
      #print x, y 
      replaceMD = y.replace('/', '-') 

      if x == 0: 
       #print x, y 
       child1 = ET.SubElement(parent, "sngdate") 
       child2 = ET.SubElement(child1, "caldate") 
       child3 = ET.SubElement(child1, "time")    
       child2.text = replaceMD 
       child3.text = "unknown" 
      else: 
       child1 = ET.SubElement(parent, "sngdate") 
       child4 = ET.SubElement(child1, "caldate") 
       child4.text = replaceMD 

if xmlfilename == "Tree": 
    # Do the same thing as above starting at "if element.tag == "timeinfo":" 
+0

、私はそのようにタグ付けすることをお勧め;) –

答えて

2

機能が"Soil"のためにまったく同じであると"Tree"あなただけの次にif文を修正することができる場合:

if xmlfilename == "Soil" or xmlfilename == "Tree": 
    # The rest of your code 

あなたが整理する機能で、あなたのコードブロックを置くことを選択するかもしれないがあなたのコードは少し良くなります:

コードブロック内のいくつかの変数を1つのinvocいくつかのパラメータに基づいて別のものに変更する。たとえば:あなたは、Pythonに関する質問をする場合は

def read_xml_data(param): 
    if param == "value1": 
     # do one thing 
    elif param == "value2": 
     # do something else 
+0

あなたがあなたの最後の文を終了しませんでした:「機能のもう一つの良い使用は、コードを配置することです」.. 。 – Unapiedra

+0

ねえ、これはまさに私が探しているものです。実際のところ、2番目の例は、2つのファイルが同じ方法で処理される場所に役立ちます。余分なステップを取ってくれてありがとう) – Mike

+1

同じ方法でいくつかのファイルが処理されている場合は、 '' xmlfilename in( 'Soil'、 'Tree'、 'etc')という構文を使用することもできます: '' – Yony

関連する問題