如果大家在看完后,已经充分理解所列出的各个知识点,那么,可以说你已经算是精通python了。如果不能,希望这篇回答能让你意识到自己python知识还存在哪些不足,从哪些方面去改进。
怎样才算精通python,这是一个非常有趣的问题。
很少有人会说自己精通python,比如,你可以说你精通数据库,精通分布式,精通机器学习,那都算你厉害。但是,你说你精通python,这一点都不酷,在业界的认可度也不高。
另外,python使用范围如此广泛,一个人精力有限,不可能精通所有的领域。就拿python官网的python应用领域来说,python有以下几个方面的应用:
1.webprogramming:django,pyramid, bottle, tornado, flask, web2py
2.guidevelopment: wxpython, tkinter, pygtk, pygobject, pyqt
3.scientific and numeric: scipy, pandas, ipython
4.softwaredevelopment: buildbot,trac,roundup
5.systemadministration: ansible, salt,openstack
如果有人声称精通上面所有领域,那么,请收下小编的膝盖,并且,请收小编为徒。
怎样才算精通python?
面试官要求精通python,作为求职者,应该达到怎样的水平,才敢去应聘呢?要求精通python的岗位都是全职的python开发,python是他们的主要使用语言,要想和他们成为同事,你至少需要:
1.能够写出pythonic的代码
2.对python的一些高级特性比较熟悉
3.对python的优缺点比较了解
这样说可能比较抽象,不太好理解。我们来看几个例子,如果能够充分理解这里的每一个例子,那么,你完全能够顺利通过“精通python”的岗位面试。
a.上下文管理器
大家在编程的时候,经常会遇到这样的场景:先执行一些准备操作,然后执行自己的业务逻辑,等业务逻辑完成以后,再执行一些清理操作。
比如,打开文件,处理文件内容,最后关闭文件。又如,当多线程程序需要访问临界资源的时候,线程首先需要获取互斥锁,当执行完成并准备退出临界区的时候,需要释放互斥锁。
对于这些情况,python中提供了上下文管理器(context manager)的概念,可以通过上下文管理器来控制代码块执行前的准备动作以及执行后的收尾动作。我们以处理文件为例来看一下在其他语言中,是如何处理这种情况的。java风格/c++风格的python代码:
pythonic的代码:
b.上下文管理器可以同时管理多个资源
假设你需要读取一个文件的内容,经过处理以后,写入到另外一个文件中。你能写出pythonic的代码,所以你使用了上下文管理器,满意地写出了下面这样的代码:
你已经做得很好了,但是,你时刻要记住,你是精通python的人啊!精通python的人应该知道,上面这段代码还可以这么写:
c.全局变量
关于python的全局变量,我们先从一个问题开始:python有没有全局变量?可能你看到这个问题的时候就蒙圈了,没关系,来解释一下。
从python自己的角度来说,python是有全局变量的,所以,python为我们提供了global关键字,我们能够在函数里面修改全局变量。但是,从c/c++/java程序员的角度来说,python是没有全局变量的。
因为,python的全局变量并不是程序级别的(即全局唯一),而是模块级别的。模块就是一个python文件,是一个独立的、顶层的命名空间。模块内定义的变量,都属于该命名空间下,python并没有真正的全局变量,变量必然属于某一个模块。
其实,绝大多数人对python的认识都存在误区,认为python很简单,只是简单地了解一下就开始写python代码,写出了一堆很不好维护的代码,希望这一部分人看到回答以后,能够回去重新学习python。