为了账号安全,请及时绑定邮箱和手机立即绑定

貌似Python3.7.2怎么都运行不了

貌似Python3.7.2怎么都运行不了,这一节先放在这里

正在回答

1 回答

这个链接里的解答帮助很大,少走了很多弯路,建议新学生一定要看。同时也看一下官方文档。

这个课程里我记得用的是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个,所以出错。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

貌似Python3.7.2怎么都运行不了

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信