2016-12-03 67 views
-2

我想了解函数是如何工作的并且有一个基本问题。我想弄清楚如何在函数中设置一个变量,但不知道如何。或许更容易为我展示我的代码:基本帮助理解Python函数

我有一些代码,通过它定义为解压文件

fh = open(fn, 'rb') 
z = zipfile.ZipFile(fh) 
for name in z.namelist(): 
    z.extract(name, outpath) 
fh.close() 

我可以把这个变成一个功能:

def extract_zip(): 
    fh = open(fn, 'rb') 
    z = zipfile.ZipFile(fh) 
    for name in z.namelist(): 
     z.extract(name, outpath) 
    fh.close() 

而且那么我可以打电话给它:

extract_zip() 

但是把它放入函数的目的是我可以使用它并且 再次。但是当我第二次或第三次使用它时,变量名称将不是'fn',而是稍后定义的另一个变量名称。

我怎么能写这个功能,但是可以定义“FN”作为一个变量,然后再通过键入

extract_zip(2nd_filename) 

感谢

+0

您需要为函数'def extract_zip(fn):'定义一个参数,其中'fn'是您传递给该函数的文件名。然后,您可以按照您的描述使用它,例如'extract_zip('my_file.zip')' – AChampion

+0

下面的评论说我可能想尝试一个数组...除了试验和错误,stackoverflow的例子,问题和我们的朋友Google几小时外,我没有任何资源。我在这里有我的Python书,但功能部分不是以我认为适用于我的特定需求或可以理解的方式编写的。 –

+0

你读过[The Tutorial](https://docs.python.org/3/tutorial/controlflow.html#defining-functions)并练习了这些例子吗? – wwii

回答

2

称之为这是puting fn为你的函数

的论点一样简单
def extract_zip(fn): 
    fh = open(fn, 'rb') 
    z = zipfile.ZipFile(fh) 
    for name in z.namelist(): 
     z.extract(name, outpath) 
    fh.close() 

有时,你可能还需要使用默认名称

def extract_zip(fn="default_name.extension"): 
    #... 

此外,请注意您的文件名可以是完整的文件名,这意味着它可以包含要读取的文件的路径。例如,如果你的项目布局

your_working_direcory/ 
    your_script.py 
    folder1/ 
     folder2/ 
      file_to_read.extension 

你必须确定你想读的

yourFullFileName = os.path.join(
         os.path.dirname(__file__),# __file__ is the full name of your working script, 
         'folder1', 
         'folder2', 
         'file_to_read.extension' 
        ) 

确保你的脚本的便携性文件的全名(你不这样做主要是担心操作系统相关的分隔符)。那么你可以使用你的函数像这样

extract_zip(fn=yourFullFileName) 
0
def extract_zip(name_of_file): 
    fh = open(name_of_file, 'rb') 
    z = zipfile.ZipFile(fh) 
    for name in z.namelist(): 
     z.extract(name, outpath) 
    fh.close() 

以上,您可以设置文件的名称为name_of_file='my filename'

+0

我很困惑,我很抱歉,这是一个基本问题。 fn在前面定义为文件名。但是,如果fn是另一个.zip,那么我想再次提取文件。我仍然想跟踪原始的fn名称。因此,在一种情况下,我可能需要extract_zip(fn),但在另一种情况下,我可能需要extract_zip(2nd)或extract_zip(3rd)。同时在提取个别文件名时跟踪它们。 –

0

为了能够重复使用的功能,你已经把这些变量因素的论点的功能,如:

def extract_zip(filename, outpath): 
    with zipfile.ZipFile(filename) as z: 
     z.extractall(outpath) 
     return z.namelist() 

return回报ALLS归档对象的名称,以便您可以跟踪中提取的项目的。

files = {} 
files[(filename, outpath)] = extract_zip('my.zip', 'output')