python,如图,为啥key参数的形式一定要写成上面那样,不能写成下面那样?(python 为什么默认参数不能放在必选参数前面)
- python 为什么默认参数不能放在必选参数前面
- Python 为什么list不能作为字典的key
- 关于python中sorted方法的key参数
- python,字典作为函数参数传递,为什么用等号而不是冒号,key为什么不用引号括起来
python 为什么默认参数不能放在必选参数前面
容易产生歧义!
定义函数如下:def func(alist=None, blist)
调用方式为func(lista),当lista对应于参数blist则函数调用正确,如果对应于alist,则函数调用错误。
最后,对于函数具有多个默认参数而言,设计将会更加复杂!
Python 为什么list不能作为字典的key
字典里的key有一个原则,必须可哈希(有个内置函数hash()可以检测是否支持可哈希),因为字典查找数据是通过哈希算法得到的,比元组,列表等的数组类型快很多,这本来也是字典的特性,字典里的key和value一一对应的。
而字典查找用的就是key,那么key就必须支持哈希算法,也就是前面说的可哈希。
列表,是一个可变对象,支持原处修改。
你想字典里存的数据,要通过key查找,如果key是一个可变对象,上一次查找的是这样,这一次查找key变了,就不能通过key查找value(前面说过,字典里的key和value是一一对应),成了另一个数据,但还是它自己,这就不符合规则啊,value也就无法查找出来了。
所以这就是列表不能作为字典的key原因。
关于python中sorted方法的key参数
Python帮助文档中对sorted方法的讲解:
sorted(iterable[,cmp,[,key[,reverse=True]]])
作用:返回一个经过排序的列表。
第一个参数是一个iterable,返回值是一个对iterable中元素进行排序后的列表(list)。
可选的参数有三个,cmp、key和reverse。
1)cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个负数;如果第一个参数等于第二个参数,返回零;如果第一个参数大于第二个参数,返回一个正数。默认值为None。
2)key指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None。
3)reverse是一个布尔值。如果设置为True,列表元素将被倒序排列。
key参数的值应该是一个函数,这个函数接收一个参数并且返回一个用于比较的关键字。对复杂对象的比较通常是使用对象的切片作为关键字。例如:
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda s: s[2]) #按年龄排序
# [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
python,字典作为函数参数传递,为什么用等号而不是冒号,key为什么不用引号括起来
这是关键字参数,关键字参数的用法就是参数变量名=参数值。变量名当然不需要引号。
如果你对函数的参数还不熟悉,可以看这一章:网页链接