数据类型和变量
整型
与其他语言无异
例如:
1
,
100
,
-8080
,
0
,等等。
计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用
0x
前缀和0-9,a-f表示,例如:
0xff00
,
0xa5b4c3d2
,等等。
浮点型
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x10
9
和12.3x10
8
是完全相等的。浮点数可以用数学写法,如
1.23
,
3.14
,
-9.01
,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x10
9
就是
1.23e9
,或者
12.3e8
,0.000012可以写成
1.2e-5
,等等。
字符串
单引号和双引号并无区别
布尔型
一个布尔值只有
True
、
False
两种值,要么是
True
,要么是
False
布尔值可以用
and
、
or
和
not
运算。
空值
空值是Python里一个特殊的值,用
None
表示。
None
不能理解为
0
,因为
0
是有意义的,而
None
是一个特殊的空值。
变量
python变量本身类型不固定
常量
在Python中,通常用全部大写的变量名表示常量
python中有两种除法和一个取余
/
除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数:
10
/
3
3.3333333333333335
9
/
3
3.0
还有一种除法是
//
,称为地板除,两个整数的除法仍然是整数:
10
// 3
3
取余
10
%
3
1
字符串和编码
字符编码
我们通常在文件开头写上这两行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
格式化输出
在Python中,采用的格式化方式和C语言是一致的,用
%
实现,举例如下:
>>>
'Hello, %s'
%
'world'
'Hello, world'
>>>
'Hi, %s, you have $%d.'
% (
'Michael'
,
1000000
)
'Hi, Michael, you have $1000000.'
list
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
比如,列出班里所有同学的名字,就可以用一个list表示:
>>>
classmates = [
'Michael'
,
'Bob'
,
'Tracy'
]
>>>
classmates[
'Michael'
,
'Bob'
,
'Tracy'
]
变量
classmates
就是一个list。用
len()
函数可以获得list元素的个数:
>>>
len(classmates)
3
用索引来访问list中每一个位置的元素,记得索引是从
0
开始的:
>>> classmates[0]'Michael'
如果要取最后一个元素,除了计算索引位置外,还可以用
-1
做索引,直接获取最后一个元素:
>>>
classmates[-
1
]
'Tracy'
以此类推,可以获取倒数第2个、倒数第3个:
>>> classmates[-2]'Bob'>>> classmates[-3]'Michael'
list是一个可变的有序表,所以,可以往list中追加元素到末尾:
>>>
classmates.append(
'Adam'
)
>>>
classmates[
'Michael'
,
'Bob'
,
'Tracy'
,
'Adam'
]
也可以把元素插入到指定的位置,比如索引号为
1
的位置:
>>>
classmates.insert(
1
,
'Jack'
)
>>>
classmates[
'Michael'
,
'Jack'
,
'Bob'
,
'Tracy'
,
'Adam'
]
要删除list末尾的元素,用
pop()
方法:
>>>
classmates.pop()
'Adam'
>>>
classmates[
'Michael'
,
'Jack'
,
'Bob'
,
'Tracy'
]
要删除指定位置的元素,用
pop(i)
方法,其中
i
是索引位置:
>>>
classmates.pop(
1
)
'Jack'
>>>
classmates[
'Michael'
,
'Bob'
,
'Tracy'
]
要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
>>>
classmates[
1
] =
'Sarah'
>>>
classmates[
'Michael'
,
'Sarah'
,
'Tracy'
]
tuple
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:
>>>
classmates = (
'Michael'
,
'Bob'
,
'Tracy'
)
要定义一个只有1个元素的tuple,如果你这么定义:
>>>
t = (
1
)
>>>
t
1
定义的不是tuple,是
1
这个数!这是因为括号
()
既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是
1
。
所以,只有1个元素的tuple定义时必须加一个逗号
,
,来消除歧义:
>>>
t = (
1
,)
>>>
t(
1
,)
条件判断
与其他语言无太大区别
循环
Python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来,看例子:
names = [
'Michael'
,
'Bob'
,
'Tracy'
]
for
name
in
names: print(name)
for x in range(101):
sum = sum + x
第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。比如我们要计算100以内所有奇数之和,可以用while循环实现:
sum =
0
n =
99
while
n >
0
: sum = sum + n n = n -
2
print
(sum)
dict
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
>>>
d = {
'Michael'
:
95
,
'Bob'
:
75
,
'Tracy'
:
85
}
>>>
d[
'Michael'
]
95
key值不可变
要避免key不存在的错误,有两种办法,一是通过
in
判断key是否存在:
>>>
'Thomas'
in
d
False
二是通过dict提供的
get()
方法,如果key不存在,可以返回
None
,或者自己指定的value:
>>>
d.get(
'Thomas'
)
>>>
d.get(
'Thomas'
, -
1
)-
1
要删除一个key,用
pop(key)
方法,对应的value也会从dict中删除:
>>>
d.pop(
'Bob'
)
75
>>>
d{
'Michael'
:
95
,
'Tracy'
:
85
}
请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是
不可变对象
。
这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。
要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key。
set
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合:
>>>
s = set([
1
,
2
,
3
])
>>>
s{
1
,
2
,
3
}
注意,传入的参数
[1, 2, 3]
是一个list,而显示的
{1, 2, 3}
只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。。
重复元素在set中自动被过滤:
>>>
s = set([
1
,
1
,
2
,
2
,
3
,
3
])
>>>
s{
1
,
2
,
3
}
通过
add(key)
方法可以添加元素到set中,可以重复添加,但不会有效果:
>>>
s.add(
4
)
>>>
s{
1
,
2
,
3
,
4
}
>>>
s.add(
4
)
>>>
s{
1
,
2
,
3
,
4
}
通过
remove(key)
方法可以删除元素:
>>>
s.remove(
4
)
>>>
s{
1
,
2
,
3
}
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
>>>
s1 = set([
1
,
2
,
3
])
>>>
s2 = set([
2
,
3
,
4
])
>>>
s1 & s2{
2
,
3
}
>>>
s1 | s2{
1
,
2
,
3
,
4
}
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。试试把list放入set,看看是否会报错。