在python中使用两种不同类型的参数调用函数

在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第二

我是Python新手。我遇到了一个奇怪的案例,但我不知道问题出在哪里。我有两个用Python编写的函数版本:-

v1-

和v2-

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。发表一篇文章来说明你的问题是一种很好的做法,但我的第二个论点并不是完全可以选择的。这两个参数都是必须的。那么,这样说吧。:-)但我的第二个论点并不是完全可以选择的。这两个参数都是必须的。那么,这样说吧。:-)哦好的,好的。。我真傻。。。异常的来源是递归调用。谢谢你。。。好的,好的。。我真傻。。。异常的来源是递归调用。谢谢