Python是一种面向对象的解释型语言, 源码和解释器CPython遵循 GPL协议。
年份 | 事件 |
---|---|
1989 | 荷兰人Guido van Rossum发明 |
1991 | 第一个公开发行版发行 |
当前版本 | 3.5.2 |
被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一般都会缺省安装,下载或者文档查询可以参照如下链接
项目 | 链接 |
---|---|
官网 | https://www.python.org |
下载 | https://www.python.org/downloads/ |
文档 | https://www.python.org/doc/ |
将Python的安装目录加入到PATH中即可
环境变量名 | 详细 |
---|---|
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
#!/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主要的保留字如下所示,全为小写
保留字 | 保留字 | 保留字 |
---|---|---|
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 ~]#
调试有很多种方式,使用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 ):
========================================
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也有些微涉猎,很基础的问题应该可以接触了。但是这还远远不够,需要我们在实际的工作中慢慢的升级我们的技能。