-
老鸟的
Python
入门教程
2013-07-09 22:27
131546
人阅读
评论
(34)
收藏
举报
分类:
Python
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录
(?)[+]
重要说明
这不是给编程新手准备的教
程
,
如果您入行编程不久
,
或者还没有使用过
1
到
2
门编程语言
,
请移步
< br>!
这是有一定编程经验的人准备的
.
最好是熟知
Java
或
C,
懂得命令行
,Shell
等
< br>.
总之
,
这是面向老鸟的
,
让老鸟快速上手
Python
教程
.
为什么总结这样的一个教程
我虽不是
老鸟
,
但已熟悉
Java,C/C++
, Shell
和
Perl,
且对常见
的数据结构
和算法等都了解
.
最近因项
目需要
,
要做一个小工具
,
评估后感觉用
Python
实现最为方便
,
于是就有了对
Python
< br>的学习
.
这时就需要一门快
速上
手
Python
的教程
:
因为编程语言的基本知识
,
以及如何实现程序对
p>
我来说不是难事
,
关键的就是如何具体使用
Python
语句来体现程序的逻
辑<
/p>
!Python
的书籍对我来说内容太多了
,
没有时间去看
,
查找也不是很容<
/p>
易
!
网上的资料又太零散
,
这就需要一个快速入门
Python
的教程
.
这里重点是以对比
的方式来说明
Python
与其语言的不同之处
,
和一些
Python
特有的
特性
,
以能以最快速度能用
Pytho
n
写程序
.
Python
是一门动态语言
与
Java,C
等相对
,Python
不用编译
,
像脚本一
样直接运行
.
这就导致了
,
所有错误都是运行时的
!
即使有语法错误
,
或者异常
,
如果程序
逻辑没有
执行到
,
就不会有错误
.
比如一个
if
分支
中有语法错误
,
使用了未定义的函
数<
/p>
,
但如果未执行到此分支
,
就可以正常运行
.
动态的另外一层意思就是它的类
型是动态的
,
也就是说无需指定变量的
类型
,
在运行时
,
根据它的内容来决定的类型
.
如何运行
Python
通常来讲有二种方式
,
一种方式是交互式的
,
就像
Shell
命令
行提示符那
样
,
交互式的
,
输入
,
就有输出;
在终端输入
python
< br>命令
,
就进入了
Python<
/p>
的命令提示符中
:>>>
输入
Python
语句
,
解释
器就会执行
,
并输出结果
,
如
:
[python]
view
plain
copy
print?
1.
[alex@alexon:~]$$python
2.
Python 2.7.3
(default, Apr 10 2013, 06:20:15)
3.
[GCC 4.6.3] on
linux2
4.
Type
,
,
or
for
more
informati
on.
5.
>>>
print
'hello,
world'
6.
hello, world
7.
>>>
输入
exit()
可以退出命令提示符
.
另外一种方式就是脚本
,
就像
Sh
ell
的脚本的一样
,
把一组命令集合
到一
起执行
,
这就能发挥更大的作用<
/p>
.
[python]
view
plain
copy
print?
1.
#!/usr/bin/python
2.
print
'hello,
world'
Python
以缩进来区分语句块
<
/p>
不像
Java,C/C++
以花括号
p>
{}
来区分语句块
.Python
是以缩进来表示语句
块
,
同一缩进级别为同一级别的语句块
.
一个脚本文件中的
p>
0
级缩进是文件加载的时候就会被执行的语句
,
如上
面的
print.
开启一个新的缩进需要使用
:(
冒号
),
代表下一级别的语句块
,
如条件
,
循环或者函数定义
.
p>
缩进最好使用四个空格
.
而且要注意缩进要
一致
,
使用空格就全都用空格
,
使用
Tab
就都使用
Tab,
混用就可能得到缩进错误
:
IndentationError: unindent does not
match any outer indentation level
操作符
与
J
ava
和
C
中十分类似
, +(
加
),
-(
减
),
*(
乘
),
/(
除
),
%(
求余
),
**(
指数运算
),
= (
赋值
).
以及减便运算
,
如
+=, -=,
*=
和
/=
等
.
赋值运算与其他语言一致
.
逻辑操作
><<= >= !=
==
与其他语言一样
.
不一样的有<
/p>
not
逻辑非
,and
< br>逻辑与和
or
逻辑或
.
注释与文档
一行当
中
,
从
#
开始
地方就是注释
.
不会影响下一行
. <
/p>
引号放在文件的开头
,
< br>函数的开头或者一个类的开头
,
就是文档注释
,
与
Java
中的
/** ...
*/
作用和目的是一样的
.
折行
如果一行太长了
,
写不下了
,
就需要在下一行
接着写
,
这时可以使用
来告
诉
Python,
下一行
继续
.
一行写多个语句
Python
是一个语句放在一行
,
行尾可以选择性的加上
;
但如果想在一行
放多个语句
,
就需要用
;
来分隔语
句
:
a = 1; b = 2; c = 3;
虽然这在语法上可行
,
但不是一个好习惯
,
绝大多数的编程规范都是要一
行写一个语句
.
基本数据类型
?
?
?
?
int
long
bool
float
与
Java
中非常接近
.
可以近似认为一致
.bool
的值是
True
和
p>
False,
或者
0(False),
p>
非
0
就是
True
.
List
和
Tuple
这就是
Java
或
p>
C
中的数组
.
它是
一个容器
,
能用来顺序的
,
以整数索引方
式检索
,
存储一组对象
.List
用
[]
来表示
,
如
[1,
2, 3]
就是一个
List
;
而
Tuple
用
()
来表示
,
如
(
3, 4, 5)
就是一个
Tuple.
它们的区别在于
List
是可变的;
而
Tuple
是不可变的
.
也就是说不可以增
,
删和改
.
索引方式除了与
Java
一样的
以一个整数下标方式外
,
还可以指定开始
,
结束和步长
,
和使用负索引来分割
List:
通用语法格式是
:lis
t[start:end:step]
?
?
list[index] ---
返回第
(index+1)
个元素
,
受<
/p>
C
语言影响
,
下
标亦是从
0
开始
list[start:end] ---
返回从
start
开始
,
到
p>
end-1,
也就是
list[start
],
list[start+1].....list[end-1]
?
?
?
list[start:end:step] ---
与上面
类似
,
只不过每隔
step
取一个
list[:end]
----
缺省的开端是
0
list[start:] ----
缺省的结尾是
len(list),
或者
-1
负数索引更是方便
,
它与正数的对应关系为
:
正数索引
0
1
2
3
数组元素
[1]
[3]
[5]
[7]
负数索引
-4
-3
-2
-1
实例
:
[python]
view
plain
copy
print?
1.
>>> a = [1, 3,
5, 7];
2.
>>> a[0]
3.
1
4.
>>> a[3]
5.
7
6.
>>> a[-1]
7.
7
8.
>>> a[-2]
9.
5
10.
>>> a[0:3]
11.
[1, 3, 5]
12.
>>> a[1:3:2]
13.
[3]
14.
>>> a[0:3:2]
15.
[1, 5]
16.
>>> a[0:-1:2]
17.
[1, 5]
18.
>>>
List
是一个对象
,
它有一此内置的方法
,
如
:
?
包含关系
: in, not in
[python]
view
plain
copy
print?
1.
>>> 3
in
a
2.
True
3.
>>> 8
in
a
4.
False
5.
>>> 8
not
in
a
6.
True
7.
>>>
?
连接符
: +
[python]
view
plain
copy
print?
1.
>>> a + [9,
11]
2.
[1, 3, 5, 7, 9, 11]
?
重复
:
*
[python]
view
plain
copy
print?
1.
>>> a * 2
2.
[1, 3, 5, 7, 1, 3, 5, 7]
3.
>>>
字符串
String
字符串就是一个字符的数组
,List
的操作都可以对
String
直接使用
.
[python]
view plain
copy
print?
1.
>>> str =
'hello, world'
2.
>>> str[0:3]
3.
'hel'
4.
>>> str[0:3:2]
5.
'hl'
6.
>>> str[-1]
7.
'd'
8.
>>> str * 2
9.
'hello, worldhello, world'
10.
>>>
'3'
in
str
11.
False
12.
>>>
'le'
in
str
13.
False
14.
>>>
'el'
in
str
15.
True
16.
>>>
'ell'
not
in
str
17.
False
18.
>>>
字串格式化符
%
< br>这是一个类似
C
语言
print
f
和
Java
中的
()
的操作符
,
它能
格式化字串
,
整数
,
浮点等类型
:
语句是
:
formats % (var1,
var2,....)
它返回的是一个
String.
[python]
view
plain
copy
print?
1.
>>>
% (5, 2.3,
'hello'
)
2.
3.
>>>
Dictionary
字典
相当于
Java
中的
H
ashMap,
用于以
Key/Value
方式存储的容器
.
创建方
式为
p>
{key1: value1, key2: value2, ....},
更改方式为
dict[key] =
new_value
;索引方式为
dict[key]. ()
方法以
List
形式返回容器
中所有的
Key
;
()
以
List
方式返回容器中的所有的<
/p>
Value:
[python]
view
plain
copy
print?
1.
>>> box =
{
'fruits'
: [
'appl
e'
,
'orange'
],
'money'
: 1993,
'name'
:
'ob
ama'
}
2.
>>> box[
'fruits'
]
3.
[
'apple'
,
'orange'
]
4.
>>>
box[
'money'
]
5.
1993
6.
>>> box[
'money'
]
= 29393
7.
>>> box[
'money'
]
8.
29393
9.
>>>
box[
'nation'
] =
'USA'
10.
>>> box
11.
{
'money'
: 29393,
'nation'
:
'USA'
,
'name'
:
'obama'
,
'fruits'
:
[
'appl
e'
,
'orange'
]}
12.
>>> ()
13.
[
'money'
,
'nation'
,
'name'
,
'fruits'
]
14.
>>> ()
15.
[29393,
'USA'
,
'obama'
,
[
'apple'
,
'orange'
]]
16.
>>>
分支语句
格式为
:
[python]
view
plain
copy
print?
1.
if
expression:
2.
blocks;
3.
elif
expression2:
4.
blocks;
5.
else
:
6.
blocks;
其中逻辑表达式可以加上括号
(),
也可以不加
.
但如果表达式里面比较混
乱
,
还是要加上括号
< br>,
以提高清晰
.
但整体的逻辑表
达式是可以不加的
:
[python]
view
plain
copy
print?
1.
>>> a = 3; b =
4; c = 5;
2.
>>>
if
a == b
and
a != c:
3.
...
print
4.
...
elif
(a == c
and
b == c):
5.
...
print
6.
...
else
:
7.
...
print
8.
...
9.
I
am
not
sure
10.
>>>
while
循环
与
Java
中类似
:
while expression:
blocks
[python]
view
plain
copy
print?
1.
>>> i = 0;
2.
>>>
while
i < 3:
3.
...
print
;
4.
... i += 1;
5.
...
6.
I am repeating
7.
I
am repeating
8.
I am repeating
9.
>>>
for
语句
与
Java
中的
foreach
语法一样
,
遍历
List:
for var in list:
blocks;
[python]
view
plain
copy
print?
1.
>>> msg =
;
2.
>>>
for
c
in
msg:
3.
...
print
c;
4.
...
5.
H
6.
e
7.
l
8.
l
9.
o
10.
>>>
数组推导
这是
Python
最强大
,
也是最性感的
功能
:
list =
[expression for var in list condition]
它相当于这样的逻辑
:
list = [];
for var in list:
if condition:
execute expression;
add result of expression to list
return
list;
一句话
,
相当于这么多逻辑
,
可见数组推导是一个十分强大的功
能
:
[python]
view
plain
copy
print?
1.
>>> a =
range(4);
2.
>>> a
3.
[0, 1, 2, 3]
4.
>>> [x*x
for
x
in
a
if
x % 2 == 0]
5.
[0, 4]
6.
>>>
遍历列表
a,
对其是偶数的项
,
乘方<
/p>
.
函数
如何定义函数
def
function_name(args):
function_body;
调用函数的方式
function_name(formal_
args):
[python]
view plain
copy
print?
1.
>>>
def
power(x):
2.
...
return
x*x;
3.
...
4.
>>> power(4)
5.
16
6.
>>>
Python
中函数也是一个对象
,
可以赋值
< br>,
可以拷贝
,
可以像普通变量那
样
使用
.
其实可以理解为
C
语言中的指针
:
[python]
view
plain
copy
print?
1.
class
=
>>>> d = power;
2.
>>> d(2)
3.
4
4.
另外就
是匿名函数
,
或者叫做
lambda<
/p>
函数
,
它没有名字
,
只有参数和表达
式
:
lambda
args:
expression
[python]
view
plain
copy
print?
1.
>>> d =
lambda
x: x*x;
2.
>>> d(2)
3.
4
lambda
最大的用处是用作实参
:
[python]
view
plain
copy
print?
1.
>>>
def
iter(func, list):
2.
... ret = [];
3.
...
for
var
in
list:
4.
...
(func(var));
5.
...
return
ret;
6.
...
7.
>>>
iter(
lambda
x: x*x, a)
8.
[0, 1, 4, 9]
9.
>>>
一些常用的内置函数
所谓内置函数
,
就是不用任何导入
< br>,
语言本身就支持的函数
: