Python是一种面向对象的解释型语言, 源码和解释器CPython遵循 GPL协议。
年份 |
事件 |
1989 |
荷兰人Guido van Rossum发明 |
1991 |
第一个公开发行版发行 |
当前版本 |
3.5.2 |
TIOBE年度语言
被TIOBE编程语言排行榜2007/2010两度评为年度语言,其他同样拥有这一殊荣的在总多的语言中目前只有Object-C和Java加上今年新晋的Go
年份 |
年度语言 |
2003年 |
C++ |
2004年 |
PHP |
2005年 |
Java |
2006年 |
Ruby |
2007年 |
Python |
2008年 |
C |
2009年 |
Go |
2010年 |
Python |
2011年 |
Objective-C |
2012年 |
Objective-C |
2013年 |
Transact-SQL |
2014年 |
JavaScript |
2015年 |
Java |
2016年 |
Go |
安装
Linux或者Unix一般都会缺省安装,下载或者文档查询可以参照如下链接
环境变量:PATH
将Python的安装目录加入到PATH中即可
Python自身环境变量
环境变量名 |
详细 |
PYTHONPATH |
PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找。 |
PYTHONSTARTUP |
Python启动后,先寻找PYTHONSTARTUP环境变量,然后执行此文件中变量指定的执行代码。 |
PYTHONCASEOK |
加入PYTHONCASEOK的环境变量, 就会使python导入模块的时候不区分大小写. |
PYTHONHOME |
另一种模块搜索路径。它通常内嵌于的PYTHONSTARTUP或PYTHONPATH目录中,使得两个模块库更容易切换。 |
版本确认
python版本确认可以通过如下命令进行
[root@liumiaocn ~]# python --version
Python 2.7.5
[root@liumiaocn ~]#
第一个Helloworld.py
内容:Helloworld.py
#!/usr/bin/python
print "Hello World"
执行:python Helloworld.py
结果
[root@liumiaocn ~]# python Helloworld.py
Hello World
[root@liumiaocn ~]#
#!/usr/bin/python为第一行信息,和shell脚本一样,是用来说明解释所用的shell或者python所在路径。
指导思想
The Zen of Python:There should be one– and preferably only one –obvious way to do it.同时有意的设计限制性很强的语法,比如缩进不正确可能通过编译的语言大概除此之外少有分店。如下代码将不能通过编译,会提示你”expected an indented block”,只有在第3行的print前加一个空格才能通过。其实仔细确认一下可能也会理解,因为在python中不像很多语言用{}来区分代码块。
#!/usr/bin/python
if True:
print "Hello World"
确认
[root@liumiaocn ~]# cat IndentSample.py
#!/usr/bin/python
if True:
print "Hello World"
[root@liumiaocn ~]# python IndentSample.py
File "IndentSample.py", line 3
print "Hello World"
^
IndentationError: expected an indented block
[root@liumiaocn ~]#
加上一个空格的缩进, 则能正常执行。
[root@liumiaocn ~]# cp IndentSample.py IndentSampleFixed.py
[root@liumiaocn ~]# vi IndentSampleFixed.py
[root@liumiaocn ~]# diff IndentSample.py IndentSampleFixed.py
3c3
< print "Hello World"
---
> print "Hello World"
[root@liumiaocn ~]# python IndentSampleFixed.py
Hello World
[root@liumiaocn ~]#
所以,在Python里,缩进还真不是小事,缩进表示块的开始,逆缩进表示块的结束。把这件事情重视起来,统一缩进必须上升到上纲上线的地步,不然,连编译都通不过的代码谈什么质量呢。
python保留字
python主要的保留字如下所示,全为小写
保留字 |
保留字 |
保留字 |
and |
exec |
not |
assert |
finally |
or |
break |
for |
pass |
class |
from |
print |
continue |
global |
raise |
def |
if |
return |
del |
import |
try |
elif |
in |
while |
else |
is |
with |
except |
lambda |
yield |
大小写敏感
Python属于大小写敏感的编程语言,不过不敏感的语言也越来越少了
多行的写法
使用连接符:\
sum = 1 + 2 + 3
print sum
{}或[]或()中不需要使用连接符
注释
注释类型 |
注释Sample |
单行注释 |
注释内容 |
单行注释 |
sum=1+1 #注释内容 |
多行注释 |
三个单引号开始 到 三个单引号结束中间的内容全为注释 |
多行注释 |
三个双引号开始 到 三个双引号结束中间的内容全为注释 |
帮助
使用python的在线帮助,比如string相关的方法的方法,使用如下方法(help查看详细文档,dir查看方法列表)
>>> import string
>>> help(string)
>>> dir(string)
python的各种库确认:ls -l /usr/lib64/python*/*.py
变量和作用域
python的变量根据其定义的位置分为全局变量和局部变量两种。局部变量只能用于被声明的函数内部,而全局则可在整个程序范围内使用。
标准数据类型
python支持的标准数据类型
项目 |
类型 |
说明 |
Numbers |
数字 |
支持int/float/long/complex |
String |
字符串 |
|
List |
列表 |
类似数组。下标从0开始,-1表示最后一个元素 |
Tuple |
元组 |
类似只读数组 |
Dictionary |
字典 |
类似Hash |
python所支持的复数类型complex的虚部和实部的类型为float,一般表示为complex(a,b)
数据类型转换函数
函数 |
描述 |
int(x [,base]) |
将x转换为一个整数 |
long(x [,base] ) |
将x转换为一个长整数 |
float(x) |
将x转换到一个浮点数 |
complex(real [,imag]) |
创建一个复数 |
str(x) |
将对象 x 转换为字符串 |
repr(x) |
将对象 x 转换为表达式字符串 |
eval(str) |
用来计算在字符串中的有效Python表达式,并返回一个对象 |
tuple(s) |
将序列 s 转换为一个元组 |
list(s) |
将序列 s 转换为一个列表 |
set(s) |
转换为可变集合 |
dict(d) |
创建一个字典。d 必须是一个序列 (key,value)元组。 |
frozenset(s) |
转换为不可变集合 |
chr(x) |
将一个整数转换为一个字符 |
unichr(x) |
将一个整数转换为Unicode字符 |
ord(x) |
将一个字符转换为它的整数值 |
hex(x) |
将一个整数转换为一个十六进制字符串 |
oct(x) |
将一个整数转换为一个八进制字符串 |
常见比较和判断
类型判断例
判断内容 |
详细说明 |
是否数字类型 |
type(x) is types.IntType 需要import types |
是否数字类型 |
type(x) == types(0) |
是否String类型 |
type(x) is types.StringType 需要import types |
是否String类型 |
type(x) is type(” “) |
条件判断
条件判断入门实例
[root@liumiaocn ~]# cat basic-if1.py
#!/usr/bin/python
score = 50
if score < 60 :
print 'E'
elif score < 70 :
print 'D'
elif score < 80 :
print 'C'
elif score < 90 :
print 'B'
else :
print 'A'
[root@liumiaocn ~]#
执行确认
[root@liumiaocn ~]# python basic-if1.py
E
[root@liumiaocn ~]#
循环控制
循环控制入门实例
[root@liumiaocn ~]# cat basic-loop.py
#!/usr/bin/python
level = 0
while level < 10 :
cnt = 0
while cnt < 10-level :
cnt = cnt + 1
print(" ") ,
ascnt = 0
while ascnt < 2*level-1 :
ascnt = ascnt + 1
print("*") ,
print("")
level = level + 1
[root@liumiaocn ~]#
执行
[root@liumiaocn ~]# python basic-loop.py
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *
* * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
[root@liumiaocn ~]#
函数
使用def进行定义,简单示例如下:
[root@liumiaocn ~]# cat basic-func.py
#!/usr/bin/python
def hellofun( str ):
print "Hello : ",
print str;
return;
hellofun("liumiao")
[root@liumiaocn ~]#
执行确认
[root@liumiaocn ~]# python basic-func.py
Hello : liumiao
[root@liumiaocn ~]#
debug
调试有很多种方式,使用pdb(python debugger)是最常见的方式也不受IDE等的限制,此处简单介绍pdb的用法
gdb命令 |
描述 |
break 或 b |
设置断点 |
continue 或 c |
继续执行程序 |
list 或 l |
查看当前行的代码段 |
step 或 s |
进入函数 |
return 或 r |
执行代码直到从当前函数返回 |
exit 或 q |
中止并退出 |
next 或 n |
执行下一行 |
pp |
打印变量的值 |
help |
帮助 |
执行方式:python -m pdb python脚本名称
调试示例
对上文的循环例子的脚本使用pdb进行调试如下:
[root@liumiaocn ~]# python -m pdb basic-loop.py
> /root/basic-loop.py(3)<module>()
-> level = 0
(Pdb) l 很多与gdb使用方式都一样,l for list,列出上下文source
1 #!/usr/bin/python
2
3 -> level = 0
4 while level < 10 :
5 cnt = 0
6 while cnt < 10-level :
7 cnt = cnt + 1
8 print(" ") ,
9
10 ascnt = 0
11 while ascnt < 2*level-1 :
(Pdb) b 11 设定断点
Breakpoint 1 at /root/basic-loop.py:11
(Pdb) c 继续执行
> /root/basic-loop.py(11)<module>()
-> while ascnt < 2*level-1 :
(Pdb) pp ascnt 查询变量值
0
(Pdb) p cnt
10
(Pdb) c
> /root/basic-loop.py(11)<module>()
-> while ascnt < 2*level-1 :
(Pdb) c
* > /root/basic-loop.py(11)<module>()
-> while ascnt < 2*level-1 :
(Pdb) c
> /root/basic-loop.py(11)<module>()
-> while ascnt < 2*level-1 :
(Pdb) c
* > /root/basic-loop.py(11)<module>()
-> while ascnt < 2*level-1 :
(Pdb) c
* > /root/basic-loop.py(11)<module>()
-> while ascnt < 2*level-1 :
(Pdb) c
* > /root/basic-loop.py(11)<module>()
-> while ascnt < 2*level-1 :
(Pdb) help 查看帮助
Documented commands (type help <topic>):
========================================
EOF bt cont enable jump pp run unt
a c continue exit l q s until
alias cl d h list quit step up
args clear debug help n r tbreak w
b commands disable ignore next restart u whatis
break condition down j p return unalias where
Miscellaneous help topics:
==========================
exec pdb
Undocumented commands:
======================
retval rv
(Pdb) clear 清除断点
Clear all breaks? y
(Pdb) c
* * * * *
* * * * * * *
* * * * * * * * *
* * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
The program finished and will be restarted
> /root/basic-loop.py(3)<module>()
-> level = 0
(Pdb) q 退出
[root@liumiaocn ~]#
总结
至此,基本的词法,简单的语法应该基本能写了,问题解决时候的debug也有些微涉猎,很基础的问题应该可以接触了。但是这还远远不够,需要我们在实际的工作中慢慢的升级我们的技能。
|