Python学习笔记(一)
一、Python基础:
1.数据类型
- 整型
没有大小限制,可以处理任意大小的整型数据,精确运算。 - 浮点型
很大或很小的浮点数需要用科学计数法表示,运算可能四舍五入。如123000000,表示为1.23e8。 - 字符串
有单引号'
或者双引号"
括起来的任意文本。和其他语言一样,\
为转义字符,还包括\n
、\r
等其他特殊意义的字符。当引号里面有很多东西需要转义的时候,可以用r''
表示''
引号内部的字符全部不转义。 - 布尔值
可以直接用true或者false表示,也可以通过and
、or
、not
来运算 ,对应的意义是与、或、非。 - 空值
空值是Python里一个特殊的值,用None
表示。None
不能理解为0,因为0是有意义的,而None
是一个特殊的空值。
此外,Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型
2.变量
变量在程序中用一个变量名表示,变量名必须是大小写英文、数字和_
的组合,且不能用数字开头。变量无需声明类型(动态语言的特点)
注意:在Python中除法有两种:
>>>10/3
3.3333
/
除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数
还有一种除法是//
,称为地板除,两个整数的除法仍然是整数
另外Python中也有%
,求余
3.字符编码
在Python 3版本中,字符串是以Unicode编码的。
对于单个的字符,Python提供了ord()
函数获得字符的整数表示,chr()
函数把编码转换成对应的字符。
由于Python的字符串类型是str
,在内存中以Unicode表示,一个字符对应若干字节。如果要在网络上面传输或者保存到磁盘,则需要把str
变成以字节为单位的bytes
。
Python对应bytes
类型的数据用带b前缀的单引号或双引号来表示,例如:
x = b'ABC'
需要注意的是'ABC'
和b'ABC'
的区别,前者是str
,后者是bytes
。
以Unicode表示的str
可以通过encode()
方法科比编码为指定的bytes
,例如:
>>> 'ABC'.encode('ascii')
b'ABC'
>>> 'ABC'.encode('utf-8')
b'ABC'
把bytes
转变成str
,可以通过decode()
方法
>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
len()
函数可以用来计算str
的字符数,也可以计算bytes
的字节数。
为了避免乱码问题,应当始终坚持使用UTF-8编码对str
和bytes
进行转换。
由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
#!/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.' % ('Chenlx', 1000000)
'Hi, Chenlx, you have $1000000.'
在字符串内部,%s
表示用字符串替换,%d
表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。
其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:
>>> '%2d-%02d' % (3, 1)
' 3-01'
>>> '%.2f' % 3.1415926
'3.14'
有些时候,字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%
来表示一个%:
>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'
4.list和tuple
List
list是一种有序的集合,可以随时添加和删除其中的元素。和java里面的类似。
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
常用的几个方法:
len()
获得list元素的个数append()
往list中追加元素到末尾insetr()
元素插入到指定的位置pop()
删除list末尾的元素pop(i)
删除指定位置的元素,i为索引
把某个元素替换成别的元素,可以直接赋值给对应的索引位置
如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素
tuple
tuple和list非常类似,但是tuple一旦初始化就不能修改,我们从称为元组。
因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
创建tuple和创建list不同之处是用( )替代了[ ]
uple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如:
>>> t = (1, 2)
>>> t
(1, 2)
如果要定义一个空的tuple,可以写成():
>>> t = ()
>>> t
()
只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:
>>> t = (1,)
>>> t
(1,)
tuple不可变是指tuple的每个元素,指向永远不变
5.条件判断
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
注意点:在使用input()
用户输入的时候,若要进行条件判断,需要进行类型转换。
6.循环
for…in
把集合中的每个元素迭代出来
sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
sum = sum + x
print(sum)
range()
函数,可以生成一个整数序列
list()
函数,可以转换为list
>>> list(range(5))
[0, 1, 2, 3, 4]
while循环
只要条件满足,就不断循环,条件不满足时退出循环。例子:
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
break
break语句可以提前退出循环
n = 1
while n <= 100:
if n > 10:
break
print(n)
n = n + 1
print('END')
continue
continue语句,跳过当前的这次循环,直接开始下一次循环
n = 0
while n < 10:
n = n + 1
if n % 2 == 0: # 如果n是偶数,执行continue语句
continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
print(n)
7.dict和set
dict
Python内置字典,相当于java里面的Map,保存键-值对。
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
len()
函数可以求字典的长度
len(d)
可以简单地使用 d[key]
的形式来查找对应的 value
>>> print d['Adam']
95
如果key不存在,会直接报错:KeyError。有两种解决办法:
一是先判断一下 key 是否存在,用 in 操作符:
if 'Paul' in d:
print d['Paul']
二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:
>>> print d.get('Bart')
59
>>> print d.get('Paul')
None
三大特点:
在一个dict中,key不能重复
存储的key-value序对是没有顺序的
作为 key 的元素必须不可变
dict的更新:直接赋值,后面的赋值可以覆盖前面的值。
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
d['Adam'] = 100
dict的遍历:利用for...in
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
for key in d:
print key,':',d[key]
要删除一个key,用pop(key)
方法,对应的value也会从dict中删除。
set
set是一个元素没有重复,而且是无序的集合。
创建一个set,需要调用 set()
并传入一个 list,list的元素将作为set的元素:
s = set([1, 2, 3]
print(s)
{1, 2, 3}
访问 set中的某个元素实际上就是判断一个元素是否在set中,用 in 操作符判断
>>> s = set(['Adam', 'Lisa', 'Bart', 'Paul'])
>>> 'Bart' in s
True
遍历set:for...in
s = set(['Adam', 'Lisa', 'Bart'])
for name in s:
print (name)
add(key)
添加元素到集合,如果元素已经存在,不会有任何效果
remove(key)
删除元素,如果元素不存在,则会报错。