貌似Python3.7.2怎么都运行不了
貌似Python3.7.2怎么都运行不了,这一节先放在这里
貌似Python3.7.2怎么都运行不了,这一节先放在这里
2018-12-26
这个链接里的解答帮助很大,少走了很多弯路,建议新学生一定要看。同时也看一下官方文档。
这个课程里我记得用的是python 2.7版本。
2.7版本里的sorted函数最多接收4个参数。sorted(iterable, cmp, key, reverse),其中后三个都是可选的。
3.7版本里的sorted函数最多接收3个参数。sorted(iterable, key, reverse),其中后两个都是可选的,相比2.x版本,删掉了cmp参数。
在2.7的文档中,作者说了,用key和reverse比用cmp快得多,因为cmp要对iterable中的每一个待比较项目进行操作,而key和reverse则对整个iterable进行一次操作即可。
在2.7版本文档中写道,cmp用于为iterable中的每2项在比较时指定一个特定的比较函数,比如在比较字符串时,你可以设定,先对每一项执行某个操作,比如全都小写,再比较;又或者在比较数字时候,先对每一项平方一下再比较。而key参数则是用于指定拿iterable的每一项的什么来比较,默认是None,即为直接比较大小,举例:用户可以指定key = lambda x: x[2],从而让每一项拿出第3个字符来互相比较。
来看,我理解,虽然cmp和key,一个接收2个参数,一个只接收1个参数,但两者的实际作用大致相同,比如在此例中,见以下代码:
print sorted(['bob', 'about', 'Zoo', 'Credit'],cmp = lambda x,y: cmp(x.lower(),y.lower()) )
print sorted(['bob', 'about', 'Zoo', 'Credit'],key = lambda x: x.lower() )
print sorted(['bob', 'about', 'Zoo', 'Credit'],cmp = lambda x,y: cmp(x.lower(),y.lower()),key = lambda x: x.lower() )
三者的返回结果是完全一样的。
在3.x版本中,直接用key来实现即可。
至于楼主遇到的错误,如果跟链接里的文章的错误一样的话,我是这么理解的。
在本练习中,这样的写法是没问题的,因为这个函数符合cmp参数的要求,即接收2个参数s1和s2。
在3.x中,python试图将cmp_ignore_case理解为key参数,key参数对应的自定义函数要求只能接收1个函数,但这个函数中给了2个,所以出错。
举报