铁乐学python_day01-和python有关的唠嗑

Posted tielemao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了铁乐学python_day01-和python有关的唠嗑相关的知识,希望对你有一定的参考价值。

铁乐学python_day01-和python有关的唠嗑

文:铁乐与猫
2018-03-16

01_python的历史

python的创始人为荷兰人吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。

龟叔:2005年加入谷歌至2012年,2013年加入Dropbox直到现在,依然掌握着Python发展的核心方向,被称为仁慈的独裁者。

Python社区的人赋予他“仁慈大君” 的称号,这一称号直接来自英国肥皂剧《Monty Python飞行马戏团》。Guido当初之所以选中Python作为语言的名字,是因为他太喜欢这部肥皂剧了。

目前Python主要应用领域:

云计算: 云计算最火的语言, 典型应用OpenStack
WEB开发: 众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
系统运维: 运维人员必备语言
金融:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测
图形GUI: PyQT, WxPython,TkInter

Python在一些公司的应用:

谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬虫、Google广告等项目都在大量使用Python开发
CIA: 美国中情局网站就是用Python开发的
NASA: 美国航天局(NASA)大量使用Python进行数据分析和运算
YouTube:世界上最大的视频网站YouTube就是用Python开发的
Dropbox:美国最大的在线云存储网站,全部用Python实现,每天网站处理10亿个文件的上传和下载
Instagram:美国最大的图片分享社交网站,每天超过3千万张照片被分享,全部用python开发
Facebook:大量的基础库均通过Python实现的
Redhat: 世界上最流行的Linux发行版本中的yum包管理工具就是用python开发的
豆瓣: 公司几乎所有的业务均是通过Python开发的
知乎: 国内最大的问答社区,通过Python开发(国外Quora)
春雨医生:国内知名的在线医疗网站是用Python开发的
除上面之外,还有搜狐、金山、腾讯、盛大、网易、百度、阿里、淘宝 、土豆、新浪、果壳等公司都在使用Python完成各种各样的任务。 

python发展史

1989年,为了打发圣诞节假期,Guido开始写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。
1991年,第一个Python编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。从一出生,Python已经具有了:类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓展系统。
Granddaddy of Python web frameworks, Zope 1 was released in 1999
Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.
Python 2.0 - October 16, 2000,加入了内存回收机制,构成了现在Python语言框架的基础
Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 诞生
Python 2.5 - September 19, 2006
Python 2.6 - October 1, 2008
Python 2.7 - July 3, 2010
In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
Python 3.0 - December 3, 2008
Python 3.1 - June 27, 2009
Python 3.2 - February 20, 2011
Python 3.3 - September 29, 2012
Python 3.4 - March 16, 2014
Python 3.5 - September 13, 2015
Python 3.6 - December 16,2016

02_python是什么样的编程语言

python是解释型的编程语言,执行脚本时它会从上到下,逐行去解释成机器语言来给计算机去执行,运行速度是不如编译型的编程语言,但是它胜在开发效率高,而且对于用户来说,0.1秒的速度与0.01秒的速度感觉不到有什么差别。

python是动态类型的语言,在运行期间(动起来)才去做数据类型检查,好处是不用在敲代码的时候就要给所有变量指定数据类型,动态语言是在你第一次赋值(用等号)给变量时,在内部将数据类型记录下来。(省却了一些繁琐重复的工作)对比静态语言,如C/C++的就知道了,静态语言是正好相反的,数据类型是在编译期间检查的,在写程度代码的时候就要声明清楚所有变量的数据类型(这多了多少功夫阿。)

python虽然不用事前声明清楚变量的数据类型,但不代表它的一个变量不经过强制转换就能赋不同数据类型的值,在严谨性和安全性上来说,python还是做到了的,所以它还属于强(安全)类型定义语言。

三者要串连起来说,那就是python是一门动态解释性的强类型定义语言,够拗口难记的吧!

03_Python的设计哲学

