2016-08-12 3 views
1

以下のコードでは、num変数を関数内でglobalに設定する必要がありますが、folderまたはrename_prefixではなく、なぜこの変数を設定する必要がありますか?関数からglobalを削除すると、関数内でnumを使用することはできませんが、folderrename_prefixの変数は引き続き使用できますか?わかりません。誰かがグローバル変数とローカル変数の誤解を説明することができますか?おかげ一部の変数はグローバル化する必要があるのはなぜですか?

import os 

# User Input 
folder = r'F:\Pictures\2016\iPhone Pics\rename_test' 
rename_prefix = 'Renamed_' # ENTER WHAT YOU WANT PREFIX OF IMAGE TO BE 
num = 0 

def file_renamer(): 
    global num 
    for root, dir2, files in os.walk(folder): 
     print 'Renaming Files in {} \n'.format(root) 
     if len(dir2) > 0: 
      print 'Found the following sub folders {} \n'.format(dir2) 
     #print 'Found {} subfolders named {} and {}'.format(len(dir2),dir2[0],dir2[1]) 
     #num = 0 uncomment if you want each folder to start renaming files at 0 
     for x in files: 
      local_folder = os.path.join(folder, root) 
      old = os.path.join(local_folder, x) 
      #if x.startswith('IMG'): 

      if old.lower().endswith(('.jpg')): 

       print 'Renaming {0}'.format(x) 
       num2 = '{0}.jpg'.format(num) 
       rename_name = rename_prefix + num2 
       rename_path = os.path.join(local_folder, rename_prefix + num2) 
       os.rename(old, rename_path) 
       print 'Successfully renamed {0} to {1} \n'.format(x, rename_name) 
       num += 1 
      elif old.lower().endswith('.png'): 
       print 'Renaming {0}'.format(x) 
       num2 = '{0}.png'.format(num) 
       rename_name = rename_prefix + num2 
       rename_path = os.path.join(local_folder, rename_prefix + num2) 
       os.rename(old, rename_path) 
       print 'Successfully renamed {0} to {1} \n'.format(x, rename_name) 
       num += 1 

      elif old.lower().endswith('.mov'): 
       print 'Renaming {0}'.format(x) 
       num2 = '{0}.mov'.format(num) 
       rename_name = rename_prefix + num2 
       rename_path = os.path.join(local_folder, rename_prefix + num2) 
       os.rename(old, rename_path) 
       print 'Successfully renamed {0} to {1} \n'.format(x, rename_name) 
       num += 1 

      else: 
       print 'IDK what file type {0} is !!, skipping...'.format(x) 
       continue 
      #else: 
       #print '{} Does not meet renaming criteria, moving to next file'.format(x) 
       #continue 

    print 'Finished Renaming all files in {}'.format(folder) 


file_renamer()enter code here 
+1

'folder'や' rename_prefix'の値を決して変更しないためです。 –

+3

'' '' '' ''、 '' rename_prefix'''を変更しないので、 '' ''グローバル ''は必要ありません。しかし関数内で '' num''を更新しているので、 '' global''を使う必要があります。 –

答えて

1
x = 0 

def function_name(): 
    x = 2 


function_name() 

x #yields:0 

しかし、あなたが定義した場合:

def function_name(): 
    global x 
    x = 2 

を、あなたが使用する必要はありませんコメントの人々が指摘し、その理由として

function_name() 
x #yields 2 
2

を実行しますglobalfolderrename_prefixですが、numはthです前者を読んでいる間は後者を設定しています。

あなたは何が起こるでしょうがnumへの割り当てを作成し、グローバルnumをシャドウする新しいローカル変数numに割り当てるのではなく、実際には、すでに定義されたグローバルの値を設定するということであるグローバルnumを宣言しなかった場合numをご覧ください。

関連する問題