- 主题:这个Python代码怎么理解?
In [4]: def g(x=[]):
...: pass
...:
In [5]: g.__defaults__
Out[5]: ([],)
【 在 ooolinux 的大作中提到: 】
: 这个属性是啥属性,怎么查看?
--
FROM 221.216.209.62
人家文档里写了,为啥叫随意性
【 在 kawolu 的大作中提到: 】
: 这就是py的随意性嘛,很恶心的,而用这种随意性出题,就更恶心了。
--
FROM 221.216.209.62
【 在 ooolinux 的大作中提到: 】
: b=func()无参调用使用默认参数[ ]空列表,就算和上次调用同一个列表对象,为啥不初始化为空的[ ]列表?
对象只是在创建的时候才会初始化, python是动态语言, 只有第一次调用生成缺省对象的时候才需要调用对象初始化函数(确切是在import函数或者类所在的模块的时候,生成函数对象的时候,会初始化容器类型或者类实例类型的默认参数), 后面实际调用调用, 只需要生成引用绑定, 如果调用者提供, 绑定调用者, 如果没提供, 绑定默认。
如果, 每次都生成新对象, 并且做拷贝初始化, 那就是传值了。
引用的意思, 就是传入一个指向已存在的对象的索引的意思, 甚至, 你可以在函数里再把这个对象传出来, 它们都指向同一个list。 使用任意一个引用去改变list的值, 其它引用也会看到改变。
--
修改:poggy FROM 115.171.155.*
FROM 115.171.155.*
这个题应该算偏题
【 在 kawolu 的大作中提到: 】
: 这就是py的随意性嘛,很恶心的,而用这种随意性出题,就更恶心了。
:
--
FROM 120.35.168.*
我试试看
【 在 annals 的大作中提到: 】
: In [4]: def g(x=[]):
: ...: pass
: ...:
: ...................
--
FROM 120.35.168.*
大概明白了
【 在 poggy 的大作中提到: 】
:
: 对象只是在创建的时候才会初始化, python是动态语言, 只有第一次调用生成缺省对象的时候才需要调用对象初始化函数, 以后调用, 由于已经存在了, 只需要生成引用。
: 如果, 每次都生成新对象, 并且做拷贝初始化, 那就是传值了。
: ...................
--
FROM 120.35.168.*
函数参数的默认值是在import阶段evaluate一次的
【 在 ooolinux 的大作中提到: 】
: 有结果但不理解
--
FROM 183.157.65.*
我觉得可以这么理解:
函数也是一个对象
函数的默认参数是这个对象的一个成员
当这个函数被运行时环境加载时,相当于new出一个函数对象,里面就有这个默认参数的list,是函数对象的一个成员
函数对象是全局唯一的,这个默认参数自然也就是全局唯一的。
【 在 adoal 的大作中提到: 】
: 函数参数的默认值是在import阶段evaluate一次的
--
FROM 1.202.141.*
不是很明白
【 在 adoal 的大作中提到: 】
: 函数参数的默认值是在import阶段evaluate一次的
:
--
FROM 112.50.54.*
这个解释比较好理解
【 在 kawolu 的大作中提到: 】
: 我觉得可以这么理解:
: 函数也是一个对象
: 函数的默认参数是这个对象的一个成员
: ...................
--
FROM 112.50.54.*