如何将元组传递给python函数

时间:2012-02-05 16:59:36

标签: python python-2.7

我一直在尝试将元组传递给我之前创建的函数,但是,我仍然无法使它工作。 我的目标是传递一个包含路径+文件格式列表的元组,我想要发现它的大小并打印出来。

这是我的代码

EXl = ('C:\\vd36e404.vdb','C:\\vd368c03.vdb')

def fileF(EXl):
    import os
    filesize = os.path.getsize(EXl)
    print (filesize);

fileF(EXl)

这些是错误:

Traceback (most recent call last):
  File "C:\Documents and Settings\Administrator\workspace\test1py\testcallMyF.py", line 13, in <module>
    fileF(EXl)
  File "C:\Documents and Settings\Administrator\workspace\test1py\testcallMyF.py", line 9, in fileF
    filesize= os.path.getsize(EXl)
  File "C:\Python27\lib\genericpath.py", line 49, in getsize
    return os.stat(filename).st_size
TypeError: coercing to Unicode: need string or buffer, tuple found

有人可以向我解释原因吗?(我使用的是Python 2.7.2)

3 个答案:

答案 0 :(得分:4)

您已成功将元组传递给您自己的函数。但是os.path.getsize()不接受元组,它只接受单个字符串。

此外,这个问题有点令人困惑,因为你的例子不是路径+文件元组,就像('C:\\', 'vd36e404.vdb')一样。

要处理类似的事情,你可以这样做:

import os

def fileF(EXl):
    filesize= os.path.getsize(EXl[0] + EXl[1])
    print (filesize);

如果要打印多个路径的值,请按Bing Hsu说明,并使用for循环。或者使用列表理解:

def fileF(EXl):
    filesizes = [os.path.getsize(x) for x in EXl]
    print filesizes

或者,如果您想要返回另一个元组:

def fileF(EXl):
    return tuple(os.path.getsize(x) for x in EXl)

答案 1 :(得分:3)

import   os

for xxx in EXl:
    filesize= os.path.getsize(xxx)
    print (filesize);

答案 2 :(得分:2)

一种更优雅的例子:

map(fileF, EX1)

这实际上将与EX1中的每个元素分别调用fileF。当然,这相当于

for element in EX1:
    fileF(element)

看起来更漂亮。