首页 > 技术文章 > 易错题

ryxiong-blog 2019-08-14 21:56 原文

def num():
    return [lambda x:i*x for i in range(4)]
i = 5
print([m(2) for m in num()])

 

3.1 下面代码的输出结果将是什么?(2018-3-30-lxy)
1. list = ['a', 'b', 'c', 'd', 'e']
2. print list[10:]
下面的代码将输出[],不会产生IndexError错误。就像所期望的那样,尝试用超出成员的个数的index
来获取某个列表的成员。
例如,尝试获取 list[10]和之后的成员,会导致 IndexError。
然而,尝试获取列表的切片,开始的 index 超过了成员个数不会产生 IndexError,而是仅仅返回一
个空列表。这成为特别让人恶心的疑难杂症,因为运行的时候没有错误产生,导致 bug 很难被追踪到。
 
3.7 下面这段代码的输出结果是什么?请解释?(2018-4-16-lxy)
def extendlist(val, list=[]):
    list.append(val)
    return list

list1 = extendlist(10)
list2 = extendlist(123, [])
list3 = extendlist('a')

print("list1 = %s" %list1)
print("list2 = %s" %list2)
print("list3 = %s" %list3)
输出结果:
list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']
新的默认列表只在函数被定义的那一刻创建一次。当 extendList 被没有指定特定参数 list 调用时,这组 list 的值
随后将被使用。这是因为带有默认参数的表达式在函数被定义的时候被计算,不是在调用的时候被计算。
 
下列代码的输出结果是?
 
def num():
    return [lambda x:i*x for i in range(4)]
i = 5
print([m(2) for m in num()])

 输出

[6,6,6,6]

 

推荐阅读