社区首页 / Python / 帖子详情

Python 面试中 8 个必考问题

发表于:2017-06-10 08:59 [ 只看楼主] 4079 0 0

1、下面这段代码的输出结果是什么?请解释。


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


怎样修改extendList的定义能够产生以下预期的行为?


上面代码输出结果将是:


list1 = [10, 'a']

list2 = [123]

list3 = [10, 'a']


很多人都会误认为list1=[10],list3=[‘a’],因为他们以为每次extendList被调用时,列表参数的默认值都将被设置为[].但实际上的情况是,新的默认列表只在函数被定义的那一刻创建一次。


当extendList被没有指定特定参数list调用时,这组list的值随后将被使用。这是因为带有默认参数的表达式在函数被定义的时候被计算,不是在调用的时候被计算。因此list1和list3是在同一个默认列表上进行操作(计算)的。而list2是在一个分离的列表上进行操作(计算)的。(通过传递一个自有的空列表作为列表参数的数值)。


extendList的定义可以作如下修改。


尽管,创建一个新的列表,没有特定的列表参数。


下面这段代码可能能够产生想要的结果。


def extendList(val, list=None):

  if list is None:

    list = []

  list.append(val)

  return list


通过上面的修改,输出结果将变成:


list1 = [10]

list2 = [123]

list3 = ['a']


2、下面这段代码的输出结果将是什么?请解释。


def multipliers()

  • 点赞  0
  • 收藏
  • 扫一扫分享朋友圈

    二维码

  • 分享

全部回复 (0) 倒向排序

课程推荐

社区热门帖