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

1,036 阅读6分钟
原文链接: zhuanlan.zhihu.com

菜鸟学Python的第141篇原创文章

阅读本文大概需要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年薪最高有50w|探秘全国近1600个Python岗位数据分析

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

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

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

分析9000部电影|一个简单的电影推荐系统

厉害了!实战爬取全网5000部手机|上篇

Python