在函数内引用python变量

时间:2017-10-11 13:45:32

标签: python python-3.x

我有以下python代码来删除某个目录中文件的所有副本,只保留其中一个。

如果我在delete()函数中注释掉前四行,它可以正常工作但是如果我不注意它会给我一个错误,即在赋值之前引用局部变量list1。此外,我尝试使用一种名为global的东西,但它并没有帮助我,因为它给出的错误是NoneType。 请帮帮我,我只是Python的初级初学者。

list1 = []
list2 = []
def stripe(lis):
    for i in range(len(lis)):
        lis[0] = lis[0].strip()
def scan(pat):
    pat = os.path.abspath(pat)
    files = os.listdir(pat)
    for file in files:
        filepath = os.path.join(pat,file)
        if os.path.isfile(filepath):
            list1.append(file)
            list2.append('{0}'.format(filepath))
        elif os.path.isdir(filepath):
            scan(filepath)
def delete():
    list1_1 = stripe(list1)
    list2_1 = stripe(list2)
    list1 = list1_1
    list2 = list2_1
    length = len(list1)
    #length = length - 1
    i = 0
    while i < length:
        item = list1[0]
        a = list1[0]
        b = list2[0]
        del list1[0]
        del list2[0]
        if item in list1:
            try:
                os.remove(list2[list1.index(item)])
                #del list1[list1.index(item)]
                #del list2[list1.index(item)]
            except:
                print('sorry',list1[0],'could not be deleted',sep = ' ')
            print('wow')
        i += 1
        #list1.append(a)
        #list2.append(b)

1 个答案:

答案 0 :(得分:0)

global看起来对你来说是正确的选择,但如果你说它给出了错误,请先使用首先想到的方式。 list1和list2可以是delete()函数的参数。

这样的事情:

def delete(list1, list2):
    ...

def foo():
    list1 = []
    list2 = []
    ...
    delete(list1, list2)

另外,正如我所说,global始终是一种选择。这是一个简单的例子:

list = []

def foo():
    global list
    list.append(1234)

def foo2():
    global list
    print(list)

foo()
foo2()

输出:

[1234]