用return语句调用self函数是有效的…但是为什么呢?

2024-04-18 23:52:12 发布

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

我正试着了解Python,因为在过去,Python只真正用Java编写过代码。我需要一些帮助,了解一些代码,如果有人可以帮助,或指向一个好的(简单的)资源方向我请?你知道吗

我用Python的一些伪代码编写了一个二进制排序,它可以工作,但我不明白如何工作。如果下面的代码行中没有return语句,那么函数对我来说是有意义的:

return findData( data, criteria, first, mid -1 ) 

或者,如果我设置一个while循环,并根据需要引用的列表的一半修改start或end索引变量。你知道吗

但是对于这段代码,我不明白函数返回到哪里,或者如果我删除它们,为什么代码会失败??返回-1作为no match和'mid'来引用匹配的列表位置是有意义的,但是首先和最后传递数据、条件的return语句应该会导致语法错误,因为没有调用这样的函数?你知道吗

提前感谢任何能解释我的作品的人。我的代码在下面。你知道吗

D先生

# Binary Search

def findData( data, criteria, first, last ):

    if( last < first ):
        return -1

    else:
        mid = ( last + first ) // 2

        if( criteria == data[mid] ):
            return mid

        elif ( criteria > data[mid] ):
            print( "Currently looking at", data[mid], "in array poition", mid )
            return findData( data, criteria, mid +1, last )

        elif( criteria < data[mid] ):
            print( "Currently looking at", data[mid], "in array poition", mid )
            return findData( data, criteria, first, mid -1 )


Data = [15, 21, 29, 32, 37, 40, 42, 43, 48, 50, 60, 64, 77, 81, 90, 98]
Criteria = 98
Location = -1

Location = findData( Data, Criteria, 0, len( Data ) -1 )

if( Location < 0 ):
    print( Criteria, "is not located in the array." )
else:        
    print( Criteria, "is located in array position ", Location )

Tags: 函数代码indatareturniflocationarray
2条回答
return -1

这意味着计算表达式-1,并将结果作为此函数的结果返回。你知道吗

return mid + 1

这意味着计算表达式mid + 1,并将结果作为此函数的结果返回。你知道吗

return findData( data, criteria, first, mid -1 ) 

这意味着对表达式findData( data, criteria, first, mid -1 )求值,这也意味着用求值的参数调用函数findData,并将结果作为该函数的结果返回。这不会返回函数。你可以这样把它分开:

Location = findData( data, criteria, first, mid -1 ) 
return Location

这完全一样。第一行就是你调用函数的第一步。你知道吗

现在,如果你调用一个函数而不使用它的返回值,它就是死代码。想象一下这个代码:

def test(n):
  somefun(n)

test(5) # ==> None

现在,如果您返回了somefun的结果,那么test将是somefun的别名。你知道吗

如果要返回函数,则不能使用parens和参数应用它:

return findData    # returns a fucntion by name
return lambda v: v # return a lambda function

当然了。递归函数没有魔力。与所有调用函数的函数一样,它等待它返回以恢复自己的执行。调用的函数恰好是相同的事实其实并不重要。绑定参数和局部变量对于每个调用都是局部的,因此它们不会泄漏,并且每个调用都返回到上一个调用。没有魔法。每次提供相同功能的可能是不同的功能。你知道吗

这是一个递归函数,因此要使解决方案收敛到您的解决方案(如果它确实存在于列表中,否则该函数返回-1),它需要不断地使用当前的datacriteriafirst(自从第一次调用findData()以来,这些都没有改变)及其新值last调用自己。last的新值在递归函数内部不断更新为mid+1mid-1,直到criteria==data[mid],此时criteria的索引返回为mid,并设置为变量Location。你知道吗

相关问题 更多 >