Python的设计哲学是“优雅”、“明确”、“简单”
因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。(我理解是用最好最优雅明确简洁的代码去解决问题,哪怕这个问题的解决方法有许多种。)
在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法。
由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大规模的软件开发。这些准则被称为Python之禅。在Python解释器内运行import this可以获得完整的列表。
技术分享图片

The Zen of Python, by Tim Peters
《Python 的禅》 by 提姆·彼特

Beautiful is better than ugly.
美丽优于丑陋。
Explicit is better than implicit.
明确优于隐式。
Simple is better than complex.
简单优于复杂。
Complex is better than complicated.
复杂优于烦锁。
Flat is better than nested.
平直优于嵌套。
Sparse is better than dense.
稀疏优于紧密。
Readability counts.
注重可读性。
Special cases aren‘t special enough to break the rules.
特殊不能违抗规则,
Although practicality beats purity.
虽然实用性胜于纯净。
Errors should never pass silently.
错误不应该无声无息,
Unless explicitly silenced.
除非明确地沉默。
In the face of ambiguity, refuse the temptation to guess.
面对模糊的脸,拒绝诱导猜测。
There should be one-- and preferably only one --obvious way to do it.
应该有一个 —— 并且最好只有一个明显的方法来做到这一点。
Although that way may not be obvious at first unless you‘re Dutch.
虽然这种方法不是很明显的,除非你是第一个荷兰人。
Now is better than never.
目前总比永远的好。
Although never is often better than *right* now.
虽然通常从不比立刻好。
If the implementation is hard to explain, it‘s a bad idea.
如果实现是很难解释的,这是一个坏主意。
If the implementation is easy to explain, it may be a good idea.
如果实现是很容易解释的,它可能是一个好主意。
Namespaces are one honking great idea -- let‘s do more of those!
命名空间是一个让人尖呼的伟大构想 —— 我们应该在那方面做得更多!

有鉴于此,python的开发效率非常高,因为Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。

另外python可移植性高,兼容几乎所有的系统平台;可扩展性也强,可以将部分程序使用C/C++来编写,然后允许在你的python程序中使用它们;可嵌入性佳,反过来可以嵌入到C/C++中,从而向你的程序用户提供脚本功能。

python的缺点是相对运行速度慢,不过大多数情况下python已经完全可以满足你对程序速度的要求,在对速度要求极高的如搜索引擎、对硬件底层的操作等才建议用C去实现。

python对代码不能加密,它的源码都是以明文存放的,不过这可能与python本身就是个开源项目以及它是解释性语言有关。如果某些算法或功能涉及到需要加密,建议扩展用C之类的去实现就好了。或对加密要求高的一开始就不使用python去实现。

python存在线程不能得用多CPU的问题,这真的是一个垢病了。希望以后能得到完美解决吧。

04_python解释器的种类

由于上文提及到的python(从语言规范到解释器)开源,明文的自由特性,使得各路大神编写出不少各具特质的python解释器来执行python代码。

例如有以下著名的几种:

CPython

当我们从Python官方网站下载并安装好Python 3.6后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

IPython

IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

PyPy

PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。

Jython

Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

IronPython

IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

小结:

  Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。

注:本博文日志大量引用了百度百科上有关python的介绍及博客园博主太白金星(也是老男孩教育中面授我的其中一位老师)的文章,链接是http://www.cnblogs.com/jin-xin/articles/7459977.html
。虽说存在大量引用,但也有很大程度上是我用自已提炼和组织的唠嗑语言去叙述理解的。

然后后面有关python安装、环境设置和运行第一个hello world程序的事就放到下一篇日志再谈了。

end







以上是关于铁乐学python_day01-和python有关的唠嗑的主要内容,如果未能解决你的问题,请参考以下文章

铁乐学python_Day41_线程01

铁乐学python_Day39_多进程和multiprocess模块2

铁乐学Python_day12_装饰器

铁乐学python_day24_面向对象进阶1_内置方法

铁乐学Python_day09_函数

铁乐学Python_day12_作业