首页 > 代码库 > 初识Python

初识Python

初识Python

一、了解编程语言

1.1 为什么要编程?

解放人力:让机器(比如计算机)按照人们事先为其编写好的程序自发地去工作。

1.2 什么是编程语言?

 

人----------->汉语--------------->中国人

 

 

 

                   八格牙路----------->日本人

 

 

 

                   汪汪汪------------->狗

 

 

 

                   编程语言----------->计算机

 

 

 

编程语言即语言语言的本质就是沟通,因而编程语言与英语 、法语、日语等所有语言并无区别,只不过英语是人与人之间沟通的介质,而编程语言则是程序员与计算机沟通的介质。

 

程序员把自己想要说的话用编程的语言写到文件里,这其实就开发了一个程序,接下来让计算机按照文件里说的内容去做事情,这就是程序的执行。

1.3 编程语言分为哪些种类?

一:机器语言:机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。
优点:灵活、直接执行和速度快。
缺点:不同型号的计算机其机器语言是不相通的,按着一种计算机的机器指令编制的程序,不能在另一种计算机上执行。 二:汇编语言:汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的,标识符更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。
优点:能完成一般高级语言所不能实现的操作,而且源程序经汇编生成的可执行文件比较小,且执行速度很快。
缺点:源程序比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识。 三:高级语言:明确地讲,高级语言就是说人话,用人类能读懂的(比如英文)字符编程。高级语言是绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等。
优点:大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。
缺点:高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行。
按转换方式可将它们分为两类: 解释类:执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(如python程序,先翻译/编译成字节码,然后由解释器解释执行,这个过程程序员都无需关心了,享受这种便利即可),一边执行
优点:这种方式比较灵活,调试程序极为方便,程序一旦出错,立即调试立即就可以测试结果
缺点:效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器。只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的. 

编译类:编译是指在程序执行之前,就将程序源代码“翻译”成机器指令,并保存成二进制文件      优点:编译后的代码可以直接在机器上运行,运行速度比解释型要高。      缺点:调试程序麻烦,程序一旦需要修改,必须先修改源代码,再重新编译后才能执行。

技术分享

