Stackoverflow上百万的Python问题|最火的十个

浏览: 2043

阅读本文大概需要4分钟

Stackoverflow应该是每个码农耳熟能详的网站,上面有大量的问题,基本上你遇到的编程的也好,环境安装也好,调试出错也好,都有大牛在上面回答!年前我做个爬虫爬取了Stackoverflow上近90万的数据,想后面写一篇可视化的分享报告!今天我们先看一下投票最多的问题,看看你能回答几道?


1

What does the “yield” keyword do?

投票人数:7700 围观人数:1,591,544

  • 看来大家对Python里面最yield 这个用法都非常好奇,确实这个用法一开始学的时候非常别扭,一头雾水,别的语言根本没有这个。

  • yield跟Python里面的生成器紧密相关,刚开始看的时候觉得很别扭,尤其是带有yield的生成器函数用法和逻辑怪怪的,比如用scrapy框架的时候,看到yield头大呢,因为scrapy爬取数据的时候大量的用yield处理。

  • 但是当你用习惯之后,会发现这种用法非常Python之美

2

What are metaclasses in Python?

投票人数:4232 围观人数:565,158

  • metaclass其实就是元类,元类到底是啥,有啥用呢!Python里面有几个非常难懂的概念,比如上面的yield,还有装饰器,初学者可能已经比较头疼了,这里还有更复杂的是元类!

  • 我个人觉得元类算是Python里面最晦涩难懂的概念,比较冷门!要懂元类需要对类非的内部结构和逻辑非常了解,而且在多个类之间继承封装的时候,会考虑用到.

  • 我个人比较喜欢用设计模式来化解,青菜萝卜各有所爱,但是元编程的技巧,却是非常值得学Python的同学好好研究一下。

3

How to check whether a file exists?

投票人数:3592 围观人数:2,553,760

  • 这个问题看上去很简单啊,为啥这么多都在问。有的小伙伴说os.path.exist(path)不就搞定啦,但是点开看看里面展开了激烈的讨论.

  • 也有人用os.path.isfile(path),也有人用pathlib库,还有人用os.access()等等,各抒己见,让我长见识了!

4

Does Python have a ternary conditional operator?

投票人数:3590 围观人数:1,209,596 

三目运算,很多有c,c++基础的同学对这个一定不陌生,那么Python里面到底有没有三目运算呢,答案是有的,比如:

#way1
1 if a > b else -1
#way2
(falseValue, trueValue)[test == True]
#way3
a=1
b=2
print ({True: 100, False: 200}[a > b])

上面3种三目运算的写法是不是让你脑洞大开,还能这样。是的,尤其是在做状态机的时候会用到,历史文章里面有一篇"Google面试算法题,两桶水"就用到了这招。

5

What does if __name__ == “__main__”: do?

投票人数:3590 围观人数:1,209,596

  • 所有学Python的同学,刚上来学的时候一定会碰到这行代码,我自己刚开始的学的时候,就当它是main函数入口函数。

  • 后来学了一段时间,才慢慢体会到,这行代码背后的深意.__name__其实跟模块的引用有关,如果在模块内部运行这个程序,就是__main__这个名字,如果是外部引用,则是模块的名字.

6

Calling an external command in Python ?

投票人数:3276 围观人数:2,324,850

这个问题做自动化运维的同学一定不陌生,用Python在linux服务器上调一些其他的脚本,肯定会用到os.system()这招,或者用os.popen("ls -l").read(),获取返回的结果,或是用subprocess.Popen()跑一些command.

7

How to merge two dictionaries in a single expression?

投票人数:2858 围观人数:1,024,003

字典和列表的用法,算是Python里面的最精妙的地方,后面几个问题都和字典有关!字典的merge方法有很多种,非常精妙,这里只罗列部分几种:

x = {'a':1, 'b': 2}
y = {'b':10, 'c': 11}
x.update(y)
print (x)

x = {'a':1, 'b': 2}
y = {'b':10, 'c': 11}
z = {**x, **y}
print (z)
x = {'a':1, 'b': 2}
y = {'b':10, 'c': 11}
z = dict(x, **y)
print (z)

8

How do I sort a dictionary by value?

投票人数:2650 围观人数:1,604,329

  • 字典的排序问题,也是一个非常典型的字典相关问题,发现 Stackoverflow上对字典的用法,还是吸引了大批的爱好者!

  • 字典的排序有很多种方法,详细可以看我一年前写的文章里面,有好几篇都是对这个介绍.

  • 大体可以用sorted,或者获取字典的items()循环排序,或者collections模块里面的most_common().

9

How can I create a directory if it does not exist?

投票人数:2643 围观人数:1,645,881

  • 这个问题非常巧,我前段时间在小密圈分享过一种非常Pythonic的用法,不仅仅是路径不存在,还有文件不存在的情况!

  • 没有想到stackoveflow这是排名第九的热点问题!我们一般通俗的做法是用if/else,或者if not 来判断一下路径是否存在os.path.exist(),不存在则新建一个路径.


10

Does Python have a string 'contains' substring method?

投票人数:2496 围观人数:2,226,231

  • 总于有字符串的问题了!我一直在想前面文件,字典,模块,生成器,对象,怎么没有字符串呢!

  • 啊哈发现第十个问题是关于字符串的,这个问题其实涉及很多字符串的技巧,深挖出来,可以挖出一箩筐关于字符串的技巧!

  • 一般我们来判断一个小字符串在大的字符串里面,可以用in,find,或者用正则去search,甚至关于字符串的大量处理,大规模的可以用pandas里面的str去处理。


当然如果只是简单的分析热门问题,并不需要深度爬取,只需要点点网页上的排名就行了,我是为了后面写一篇深度分析报告.


好上面就是10大热门问题,我自己一路读下来,发现收获不少!也可以检测一下自己学的掌握情况,有的时候答题不仅是帮助别人,也是提高自己,温故而知新 可以更强矣!小伙伴不知道大家都打出几道了,欢迎留言报个数吧!


长按二维码,关注【菜鸟学python】

image.png

 推荐阅读:

2017年度电影榜单出炉

双十二来了,我爬取了淘宝上所有的羽绒服

探秘全国近1600个Python岗位数据分析

学好Python薪水有多少|我爬取了所有的Python职位

一份值得了解的Google Python风格规范指南

南京楼市火吗|16000套二手房数据分析

5分钟带你了解Python2和3的区别|从此不再纠结

推荐 4
本文由 菜鸟学Python 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册