Python无法识别函数的参数数量

2024-04-20 09:19:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我今天在运行Python 2.7中的脚本时遇到了一个奇怪的行为:

代码1:

def pprint_compare_titles (self, ts_numbers = [1], **kwargs ) :
    temp = self.compare_titles ( ts_numbers, **kwargs )
    length = [ len( max( temp[0].keys(), key = len ) ) ]
    def temp_fun ( x, i ) :
        try :
            return self.ts[ts_numbers[i]].titles[x[0]]
        except IndexError :
            return ''
    for i in range( 0, len( temp ) ) :
        length.append( temp_fun( max( temp[i].values(),
            key = lambda x : len( temp_fun( x, i ) ) ) ) )
    for k in temp[0].keys() :
        print( '| {t: <{l}} |'.format( t = k, l = length[0] )
        + ''.join([ ' {t: <{l}} |'.format(
            t = temp_fun( temp[i][k], i ),
            l = length[i+1] )
            for i in range( 0, len(temp) ) ]) )

输出:

     45         for i in range( 0, len( temp ) ) :
     46             length.append( temp_fun( max( temp[i].values(),
---> 47                 key = lambda x : len( temp_fun( x, i ) ) ) ) )
     48         for k in temp[0].keys() :
     49             print( '| {t: <{l}} |'.format( t = k, l = length[0] )

TypeError: temp_fun() takes exactly 2 arguments (1 given)

代码2:

def pprint_compare_titles (self, ts_numbers = [1], **kwargs ) :
    temp = self.compare_titles ( ts_numbers, **kwargs )
    length = [ len( max( temp[0].keys(), key = len ) ) ]
    def temp_fun ( x, i ) :
        try :
            return self.ts[ts_numbers[i]].titles[x[0]]
        except IndexError :
            return ''
    for i in range( 0, len( temp ) ) :
        length.append( temp_fun( max( temp[i].values(),
            key = lambda x : len( temp_fun( x, i, 42 ) ) ) ) )
    for k in temp[0].keys() :
        print( '| {t: <{l}} |'.format( t = k, l = length[0] )
        + ''.join([ ' {t: <{l}} |'.format(
            t = temp_fun( temp[i][k], i ),
            l = length[i+1] )
            for i in range( 0, len(temp) ) ]) )

输出:

     45         for i in range( 0, len( temp ) ) :
     46             length.append( temp_fun( max( temp[i].values(),
---> 47                 key = lambda x : len( temp_fun( x, i, 42 ) ) ) ) )
     48         for k in temp[0].keys() :
     49             print( '| {t: <{l}} |'.format( t = k, l = length[0] )

TypeError: temp_fun() takes exactly 2 arguments (3 given)

这两个块之间的唯一区别是我给temp_fun的参数数量。第二个输出是合理的,但是我不能理解第一个输出的行为,因为Python在第二个输出上识别3个参数

如果有人知道发生了什么事,我很乐意接受


Tags: keyinselfformatforlenrangekeys
1条回答
网友
1楼 · 发布于 2024-04-20 09:19:23

看起来该错误实际上发生在该错误之前的行上:

    length.append( temp_fun( max( temp[i].values(),
                  #^^^^^^^^ here
        key = lambda x : len( temp_fun( x, i ) ) ) ) )

len调用中的temp_fun具有正确的参数数,但append调用中的temp_fun没有

相关问题 更多 >