首页 > 代码库 > Python-13-2
Python-13-2
以下的代码的输出将是什么? 说出你的答案并解释?
def extendList(val, list=[]): list.append(val) return listlist1 = extendList(10)list2 = extendList(123,[])list3 = extendList(‘a‘)print "list1 = %s" % list1print "list2 = %s" % list2print "list3 = %s" % list3
你将如何修改 extendList
的定义来产生期望的结果
以上代码的输出为:
list1 = [10, ‘a‘]list2 = [123]list3 = [10, ‘a‘]
许多人会错误的认为 list1
应该等于 [10]
以及 list3
应该等于 [‘a‘]
。认为 list
的参数会在 extendList
每次被调用的时候会被设置成它的默认值 []
。
尽管如此,实际发生的事情是,新的默认列表仅仅只在函数被定义时创建一次。随后当 extendList
没有被指定的列表参数调用的时候,其使用的是同一个列表。这就是为什么当函数被定义的时候,表达式是用默认参数被计算,而不是它被调用的时候。
因此,list1
和 list3
是操作的相同的列表。而 ````list2是操作的它创建的独立的列表(通过传递它自己的空列表作为
list``` 参数的值)。
extendList
函数的定义可以做如下修改,但,当没有新的 list
参数被指定的时候,会总是开始一个新列表,这更加可能是一直期望的行为。
def extendList(val, list=None): if list is None: list = [] list.append(val) return list
使用这个改进的实现,输出将是:
list1 = [10]list2 = [123]list3 = [‘a‘]
Python对象占用内存大小
http://www.th7.cn/Program/Python/2012/03/02/61741.shtml
说说 dict 的 items() 方法与 iteritems() 方法的不同
items(...) D.items() -> list of D‘s (key, value) pairs, as 2-tuplesiteritems(...)D.iteritems() -> an iterator over the (key, value) items of D
python pass用法
1、空语句 do nothing
说明os,sys模块不同,并列举常用的模块方法?
官方解释:
os: This module provides a portable way of using operating system dependent functionality.
翻译:提供一种方便的使用操作系统函数的方法。
sys:This module provides access to some variables used or maintained by the interpreter and to functions that interact strongly with the interpreter.
翻译:提供访问由解释器使用或维护的变量和在与解释器交互使用到的函数。
python内存管理
http://developer.51cto.com/art/201007/213585.htm
Python-13-2