关于返回表达式

2024-09-29 17:15:32 发布

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

等级:初级

以下代码将打印“False”

def function(x):
    if len(x) == 5: return True
    else: return x[0] == x[-1]

print function('annb')

为什么“else:return x[0]==x[-1]”行打印为False? 我确实明白发生了什么,但是我很难用简单的英语来表达……这种行为怎么描述呢?在

这是一种常用的“技巧”吗?在

我第一次遇到这种特殊的语法时,试图解决一个回文练习递归。似乎使递归有效的唯一方法是使用这种速记方法:

^{pr2}$

谢谢 爸爸


Tags: 方法代码falsetrue技巧lenreturnif
3条回答

你的行为很混乱。负数组索引相对于数组的结尾,因此在您的示例中,x[-1]=='b'。显然不等于x[0]='a',因此函数返回False。在

对不起,我不太清楚你的意思,但请这样想:

return (x[0] == x[-1])

如果你只考虑括号内的内容,你就会意识到,“语句”等于布尔值,对吗?所以你也可以:

^{pr2}$

所以基本上,这里返回的是一个布尔值,它表示x[0]是否等于[-1]。在

我们可以更明确地把这句话扩展成这样:

if x[0] == x[-1]: # if this is true
    return True # then return true
else:
    return False

但正如您所看到的,条件和您想要返回的值都是相同的,所以您只需像您看到的那样简写地执行:

return x[0] == x[-1]

对不起,如果我误解了你的问题。在

编辑:如果在Python中引用负索引(x[-1]),那么负索引基本上是“环绕”的,因此x[0]是从“左到右”的第一个元素,x[-1]会循环,这样它就是从“从右到左”的第一个元素。在

总的来说,你的职能是: 如果x的长度等于5,则返回True 否则,如果字符串的最后一个字符等于第一个字符,则返回True, 否则返回False

这种条件else condition…else return False最好用or语句表示,只有当所有条件都为False并返回第一个not False元素的值时,该语句才会返回False。另一种选择是对任何序列做基本相同的任何函数。在这里测试原始if语句的所有分支的这些备选方案:

def function(x):
    if len(x) == 5: return True
    else: return x[0] == x[-1]

def funcor(x):
    return (len(x)==5) or (x[0] == x[-1])

def funcany(x):
    return any((len(x)==5, x[0] == x[-1]))

def funcverbal(sequence):
    ## sequence[0] is the first element of zero based indexed sequence
    ## endswith is string specific function so sequence must be string
    ## if it's length is not 5
    return len(sequence)==5 or sequence.endswith(sequence[0])

## function is normal data type in Python, so we can pass it in as variable
def test(func):
    print('Testing %s function' % func)
    for value in ('12345','annb','ansa','23424242',('1','2','1'), 123, '131'):
        try:
            print ("%r -> %r" % (value,func(value)))
        except:
            print ("Failed to call function with " + repr(value))

    print(10 * '-'+'Finished testing '+str(func) + 10 * '-')

for thisfunction in (function, funcor, funcany, funcverbal):
    test(thisfunction)

(功能突出显示为蓝色保留字,但在本网站的突出显示例程中出现错误)

对于isPalndrome函数,长度条件不是任意的,但是需要识别原始大小写来停止递归,对于'anna',回文函数会:

看看“anna”的长度是否小于2(1或0),不,它们不是 将“a”与“a”进行比较,继续,因为它们是相同的 删除比较过的第一个和最后一个字母,用“nn”打电话给ispaldrome

看看“nn”的长度是否小于2(1或0),不,它们不是 比较“n”和“n”,继续,因为它们是相同的 删除比较过的第一个和最后一个字母,并用“”呼叫ispaldrome

查看“”的长度是否小于2(1或0),是。返回True,因为我们找到回文。在

这里是回文组测试的替代短函数,基于回文反转与回文组相同的事实。在

^{pr2}$

相关问题 更多 >

    热门问题