总结:编程语言经历了:机器语言-------->汇编语言------------>高级语言(java,C#,php,ruby,python)

1:开发效率从低到高

2:执行效率从高到低

3:掌握难度从难到易

注解:执行效率不是问题,硬件已经足够用,于是开发效率成了关键,因而高级语言在当今世界大行其道。

二、Python简介

2.1 Python的前世今身

 

python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言(由Guido参加设计的一种教学语言,是专门为非专业程序员设计的,优美强大但是流产了,非开源)的一种继承。

 

最新的TIOBE排行榜,Python跃居第五!!!

 

技术分享技术分享

 

摘自http://www.tiobe.com/tiobe-index/

 

由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!!

2.2 Python可以应用于众多领域

由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!!

Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。

目前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完成各种各样的任务。
 2.3 Python是怎样的一种语言?

技术分享

编译型vs解释型

编译型
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

解释型
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。

缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

注解:java代码号称一次编译到处运行,因为java代理需要先编译成字节码(一种中间格式的代码),然后拿着字节码到处运行,每次运行都需要交给jvm去编译成机器指令后才能执行,因而java是混合型

而有的人会有疑问,python代码也是先编译成字节码然后交给python解释器去执行的啊,难道python不是混合型吗?当然不是

1. 只有在import导入py文件时,才会产生pyc字节码文件,该字节码文件是可以代替源文件而直接执行的

2. 但每次执行py文件,产生的字节码并不会保留下来,也就是说,每次执行py文件,都是要重新经历一遍:py文件->字节码-->python解释器-->机器码,每次都是一个重新解释执行的过程。

2.4 Python解释器的种类

python是一门语言,用这门语言写出的代码,需要由python的解释器去解释执行,解释器有如下分类:

  • Cpython(最常用的版本)
        Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。
  • Jyhton
        Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。
  • IronPython
        Python的C#实现,IronPython将Python代码编译成C#字节码,然后在CLR上运行。(与Jython类似)
  • PyPy(特殊)
        Python实现的Python,将Python的字节码字节码再编译成机器码。
  • RubyPython、Brython ...

以上除PyPy之外,其他的Python的对应关系和执行流程如下:

技术分享

 PyPy,在Python的基础上对Python的字节码进一步处理,从而提升执行速度!

 技术分享

三、Python入门

3.1程序猿人生的第一句代码

1. 解释器:即时调试代码,代码无法永久保存

2. 文件:永久保存代码


在D:\python_test\目录下新建文件hello.py,编写代码如下

print(‘hello world‘)

执行hello.py,即python D:\python_test\hello.py

python内部执行过程如下:

技术分享

 

上一步中执行python D:\python_test\hello.py时,明确的指出 hello.py 脚本由 python 解释器来执行。

在linux平台中如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py ,那么就需要在 hello.py 文件的头部指定解释器,如下:

#!/usr/bin/env python #该行只对linux有效

print(‘hello world‘)

 

ps:执行前需给予 hello.py 执行权限,chmod 755 hello.py

3.2 文件头

Python2.7版本:

 

#!/usr/bin/env python

 

# -*- coding: utf-8 -*-
Python3以上版本则不需要输入 # -*- coding: utf-8 -*-
3.3 注释

当行注释:# 被注释内容

多行注释:""" 被注释内容 """

3.4执行脚本输入参数

 

Python有大量的模块,从而使得开发Python程序非常简洁。类库有包括三中:

 

  • Python内部提供的模块
  • 业内开源的模块
  • 程序员自己开发的模块

 

Python内部提供一个 sys 的模块,其中的 sys.argv 用来捕获执行执行python脚本时传入的参数

 

1
2
3
4
5
6
#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
import sys
  
print sys.argv

 

执行

 

C:\Users\Administrator>python D:\python_test\hello.py arg1 arg2 arg3
[‘D:\\python_test\\hello.py‘, ‘arg1‘, ‘arg2‘, ‘arg3‘]

 

 

 3.5 pyc文件

执行Python代码时,如果导入了其他的 .py 文件,那么,执行过程中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译之后产生的字节码。

ps:代码经过编译可以产生字节码;字节码通过反编译也可以得到代码。

四、变量

4.1 为何要有变量

 

程序执行的本质就是一系列状态的变化,变量二字的核心一个是变,一个是量,‘变‘正好对应程序的变化,‘量‘即计量,反映的是某种状态,

 

比如一款游戏中的人物初始等级:level=1,过了一段时间后升级了:level=10

4.2 变量的声明与引用

 

#!/usr/bin/env python

name=‘egon‘ #变量的声明
name #通过变量名,引用变量的值
print(name) #引用并且打印变量名name对应的值,即‘egon‘
4.3 标识符命令规范
    • 变量名只能是 字母、数字或下划线的任意组合
    • 变量名的第一个字符不能是数字
    • 以下关键字不能声明为变量名
      [‘and‘, ‘as‘, ‘assert‘, ‘break‘, ‘class‘, ‘continue‘, ‘def‘, ‘del‘, ‘elif‘, ‘else‘, ‘except‘, ‘exec‘, ‘finally‘, ‘for‘, ‘from‘, ‘global‘, ‘if‘, ‘import‘, ‘in‘, ‘is‘, ‘lambda‘, ‘not‘, ‘or‘, ‘pass‘, ‘print‘, ‘raise‘, ‘return‘, ‘try‘, ‘while‘, ‘with‘, ‘yield‘]
4.4变量的赋值

#!/usr/bin/env python

name1=‘lhf‘
name2=‘egon‘

技术分享

#!/usr/bin/env python

name1=‘lhf‘
name2=name1

 

技术分享

 

 

 
#!/usr/bin/env python

#一个游戏人物的等级由1级升到2级
level=1
level=2

#一个游戏帐号的密码由‘123‘改成‘456‘
passwd=‘123‘
passwd=‘456‘

#一个人的名字有‘lhf‘改成‘egon‘
name=‘lhf‘
name=‘egon‘
 

五、输入输出

python3中统一都是input,python2中有raw_input等同于python3的input,另外python2中也有input

1.res=input("python3: ")

2.res=raw_input("python2: ")

3.res=raw_input("python2: ")

1,2无论接收何种输入,都被存为字符串赋值给res,而3的意思是,用户输入何种类型,就以何种类型赋值给res

#!/usr/bin/env python

name=input(‘请输入用户名:‘)
print(name)

执行

C:\Users\Administrator>python D:\python_test\hello.py
请输入用户名:egon
egon

===============================================================================

输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,即:

#!/usr/bin/env python

import getpass
password=getpass.getpass(‘请输入密码:‘)
print(password)

执行(在pycharm中无法执行,需要到终端中执行)

C:\Users\Administrator>python D:\python_test\hello.py
请输入密码:
123456
 

六、简单的运算符

(1))算术运算

技术分享

 

(2)比较运算

技术分享

 

 (3)赋值运算
技术分享

 

 (4)位运算

技术分享

注: ~  举例: ~5 = -6  解释: 将二进制数+1之后乘以-1,即~x = -(x+1),-(101 + 1) = -110

按位反转仅能用在数字前面。所以写成 3+~5 可以得到结果-3,写成3~5就出错了。

(5)逻辑运算

 

技术分享

and注解:

  1. 在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值;而是,返回它们实际进行比较的值之一。
  2. 在布尔上下文中从左到右演算表达式的值,如果布尔上下文中的所有值都为真,那么 and 返回最后一个值。
  3. 如果布尔上下文中的某个值为假,则 and 返回第一个假值

or注解:

  1. 使用 or 时,在布尔上下文中从左到右演算值,就像 and 一样。如果有一个值为真,or 立刻返回该值
  2. 如果所有的值都为假,or 返回最后一个假值
  3. 注意 or 在布尔上下文中会一直进行表达式演算直到找到第一个真值,然后就会忽略剩余的比较值

and-or结合使用:

  1. 结合了前面的两种语法,推理即可。
  2. 为加强程序可读性,最好与括号连用,例如:
    (1 and ‘x‘) or ‘y‘

 (6)成员运算

技术分享

 

(7)身份运算 

 技术分享

(8)运算符优先级:自上而下,优先级从高到低

技术分享

 

 

初识Python