关于return语句的一些问题。。


import math def is_sqr(x): v=int(math.sqrt(x)) return x==v*v print filter(is_sqr, range(1, 101)) ...[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] ##################################################### import math def is_sqr(x): v=int(math.sqrt(x)) return x==v*v print filter(is_sqr, range(1, 101)) ...[]

这是利用filter()过滤出1~100中平方根是整数的函数,但是其中的语句 return x==v*v 是什么意思呢,是不是返回检验的意思呢。当注释掉该语句时,只是返回一个空list,这能说明什么呢?

阅读 3.8k
3 个回答

注意filter的第一个参数是一个函数is_sqr,第二个参数是你给定的list。

filter的操作就是:对给定list里的每一个项y执行is_sqr(y)函数,如果这个函数返回true,则将这个y添加到返回的列表里,如果返回false,则这个y不被添加到列表里。

这个函数is_sqr的作用就是判断其参数x是不是能够开平方得一个整数。

我把filter函数的实现写一下伪代码:

def filter(callback, vals):
    result = [];
    for i in vals:
        //注意这里:首先执行callback函数,相应的就是你传入的is_sqr,
        //将参数vals[i]也就是你传入的range(1, 101)里面的数代入函数中,
        //然后判断这个函数返回的是否是true。
        //如果is_sqr里没有return x = v * v,
        //那么callback执行完得到的就是void或其他的什么,我不太清楚Python的规定;
        //总之判断返回值是否为真时得到的结果就肯定不是真了,
        //因此result.push(vals[i])始终得不到执行,最终结果就是空的list。
        if (callback(vals[i]) == true):
            result.push(vals[i])
    return result;

没用过Python,写的可能不合语法规范,不过大致意思能看出来吧。就酱紫。

如果x==v*v返回true,否则返回false

range(1, 100) 是一個list, 代表[1,2,3, ..., 100]

filter 就是測試是否list裡的值是否符合條件 is_sqr (true/false), 若符合則留在list裡

所以才剩下 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进