为什么这个函数返回None?

时间:2015-12-19 20:23:03

标签: python python-2.x

我的函数总是返回None,这里发生了什么?

Az= [5,4,25.2,685.8,435,2,8,89.3,3,794]
new = []

def azimuth(a,b,c):
 if c == list:
    for i in c:
       if i > a and i < b:
           new.append(i)
           return new

d=azimuth(10,300,Az)
print d

此外,如果有人知道如何将这些数字的位置提取到不同的列表,那将非常有用。

2 个答案:

答案 0 :(得分:4)

if c == list:正在检查c是否为typelist如果if i > a and i < b:永远不会评估为True您将永远无法联系到return None因此默认情况下返回语句为Az = [5,4,25.2,685.8,435,2,8,89.3,3,794] def azimuth(a,b,c): new = [] if isinstance(c ,list): for i in c: if a < i < b: new.append(i) return new # return outside the loop unless you only want the first ,因为所有python函数都没有指定返回值,我想你想要这样的东西:

def azimuth(a, b, c):
    if isinstance(c, list):
        return [i for i in c if a < i < b]
    return [] # if  c is not a list return empty list

可以简化为:

enumerate

如果您希望索引也使用def azimuth(a, b, c): if isinstance(c, list): return [(ind,i) for i, ind in enumerate(c) if a < i < b] return []

def azimuth(a,b,c):
  inds, new = [], []
  if isinstance(c ,list):
     for ind, i in enumerate(c):
        if  a < i < b:
           new.append(i)
           inds.append(ind)
  return new,inds # 

如果你想单独购买它们:

new, inds = azimuth(10, 300, Az)

然后解压缩:

Model.findOne({'email':'test@test.com'},function(err, note){

     note.notes.push(newNote);
     note.save(function(err){});
});

答案 1 :(得分:2)

该函数中的第一个if正在检查c是否为内置类型list

>>> list
<type 'list'>

因此,支票不会成立,永远不会达到return new。 在这种情况下,该函数将返回默认值None

要检查某些内容是否为列表,请使用isinstance

>>> c = [1,2,3]
>>> c == list
False
>>> isinstance(c, list)
True