天气不错,我决定去面试!
1. 面试官的问题
面试官问我:
"maishu" == True
这个问题难不倒我,我记得很清楚:
在Python3中
- None,0,空字符串,空列表,空字典都算是False
- 所有其他值都是True
所以这么一想,“maishu” == True应该返回True!
2. 我错了
可是面试官笑眯眯的打开他的笔记本电脑,运行了下面的代码:
>>> "maishu" == True
False
可为什么下面的代码的结果会打印真呢?
if "maishu":
print("真")
else:
print("假")
面试官笑眯眯的告诉了我原因:
-
在if和while等判断中,并不是去做"maishu"==True这样的比较,而是去调用bool("maishu")这个函数,而下面的规则是bool函数的逻辑:
- None,0,空字符串,空列表,空字典都算是False,其他都是True
-
"maishu"==True是调用了字符串str的魔法函数__eq__,这根本就是两个不同的函数,逻辑不同很正常。而且"maishu"是一个字符串,确实不是True啊,所以比较运算符应该返回False。
3. 还有一个坑
我说我理解了,虽然回答错了问题,但是感觉学习到了知识,还是很开心的。
没想到这个问题还没完,面试官又问:
1 == True
我想了想说:
可是面试官笑眯眯的打开他的笔记本电脑,运行了下面的代码:
>>> 1 == True
True
怎么会这样呢?这坑还真多。
面试官洋洋得意的说道:
- True和False这样的布尔值,在Python解释器中就是用数字表示的,True是1,False是0。常用的数据库(比如MySQL)中也是这样表示的。
- 所以True就是1,返回True才是对的。
4. 第二个问题我又挂了
我感觉这个问题有点偏,心想接下来应该没问题了!
没想到来了这么一个问题:
a = 198
b = 198
print(a is b)
True a = 257
b = 257
print(a is b)
3.还有这一段:
# 注意 - 变量a和b的声明要放在同一行。
a = 257;b=257;
print(a is b)
我想了想,自信的说:
面试官笑眯眯的运行了上面的代码:
- 第一段都是198的时候,a is b返回了True。
- 第二段都是257的时候,a is b返回了False。
- 第三段也都是257,但返回的是True
5. 我崩溃了
我彻底崩溃了!这些天天用的东西。我竟然都错了。
然后面试官笑眯眯的说:
1.is关键词是比较两个变量在内存中的地址是否相同,是真正的同一个东西,而不是比较两个东西内容相等。上面的诡异现象是由于Python解释器的优化造成的。
2.Python把一定常见的数字(-5到256)放在一个统一的地方,如果程序中用到了就会直接使用这个统一的地方的数值。198属于这个范围,所以不管我们定义多少不同的变量,实际上都是用的这同一个,放在内存中是同一个地方。
3.而257不属于上面的范围,虽然a和b都是257,但在内存中它们是两个数字。我们is做比较是比较的内存地址,所以是False。如果我们用==做比较,他们比较的是值,就是相同的。
4.那第三段怎么又是True了呢?那是因为Python的解释器还有一个优化,如果两个变量在同一个代码块中(在例子中是同一行),那么为了节省空间,相同的变量也会公用同一个内存空间。所以就又是True了。
6. 面试结果
虽然面试官最后笑眯眯的跟我说:
但是只要面试中能学到东西,我觉得还是很值得。对这个面试官充满感激。
😒老子要越挫越勇,慢慢就成了面霸了。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。