一、 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 是一门什么样的语言?
编程语言主要从以下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.
编译型和解释型
一、低级语言与高级语言
最初的计算机程序都是用0和1的序列表示的,程序员直接使用的是机器指令,无需翻译,从纸带打孔输入即可执行得到结果。后来为了方便记忆,就将用0、1序列表示的机器指令都用符号助记,这些与机器指令一一对应的助记符就成了汇编指令,从而诞生了汇编语言。无论是机器指令还是汇编指令都是面向机器的,统称为低级语言。因为是针对特定机器的机器指令的助记符,所以汇编语言是无法独立于机器(特定的CPU体系结构)的。但汇编语言也是要经过翻译成机器指令才能执行的,所以也有将运行在一种机器上的汇编语言翻译成运行在另一种机器上的机器指令的方法,那就是交叉汇编技术。
高级语言是从人类的逻辑思维角度出发的计算机语言,抽象程度大大提高,需要经过编译成特定机器上的目标代码才能执行,一条高级语言的语句往往需要若干条机器指令来完成。高级语言独立于机器的特性是靠编译器为不同机器生成不同的目标代码(或机器指令)来实现的。那具体的说,要将高级语言编译到什么程度呢,这又跟编译的技术有关了,既可以编译成直接可执行的目标代码,也可以编译成一种中间表示,然后拿到不同的机器和系统上去执行,这种情况通常又需要支撑环境,比如解释器或虚拟机的支持,Java程序编译成bytecode,再由不同平台上的虚拟机执行就是很好的例子。所以,说高级语言不依赖于机器,是指在不同的机器或平台上高级语言的程序本身不变,而通过编译器编译得到的目标代码去适应不同的机器。从这个意义上来说,通过交叉汇编,一些汇编程序也可以获得不同机器之间的可移植性,但这种途径获得的移植性远远不如高级语言来的方便和实用性大。
低级语言与高级语言
1 通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。
2
3 (1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。
4
5 (2)静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
动态语言和静态语言
(1)强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
(2)弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。
强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。
强类型定义语言和弱类型定义语言
通过上面这些介绍,我们可以得出,python是一门动态解释性的强类型定义语言。
Python解释器
当我们编写Python代码时,我们得到的是一个包含Python代码的以.py
为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py
文件。
Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性
二、Python安装
1、下载安装包
https://www.python.org/downloads/
2、安装
默认安装路径:C:\python27
3、配置环境变量
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】
如:原来的值;C:\python27,切记前面有分号
windows
无需安装,原装Python环境
linux、Mac
三、变量
声明变量
1 #_*_coding:utf-8_*_
2
3 name = "hl"
上述代码声明了一个变量,变量名为: name,变量name的值为:"hl"
变量定义的规则:
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名
['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']
变量的赋值
1 name = "hl"
2 name2 = name
3 print(name,name2)
4 name = "hello world"
5 print(name,name2)
四、字符编码
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)
ASCII(美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。
关于中文
1980年的GB2312
1995年的 GBK1.0
2000年的 GB18030
从ASCII、GB2312、GBK 到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集。
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存
注释
当行注视:# 被注释内容
多行注释:""" 被注释内容 """
五、用户输入
1 #!/usr/bin/env python
2 #-*-coding:utf-8-*-
3
4 #name = raw_input("What is your name?") #only on python 2.x
5 name = input("What is your name? ")
6 print("Your name is",name)
输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import getpass
pwd = getpass.getpass("请输入密码:")
print(pwd)
View Code
1 #!/usr/bin/env python
2 #-*-coding:utf-8-*-
3 #Author:martin
4
5 name = input("your name is:")
6 age = int(input("your age is:"))
7 print(type(age),type(str(age)))
8 job = input("your job is:")
9 print(name,age,job)
10
11 info = '''info of {_name}
12 name: {_name}
13 age: {_age}
14 job: {_job}
15 '''.format(_name=name,
16 _age=age,
17 _job=job)
18
19 print(info)
20
21 info2 = ''' info of %s
22 name: %s
23 age: %d
24 job:%s
25 ''' % (name,name,age,job)
26
27 print(info2)
28
29
30 info3 = '''info of {0}
31 name: {0}
32 age: {1}
33 job: {2}
34 '''.format(name,age,job)
35
36 print(info3)
37
38
39 info4 = ''' info of ''' + name + '''
40 name: ''' + name + '''
41 age: ''' + age + '''
42 job: ''' + job
43
44 print(info4)
格式化输出
1 #Author:martin
2 for i in range(1,10,2):
3 print("number:",i)
4
5 for i in range(10):
6 if i < 3:
7 print("number",i)
8 else:
9 break
10 print("hehe")
for循环
1 #!/usr/bin/env python
2 # -*-coding:utf-8-*-
3 #Author:martin
4 _username = "hl"
5 _password = "123"
6
7 count = 0
8 while count < 3:
9 username = input("username:")
10 password = input("password:")
11 if username == _username and password == _password:
12 print("Welcome to login:{name}".format(name=username))
13 break
14 count +=1
15 else:
16 print("you try too much ,bye!")
login
1 #!/usr/bin/env python
2 age_of_oldboy = 40
3 count =0
4 while count < 3:
5 guess_age = int(input("your guess_age: "))
6 if guess_age == age_of_oldboy:
7 print("yes ,you get it.")
8 break
9 elif guess_age > age_of_oldboy:
10 print("think smaller.")
11 else:
12 print("think bigger.")
13 count +=1
14 else:
15 print("You try too much ,byebye!")
guess_age
1 #!/usr/bin/env python
2 #Author:martin
3 age_of_oldboy = 40
4 count = 0
5 while count < 3:
6 guess_age = int(input("your guess age:"))
7 if age_of_oldboy == guess_age:
8 print("Yse,you are righi.")
9 break
10 elif age_of_oldboy > guess_age:
11 print("guess bigger!")
12 else:
13 print("guess smaller!")
14 count +=1
15 if count == 3:
16 print("would like continue to geussing?")
17 continue_config = input("[y/n]:")
18 if continue_config != "n":
19 count = 0
guess_ask
六、模块初识
Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持
sys
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 import sys
4 print(sys.path) #获取系统路径
5 print(sys.argv) #获取系统参数
View Code
os
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os,sys
cmd_res = os.system("dir") #调用系统命令,单纯的输出显示
print("---->",cmd_res)
cmd_res = os.popen("dir").read() #输出到内存中,通过read读取
print("---->",cmd_res)
View Code
自己写个模块
python tab补全模块
1 import sys
2 import readline
3 import rlcompleter
4
5 if sys.platform == 'darwin' and sys.version_info[0] == 2:
6 readline.parse_and_bind("bind ^I rl_complete")
7 else:
8 readline.parse_and_bind("tab: complete") # linux and python3 on mac
9
10 for mac
for mac
1 #!/usr/bin/env python
2 # python startup file
3 import sys
4 import readline
5 import rlcompleter
6 import atexit
7 import os
8 # tab completion
9 readline.parse_and_bind('tab: complete')
10 # history file
11 histfile = os.path.join(os.environ['HOME'], '.pythonhistory')
12 try:
13 readline.read_history_file(histfile)
14 except IOError:
15 pass
16 atexit.register(readline.write_history_file, histfile)
17 del os, histfile, readline, rlcompleter
18
19 for Linux
for linux
import
tab
你会发现,上面自己写的tab.py模块只能在当前目录下导入,如果想在系统的何何一个地方都使用怎么办呢? 此时你就要把这个tab.py放到python全局环境变量目录里啦,基本一般都放在一个叫python/3.6/site-package 目录下,这个目录在不同的os里放的位置不一样,用print(sys.path)可以查到python的环境变量列表。
七、数据类型初识
1、数字
int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1
View Code
long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
View Code
float(浮点型)
浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
View Code
complex(复数)
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
注:Python中存在小数字池:-5 ~ 257
View Code
2、布尔值
真或假
1 或 0
3、字符串
name = "martin"
print("I am %s" % name)
字符串格式化输出
PS: 字符串是%s;整数 %d;浮点数%f
4、列表
name = ["Martin","Annie","JMA",["a","b"],"Martin","Ly"]
5、元组:
1
6、字典(无序)
info = {"stud001": "xiaoming", "stud002": "xiaohong", "stud003": "xiaodong", "stud004": "xiaomei"}
八、数据运算
算数运算:
比较运算:
赋值运算:
逻辑运算:
成员运算:
身份运算:
位运算:
1 #!/usr/bin/python
2
3 a = 60 # 60 = 0011 1100
4 b = 13 # 13 = 0000 1101
5 c = 0
6
7 c = a & b; # 12 = 0000 1100
8 print "Line 1 - Value of c is ", c
9
10 c = a | b; # 61 = 0011 1101
11 print "Line 2 - Value of c is ", c
12
13 c = a ^ b; # 49 = 0011 0001 #相同为0,不同为1
14 print "Line 3 - Value of c is ", c
15
16 c = ~a; # -61 = 1100 0011
17 print "Line 4 - Value of c is ", c
18
19 c = a << 2; # 240 = 1111 0000
20 print "Line 5 - Value of c is ", c
21
22 c = a >> 2; # 15 = 0000 1111
23 print "Line 6 - Value of c is ", c
View Code
运算符优先级:
更多内容:http://www.runoob.com/python/python-operators.html
九、表达式if ... else
场景一、用户登陆验证
- 输入用户名密码
- 认证成功后显示欢迎信息
- 输错三次后锁定
1 _username = "hl"
2 _password = "123"
3 count = 0
4 while count < 3:
5 username = input("username:")
6 password = input("password:")
7 if username == _username and password == _password:
8 print("Welcome to login:{name}".format(name=username))
9 break
10 count += 1
11 else:
12 print("you try too much ,bye!")
View Code
场景二、猜年龄游戏
在程序里设定好你的年龄,然后启动程序让用户猜测,用户输入后,根据他的输入提示用户输入的是否正确,如果错误,提示是猜大了还是小了
1 age_of_oldboy = 40
2 count = 0
3 while count < 3:
4 guess_age = int(input("your guess age:"))
5 if age_of_oldboy == guess_age:
6 print("Yse,you are righi.")
7 break
8 elif age_of_oldboy > guess_age:
9 print("guess bigger!")
10 else:
11 print("guess smaller!")
12 count +=1
13 if count == 3:
14 print("would like continue to geussing?")
15 continue_config = input("[y/n]:")
16 if continue_config != "n":
17 count = 0
View Code
外层变量,可以被内层代码使用
内层变量,不应被外层代码使用
十、表达式for loop
最简单的循环10次
for i in range(10):
print("loop:", i )
需求一:还是上面的程序,但是遇到小于5的循环次数就不走了,直接跳入下一次循环
1 for i in range(10):
2 if i<5:
3 continue #不往下走了,直接进入下一次loop
4 print("loop:", i )
需求二:还是上面的程序,但是遇到大于5的循环次数就不走了,直接退出
1 for i in range(10):
2 if i>5:
3 break #不往下走了,直接跳出整个loop
4 print("loop:", i )
十一、while loop
count = 0
while True:
print("output>>",count)
count +=1
if count == 100:
print("exit..")
break