为什么有些变量需要全局性而其他变量不需要?
问题描述:
在下面的代码中,为什么我必须将num
变量设置为global
而不是folder
或rename_prefix
?如果我从功能中删除global
,则num
不能用于功能,但folder
和rename_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
答
x = 0
def function_name():
x = 2
function_name()
x #yields:0
,但如果你定义:
def function_name():
global x
x = 2
然后执行
function_name()
x #yields 2
答
随着人们在评论中指出的,你不需要使用的原因global
为folder
和rename_prefix
,但你做为num
是th在你设置后者的时候,你只是在阅读前两篇文章。
如果你没有申报num
全球性的,会发生什么样的是,分配到num
将创建并分配到一个新的局部变量num
这将影着全球num
,而不是实际设置已定义的全局值正如你所期望的那样。
因为您永远不会更改'folder'或'rename_prefix'的值。 –
你不修改'''''''''','''''''''''''''''''''',所以你不需要'''全球'''。但是你在函数内更新'''num''',所以你需要使用'''global'''。 –