在python中使用两种不同类型的参数调用函数
我是Python新手。我遇到了一个奇怪的案例,但我不知道问题出在哪里。我有两个用Python编写的函数版本:- v1- 和v2-在python中使用两种不同类型的参数调用函数,python,python-2.7,ironpython,Python,Python 2.7,Ironpython,我是Python新手。我遇到了一个奇怪的案例,但我不知道问题出在哪里。我有两个用Python编写的函数版本:- v1- 和v2- def fileLookUp(fixedPath, version): if version: print "ok" else: print "not ok" #some more code follows 其中,参数fixedPath是输入的字符串,参数版本应为整数值。第一个功能(v1)无法按预期工作,而tje第二
def fileLookUp(fixedPath, version):
if version:
print "ok"
else:
print "not ok"
#some more code follows
其中,参数fixedPath是输入的字符串,参数版本应为整数值。第一个功能(v1)无法按预期工作,而tje第二个功能工作正常。调用函数的两次时间均为fileLookUp(“c:\\dir\\dir\\”,1)
在第一种情况下,收到的错误为:-
fileLookUp("D:\\Celine\\assetSERV\\", 1)
Exception: fileLookUp() takes exactly 2 arguments (1 given)
请让我知道为什么第一个函数抛出异常
这是实际的代码
from System.IO import *;
def fileLookUp(fixedPath, version):
if version:
targetFile="c:\\null\\patchedFile.txt";
else:
targetFile="c:\\null\\vulFile.txt";
vulFileHandle=open(targetFile,"a+");
temp=fixedPath;
if not Directory.GetDirectories(fixedPath):
files=Directory.GetFiles(fixedPath);
for eachFile in files:
print eachFile;
hash = Tools.MD5(eachFile);
print hash;
vulFileHandle.write(eachFile+'\t'+hash+'\n');
else:
directory=Directory.GetDirectories(fixedPath);
for folder in directory:
if vulFileHandle.closed:
vulFileHandle=open(targetFile,"a+");
fixedPath="";
fixedPath+=folder;
fixedPath+="\\";
vulFileHandle.close();
fileLookUp(fixedPath);
filess=Directory.GetFiles(temp);
for eachFilee in filess:
if vulFileHandle.closed:
vulFileHandle=open(targetFile,"a+");
print eachFilee;
hashh = Tools.MD5(eachFilee);
print hashh;
vulFileHandle.write(eachFilee+'\t'+hashh+'\n');
if not vulFileHandle.closed:
vulFileHandle.close();
打印出目录中所有文件的哈希值只是一个递归代码。按照编写这些函数的方式,必须使用两个参数调用它们。您收到的错误消息表明仅使用一个参数调用其中一个参数。在Python中,如果希望使参数成为可选的,则必须显式地说明如果未提供可选参数,则该可选参数应具有的值。例如,由于
version
是一个int
,如果version:,您可以使用测试它,因此一个好的默认值可以是0。您也可以使用None
def fileLookUp(fixedPath, version=0):
# etc.
def fileLookUp(fixedPath, version=None):
# etc.
如果0是一个有效的版本号,并且您想要测试某个值是否实际通过,请使用第二个值并针对None
进行测试,具体如下:
def fileLookUp(fixedPath, version=None):
if version is None:
# etc.
按照编写这些函数的方式,必须使用两个参数调用它们。您收到的错误消息表明仅使用一个参数调用其中一个参数。在Python中,如果希望使参数成为可选的,则必须显式地说明如果未提供可选参数,则该可选参数应具有的值。例如,由于version
是一个int
,如果version:
,您可以使用测试它,因此一个好的默认值可以是0。您也可以使用None
def fileLookUp(fixedPath, version=0):
# etc.
def fileLookUp(fixedPath, version=None):
# etc.
如果0是一个有效的版本号,并且您想要测试某个值是否实际通过,请使用第二个值并针对None
进行测试,具体如下:
def fileLookUp(fixedPath, version=None):
if version is None:
# etc.
在第26行左右有一个调用“fileLookUp(fixedPath);”(只是粗略计算),只发送了一个参数。你的定义不允许这样。在此调用中发送版本,或在定义中为版本提供默认值。在第26行左右(仅粗略计算)有一个调用“fileLookUp(fixedPath);”,只发送了一个参数。你的定义不允许这样。在此调用中发送版本,或在定义中为版本提供默认值。在(格式非常糟糕)的完整示例中,您对文件查找进行递归调用,但不传递版本
参数。在(格式非常糟糕)的完整示例中,您正在对fileLookUp
进行递归调用,但未传递version
参数。请修复代码格式。您的变体将失败,出现IndentationError
。我想没有缩进错误,因为我已经使用Notepad++对其进行了编码。所以我很确定缩进是必要的。所以制表符的格式和空格不一样。我已经编辑过了,只是在等待同行的审查如果有任何缩进错误,应该像@AlexeyKachayev所说的那样报告缩进错误,但事实并非如此。请向我们展示实际调用这些函数并引发错误的代码,以及完整的stacktrace。这是一个很好的做法,张贴一个演示您的问题。请修复代码格式。您的变体将失败,出现IndentationError
。我想没有缩进错误,因为我已经使用Notepad++对其进行了编码。所以我很确定缩进是必要的。所以制表符的格式和空格不一样。我已经编辑过了,只是在等待同行的审查如果有任何缩进错误,应该像@AlexeyKachayev所说的那样报告缩进错误,但事实并非如此。请向我们展示实际调用这些函数并引发错误的代码,以及完整的stacktrace。发表一篇文章来说明你的问题是一种很好的做法,但我的第二个论点并不是完全可以选择的。这两个参数都是必须的。那么,这样说吧。:-)但我的第二个论点并不是完全可以选择的。这两个参数都是必须的。那么,这样说吧。:-)哦好的,好的。。我真傻。。。异常的来源是递归调用。谢谢你。。。好的,好的。。我真傻。。。异常的来源是递归调用。谢谢