看看你能答对几个?
扫码关注《Python学研大本营》
用这些问题考一考你身边的Python大神吧!
1.) round()函数
你认为以下代码的结果是什么?
print(round(9/2))
print(round(7/2))
print(round(3/2))
答案是:4, 4, 2
为什么print(round(7/2))
打印的是4而不是3?为什么print(round(9/2))
打印的是4而不是5?
这是因为在python中,round函数实现了银行家的四舍五入,所有的半数都被四舍五入到最接近的偶数。
2.) 实例!
猜猜看输出是什么?
Class A:
ans = 9 def __init__(self):
self.answer = 10
self.__add__ = lambda x, y: x.answer + y
def __add__(self, y):
return self.answer - yprint(A() + 4)
答案:6
现在你一定想知道我们是如何得到6的! 这是因为,为了解决一个属性名,Python 首先在实例层搜索它,然后在类层搜索,最后在父类中搜索。除了 dunder 方法之外,这对所有的东西都是正确的。在搜索它们时,Python跳过了实例检查,而是直接在类中搜索。 因此(10-4)=6就是答案。
3.) 数学不起作用的地方
猜猜看这种情况下的输出?
print(max(-0.0, 0.0))
答案:-0.0
你一定是把0.0当成了答案。但是答案是-0.0。 为什么会出现这种情况?出现这种情况有两个原因。 1.负零和零在Python中被视为相等。 2.而在Python的max函数中,如果多个项目是最大的,那么该函数就会返回第一个遇到的项目。 因此,max函数返回第一个出现的零,也就是-0.0。
4.) 懒惰的操作者
猜猜看这种情况下的输出?
print(all([]))
print(any([]))
答案是:True,False
函数all()有点复杂,因为它代表了空洞的真理的概念。与链式懒惰逻辑运算符一样,其算法是寻找第一个假元素,如果没有找到则返回True。由于空序列中没有假元素,print(all([]))
打印出True。 在函数any()中,如果迭代器中的任何元素是真的,它将返回False。Python 中的逻辑运算符是懒惰的! 该算法寻找第一次出现的真元素,如果没有找到,则返回假,由于序列是空的,没有可能是真的元素,因此print(any([]))
打印出False。
5.) 我想要-n次以上
猜猜看输出是什么?
print("你能给这个故事拍50下吗?" * (-1))
答案:它打印的是一个空字符串
这是因为n小于0的值被视为0(给出一个与s相同类型的空序列)。 如果n(数字)不是-1,而是大于0,那么这个字符串就会被打印n次。
最后的思考
那么,你猜对了几个呢?
参考文章:
https://medium.com/codex/5-hardest-python-questions-497a6df140d3
Python参考书单
《Python从入门到精通》
购买链接:https://item.jd.com/13284890.html
精彩回顾
用Python写前端是什么体验?
Python面试必须知道的15个问题
Kindle退出中国怎么办?快用Python下载你的电子书
自然语言三兄弟NLP、NLU、NLG傻傻分不清?一文搞懂它们的区别
《人体系统调优不完全指南》火了!我们整理了一份《程序员健康指南》!