dict
-
my_dict.setdefault(key, []).append(new_value)
比如,我们新建了这样一个字典:dd = defaultdict(list),如果键 'new-key' 在 dd 中还不存在的话,表达式 dd['new-key'] 会按照以下的步骤来行事。
(1) 调用 list() 来建立一个新列表。
(2) 把这个新列表作为值,'new-key' 作为它的键,放到 dd 中。
(3) 返回这个列表的引用。 -
如果你在迭代一个字典的所有键的过程中同 时对字典进行修改,那么这个循环很有可能会跳过一些键——甚至是跳过那些字典中 已经有的键。在 Python 3 中,.keys()、.items() 和 .values() 方法返回的都是字典 视图。也就是说,这些方法返回的值更像集合,而不是像 Python 2 那样返回列 表。视图还有动态的特性,它们可以实时反馈字典的变化。
坑点1
def add_li(li=[]):
li.append('END')
print(li)
if __name__ == '__main__':
add_li([1, 2, 3])
# [1, 2, 3, 'END']
add_li(li=[1, 2, 3])
# [1, 2, 3, 'END']
# 上面这些传参都没有问题 ,但是如果这样
add_li()
# ['END']
add_li()
# ['END', 'END']
# 函数在定义的时候,默认参数li的值就计算出来了,[],默认参数也是一个变量,指向对象[],每次调用函数,如果改变了li的内容,那么下次调用的时候,默认参数的内容就变了,不再是定义的[]了
# 补充:在定义函数的时候只会定义一次,给默认参数分配一个内存地址,对于可变数据,这个内存地址是不可变的
# Python参数传递采用的肯定是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。
算法不足,产品来凑,产品不足,运营营救
all / any
all 和 any 也是内置的归约函数。
all(iterable)
如果 iterable 的每个元素都是真值,返回 True;all([]) 返回 True。
any(iterable)
只要 iterable 中有元素是真值,就返回 True;any([]) 返回 False。