1.数据类型
整数int:
python可以任意大小的整数,包括负整数。
浮点数float:
小数
字符串string/str:
在python是以单引号‘或者双引号“括起来的任意文本,比如’ABC‘,”abc“。
注意:’ ‘和” “本身只是一种表达方式,不是字符串的一部分。字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。
布尔值bool:
True/False
空值None
2.python的字符串
python2 默认ascii
python3 默认unicode
对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:
>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'
由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。
Python对bytes类型的数据用带b前缀的单引号或双引号表示:x =b'ABC'
纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。
在bytes中,无法显示为ASCII字符的字节,用\x##显示。
反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法
如果bytes中包含无法解码的字节,decode()方法会报错,如果bytes中只有一小部分无效的字节,可以传入errors='ignore'忽略错误的字节。
3.有关list和tuple
(1)list:
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
方法有:
list.append(obj) 增加元素
list.insert(obi) 插入元素
list.remove(obj) 删除元素
list.index(int) 索引元素
list.pop(int) 删除指定位置的元素,不加位置默认删除最后一位元素
(2)tuple:
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。
它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的。
tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来
要定义一个只有1个元素的tuple,如果你这么定义:
>>> t = (1)
>>> t
1
定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。
只有1个元素的tuple定义时必须加一个逗号,,来消除歧义
>>> t = (1,)
>>> t
(1,)
4.条件判断
age =20
if age >= 18:
print('your age is', age)
print('adult')
在python中是根据空格和缩进来表示层次关系的。if判断语句是要有冒号:
5.循环
Python的循环有两种,一种是for...in循环,一种是while循环。
(1)for循环
names = ['Michael','Bob','Tracy']
for name in names:
print(name)
python中循环语句也是通过缩进来表示层次关系的,for循环条件句也要有冒号:
(2)while循环
while循环,只要条件满足,就不断循环,条件不满足时退出循环。
sum =0
n = 99
while n > 0:
sum = sum + n
n = n -2
print(sum)
python中循环语句也是通过缩进来表示层次关系的,while循环条件句也要有冒号:
break语句可以在循环过程中直接退出循环,而continue语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if语句使用。
要特别注意,不要滥用break和continue语句。break和continue会造成代码执行逻辑分叉过多,容易出错。大多数循环并不需要用到break和continue语句,上面的两个例子,都可以通过改写循环条件或者修改循环逻辑,去掉break和continue语句。
6.有关dict和set
(1)字典dict
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
>>> d = {'Michael':95,'Bob':75,'Tracy':85}
>>> d['Michael']
95
dict.get()可以用来查找key,如果key不存在,可以返回None,或者自己指定的value。
>>> d.get('Thomas', -1)
-1
dict.pop(key):要删除一个key,用pop(key)方法
和list比较,dict有以下几个特点:
(1)查找和插入的速度极快,不会随着key的增加而变慢;
(2)需要占用大量的内存,内存浪费多。
而list相反:
(1)查找和插入的时间随着元素的增加而增加;
(2)占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。
这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。
要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key。
(2)集合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中自动被过滤。
set.add(obj) 增加元素
set.remove(obj) 删除元素
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作(&交集,|并集)
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。
函数
<1>调用函数
要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。
可以在交互式命令行通过help(abs)查看abs函数的帮助信息。
<2>定义函数
在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
def my_abs(x):
if x >= 0:
return x
else:
return -x
请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return。
空函数:
定义一个什么事也不做的空函数,可以用pass语句:
def nop ():
pass