关于python中函数以及全局变量的问题
在使用python写递归函数时,想要使用函数外部的一个变量
而且在函数内会一直改变这个变量
应该如何定义这个变量
使用了global貌似也不行
下面贴上我的代码以及报的错
代码:
import os
global cur_dir
cur_dir = os.getcwd()
def delete(dir):
list = os.listdir(dir)
for i in range(len(list)):
if os.path.isdir(cur_dir+"\\"+list[i]) == Ture:
if os.listdir(cur_dir+"\\"+list[i]) == []:
os.rmdir(cur_dir+"\\"+list[i])
else:
cur_dir = cur_dir+"\\"+list[i]
delete(cur_dir)
c_dir = os.getcwd()
delete(c_dir)
print("删除成功")
input("按任意键退出")
下面是报的错
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\新建文件夹\del.py", line 20, in <module>
delete(c_dir)
File "C:\Users\Administrator\Desktop\新建文件夹\del.py", line 13, in delete
if os.path.isdir(cur_dir+"\\"+list[i]) == Ture:
UnboundLocalError: local variable 'cur_dir' referenced before assignment
求各位高手帮忙解答
[解决办法]
代码有两个问题:
1. 全局变量名称必须全部大写
2. 第8行“Ture”拼错了,应该是“True”
import os
global CUR_DIR
CUR_DIR = os.getcwd()
def delete(dir):
list = os.listdir(dir)
for i in range(len(list)):
if os.path.isdir(CUR_DIR+"\\"+list[i]) == True:
if os.listdir(CUR_DIR+"\\"+list[i]) == []:
os.rmdir(CUR_DIR+"\\"+list[i])
else:
cur_dir = CUR_DIR+"\\"+list[i]
delete(CUR_DIR)
c_dir = os.getcwd()
delete(c_dir)
print("删除成功")
input("按任意键退出")
[解决办法]
global cur_dir应放到函数中。
def delete(dir):
global cur_dir
....
另外,rmdir是很危险的操作,调试程序时建议用print代替它。
dir,list都是python内置的函数名,最好避免用它做自己的变量名。
用os.join(dirname, filename)代替dirname+'\\'+filename,可以自动适应操作系统的不同。
用for item in itemlist, 不用for i in range(len(itemlist))...
cur_dir的作用可以通过参数实现,不需要全局变量。
最后,python有os.walk函数帮助实现遍历文件系统。
# coding=utf-8
import os
def delete_empty_dir(dirname):
filelist = os.listdir(dirname)
for entry in filelist:
next_entry = os.path.join(dirname, entry)
if os.path.isdir(next_entry): # 不需要 ==True
if os.listdir(next_entry) == []:
print "delete:", next_entry
else:
delete_empty_dir(next_entry)
c_dir = os.getcwd()
printdir(c_dir)
print u"删除成功"
input(u"按任意键退出")
[解决办法]
python支持对列表(以及其他可遍历的结构)直接循环,不用对下标循环,再在循环体中用下标取元素。看你的学习资料的关于循环的部分,应该讲这个了。
[解决办法]
关于for循环:
例子中的list可以换成任何可iterable的结构。
>>> list = ['a', 'b', 'c', 'd']
>>> for item in list:
... print(item)
...
a
b
c
d
>>>