一.了解python
python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。
Python已经成为最受欢迎的程序设计语言之一,自从2004年以后,python的使用率是呈线性增长,由于Python语言的简洁、易读以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python教授程序设计课程。
由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!!
Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。互联网公司广泛使用Python来做的事一般有:自动化运维、自动化测试、大数据分析、爬虫、Web 。
目前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和其他语言的对比
C 和 Python、Java、C#等
C语言: 代码编译得到 机器码 ,机器码在处理器上直接执行,每一条指令控制CPU工作
其他语言: 代码编译得到 字节码 ,虚拟机执行字节码并转换成机器码再后在处理器上执行
对于使用:Python的类库齐全并且使用简洁,如果要实现同样的功能,Python 10行代码可以解决,C可能就需要100行甚至更多.
对于速度:Python的运行速度相较与C,绝逼是慢了
Python 和 Java、C#等
对于使用:Linux原装Python,其他语言没有;以上几门语言都有非常丰富的类库支持
对于速度: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 ...
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
2.x与3.x版本对比
版本 | 2.x | 3.x |
print " "或者print()打印都可以正常输出 |
只能print()这种形式打印,否则会出现 SyntaxErro |
|
input raw_inut |
input:输出原生的数据类型,输入什么类型的值,就输出什么类型 raw_input:全部以字符串形式输出 |
3.x取消了raw_input方法,只能使用input() 方式提示输入字符串, 该方法和2.x版本的raw_input() 如果想要实现与2.x input()输出原生数据类型的值, 可以使用eval(input()) |
class | 2.x支持新式类,和经典类,使用新式类时,类继承顺序会影响最终继承的结果 | 必须使用新式类,解决了类间继承顺序问题 |
/ | 例如:1/2,2.x输出的值为0 |
例如:1/2 3.x输出的值为0.5 |
二.python的安装
python 官方网站获取相关安装包:
windows 安装方法:
1
、下载安装包
https:
/
/
www.python.org
/
downloads
/
2
、安装
默认安装路径:C:\python27
3
、配置环境变量
【右键计算机】
-
-
》【属性】
-
-
》【高级系统设置】
-
-
》【高级】
-
-
》【环境变量】
-
-
》【在第二个内容框中找到 变量名为Path 的一行,双击】
-
-
> 【Python安装目录追加到变值值中,用 ; 分割】
如:原来的值;C:\python27,切记前面有分号
三.python入门
print("hello world")
[root@15f-rec-dev-01 www]# python
Python 2.7.2 (default, Jul 15 2013, 19:48:19)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print("hello world ")
hello world
>>>
创建文件.py 执行第一个程序 创建hell.py
[root@15f-rec-dev-01 www]# ls
hell.py
[root@15f-rec-dev-01 www]# cat hell.py
#!/bin/env python print ("hello world") [root@15f-rec-dev-01 www]# python hell.py
hello world
[root@15f-rec-dev-01 www]#
#!/bin/env python 为指定python解释器,指定此脚本由 /bin/env下的python来执行因此也可以直接用 ./ 直接执行如下:
[root@15f-rec-dev-01 www]# chmod +x hell.py
[root@15f-rec-dev-01 www]# ./hell.py
hello world
[root@15f-rec-dev-01 www]#
声明变量:变量名为address 值为 beijing
# -*- coding:utf-8 -*- address = "beijing"
变量定义规则:
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名
['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']
字符编码
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。
ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)
ascii码无法表示中文报错:
print "你好"
改正:应该显示的告诉python解释器,用什么编码来执行源代码,即
# -*- coding:utf-8 -*-
print("你好")
注释:
单行注释: #被注释内容
多行注释:''' 被注释内容 '''
用户输入
input ():
raw_input(): ----python3.x 已经取消掉
如下代码,获取用户输入:
#!/bin/env python
#-*- coding:utf-8 -*- # name = raw_input("please insert your name: ") onley on 2.x
name = input("please insert your name :") print("Hello" + name)
getpass 模块中的getpass方法:隐藏用户输入的密码(正宗的密码输入方法)
#!/bin/env python
#-*- coding:uth-8 -*-
import getpass passwd = getpass.getpass("plz insert password:") print(passwd)
python简单模块
Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,以后的课程中会深入讲解常用到的各种库,如下两个简单的库:
sys
#!/bin/env python
#-*- coding:utf-8 -*- import sys print(sys.argv) # 输出 [root@15f-rec-dev-01 www]# python test.py hell world
['test.py', 'hell', 'world']
os
#!/bin/env python
#-*- coding:utf-8 -*- import os os.system("df -h") ##输出 [root@15f-rec-dev-01 www]# python os.py
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
8.3G 4.5G 3.4G 58% /
/dev/vda1 487M 23M 440M 5% /boot
tmpfs 7.9G 0 7.9G 0% /dev/shm
/dev/vdb 200G 82G 119G 41% /opt
简单结合:
#!/bin/env python
#-*- coding:utf-8 -*- import os,sys os.system(''.join(sys.argv[1:])) #输出
[root@15f-rec-dev-01 www]# python os.py "df -Th"
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
ext3 8.3G 4.5G 3.4G 58% /
/dev/vda1 ext3 487M 23M 440M 5% /boot
tmpfs tmpfs 7.9G 0 7.9G 0% /dev/shm
/dev/vdb xfs 200G 82G 119G 41% /opt
python表达式
# -*- coding:utf-8 -*-
# Author:wencheng.zhao username = "wencheng"
passwd = "" in_username = input("username:")
in_passwd = input("passwd:") if username == in_username and passwd == in_passwd:
print('登陆成功.') else:
print('用户名或者密码输入错误...')
如下猜数字场景
# -*- coding:utf-8 -*-
# Author:wencheng.zhao age = 21
count = 0
for i in range(10):
if count < 3:
guessnum = int(input('plz insert your guess num:'))
if age == guessnum:
print("恭喜,,猜对了!!!")
break
elif guessnum > age:
print("猜大了,再小点。。。")
else:
print("猜小了,再大点。。。")
else:
#print("尝试次数超过3,自动退出。。再见")
#break
con_cconfirm = input("是否继续: y or n:")
if con_cconfirm == "y":
count = 0
continue
else:
print("退出。。再见")
break
count += 1
for 循环语句:
#!/bin/env python
#-*- coding:utf-8 -*- for i in range(10):
print("hello",i)
输出结果如下:
[root@vm-t0-1-data1 wencheng]# python for.py
('hello', 0)
('hello', 1)
('hello', 2)
('hello', 3)
('hello', 4)
('hello', 5)
('hello', 6)
('hello', 7)
('hello', 8)
('hello', 9)
for 中continue 与 break :
continue : 结束本次循环直接进入到下一次循环如下:
#!/bin/env python
#-*- coding:utf-8 -*- for i in range(10):
if i < 5:
continue
print("hello",i)
执行结果如下:
[root@vm-t0-1-data1 wencheng]# python for.py
('hello', 5)
('hello', 6)
('hello', 7)
('hello', 8)
('hello', 9)
break:结束整个循环(注意如下例子中的比较符号改为大于)
#!/bin/env python
#-*- coding:utf-8 -*- for i in range(10):
if i > 5:
break
print("hello",i)
执行结果如下:
[root@vm-t0-1-data1 wencheng]# python for.py
('hello', 0)
('hello', 1)
('hello', 2)
('hello', 3)
('hello', 4)
('hello', 5)