你有多懂Python?看完这6道题就知道了

开发 后端
最近觉得 Python 太“简单了”,于是在老司机面前放肆了一把:“我觉得 Python 是世界上最简单的语言!”。于是老司机给我了一份满分 100 分的6道题,下面是题目的错误实录。

Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。设计者开发时总的指导思想是,对于一个特定的问题,只要有一种***的方法来解决就好了。

最近觉得 Python 太“简单了”,于是在老司机面前放肆了一把:“我觉得 Python 是世界上最简单的语言!”。于是老司机给我了一份满分 100 分的6道题,下面是题目的错误实录:

1、你恐怕不会留意到的列表生成器

检查一下下面的代码会报错的原因,并说出来?

你有多懂Python?看完这6道题就知道了

列表生成器的正解答案如下:

你有多懂Python?看完这6道题就知道了

你有多懂Python?看完这6道题就知道了

 

或者答案可以是这样 

你有多懂Python?看完这6道题就知道了

此内容的再补充

你有多懂Python?看完这6道题就知道了

你有多懂Python?看完这6道题就知道了

2、据说是最难得装饰器描述:按照实际情况来写一个类装饰器用来度量函数/方法运行时间,你看怎么实现? 

你有多懂Python?看完这6道题就知道了

此类装饰器能够运行在普通函数上:

你有多懂Python?看完这6道题就知道了

此类装饰器运行在方法上会报错,为什么?

你有多懂Python?看完这6道题就知道了

如果坚持使用类装饰器,应该如何修改?

此问题的答案是

你有多懂Python?看完这6道题就知道了

你有多懂Python?看完这6道题就知道了


3、Python 调用机制看你会不会

描述:Python开发者们知道 __call__ 方法可以用来重载圆括号调用,其实问题根本不是这个。

你有多懂Python?看完这6道题就知道了

现在大家可以看到 a() 似乎等价于 a.__call__() ,好的,现在我们写出了如下的代码

你有多懂Python?看完这6道题就知道了

你有多懂Python?看完这6道题就知道了  

你有多懂Python?看完这6道题就知道了

你有多懂Python?看完这6道题就知道了  

4、描述符你会犯错吗?

描述:如果要写一个 Exam 类,其属性 math 为 [0,100] 的整数,若赋值时不在此范围内则抛出异常,你是否决定用描述符来实现这个需求。

你有多懂Python?看完这6道题就知道了

看起来一切正常。不过尝试说明是什么问题,改写 Grade 描述符试一下:

你有多懂Python?看完这6道题就知道了

不过这样会导致更大的问题,请问该怎么解决这个问题?

答案

你有多懂Python?看完这6道题就知道了

两种方法

***种:

你有多懂Python?看完这6道题就知道了

你有多懂Python?看完这6道题就知道了

你有多懂Python?看完这6道题就知道了

5、Python 继承机制的坑

描述:

试求出以下代码的输出结果。

你有多懂Python?看完这6道题就知道了

答案:输出是 36 ,具体可以参考 New-style Classes , multiple-inheritance

6、Python 的特殊方法的使用模式

描述:写了一个通过重载 new 方法来实现单例模式的类。

你有多懂Python?看完这6道题就知道了

现在有一堆类要实现为单例模式,打算照着写一个元类,这样可以让代码复用:

你有多懂Python?看完这6道题就知道了

报错啊,下面这段代码能够捕获一切属性调用并打印参数

你有多懂Python?看完这6道题就知道了

试解释为什么给 getattribute 打补丁成功,而 new 打补丁失败。

如果坚持使用元类给 new 打补丁来实现单例模式,应该怎么修改?

答案:

  • 其实这是最气人的一点,类里的 __new__ 是一个 staticmethod 因此替换的时候必须以 staticmethod 进行替换。答案如下:

你有多懂Python?看完这6道题就知道了

结语:

Python这门语言还是博大精深的,如果你现在刚刚学不久就以为很好了,小心这里面其实有很多坑。

责任编辑:未丽燕 来源: Linux云计算数据自学
相关推荐

2019-06-05 15:20:00

MongoDBNoSQL数据库

2019-05-16 08:51:22

物联网获利IOT

2020-07-20 10:20:30

this前端代码

2022-07-01 13:38:48

雾计算边缘计算

2023-10-08 08:41:04

JavaPython编程语言

2016-03-09 19:52:02

无线应用Wi-Fi定位

2021-11-27 12:08:49

网络攻击微软网络安全

2021-03-14 15:58:26

手机定位系统

2023-09-28 08:42:56

PyQt6Python语言

2023-07-27 08:40:45

PawSQL数据库

2018-03-13 11:09:16

屏幕刷新率电脑

2019-08-20 13:45:01

阿里巴巴面试Java

2022-09-02 19:10:46

高并发架构系统

2020-03-24 10:59:41

运维架构技术

2020-04-02 10:10:59

CPU系统运算

2022-01-17 21:13:32

Windows 10Windows微软

2017-06-01 18:55:44

2019-08-02 15:35:02

工具代码开发

2018-07-24 11:21:25

程序员加班月薪

2021-07-26 05:17:39

Linux PosixLinux 系统
点赞
收藏

51CTO技术栈公众号