def num(): return [lambda x:i*x for i in range(4)]i = 5print([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 listlist1 = 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 = 5print([m(2) for m in num()])
输出
[6,6,6,6]