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
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)()
-> 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)()
-> while ascnt < 2*level-1 :
(Pdb) pp ascnt 查询变量值
0
(Pdb) p cnt
10
(Pdb) c
> /root/basic-loop.py(11)()
-> while ascnt < 2*level-1 :
(Pdb) c
* > /root/basic-loop.py(11)()
-> while ascnt < 2*level-1 :
(Pdb) c
> /root/basic-loop.py(11)()
-> while ascnt < 2*level-1 :
(Pdb) c
* > /root/basic-loop.py(11)()
-> while ascnt < 2*level-1 :
(Pdb) c
* > /root/basic-loop.py(11)()
-> while ascnt < 2*level-1 :
(Pdb) c
* > /root/basic-loop.py(11)()
-> while ascnt < 2*level-1 :
(Pdb) help 查看帮助
Documented commands (type help ):
========================================
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)()
-> level = 0
(Pdb) q 退出
[root@liumiaocn ~]#
总结
至此,基本的词法,简单的语法应该基本能写了,问题解决时候的debug也有些微涉猎,很基础的问题应该可以接触了。但是这还远远不够,需要我们在实际的工作中慢慢的升级我们的技能。