Python基础
参考链接:廖雪峰的官方网站
数据类型和变量
- 用
r''
表示''
内部的字符串默认不转义:
>>> print('\\\t\\')
\ \
>>> print(r'\\\t\\')
\\\t\\
- 用
'''...'''
来表示多行内容:
>>> print('''line1
... line2
... line3''')
line1
line2
line3
但如果是写在.py文件中的话,就没有…提示符了:
print('''line1
line2
line3''')
''' '''
也可以用来表示多行注释- Python中的布尔值为
True
和False
,空值用None
表示,空的str, tuple, list, dict
都是False
- Python是动态语言,即变量类型是不固定的,可以把不同类型的值赋给它
- Python中用全部大写的变量名表示常量:
PI = 3.14159265359
,但其实这个值还是可以被修改的 - Python中
a = 'ABC'
表示内存中的变量a
指向内存中的常量'ABC'
- Python中判断浮点数相等:
import sys
def equal_float(a, b):
return abs(a - b) <= sys.float_info.epsilon
#最小浮点数间隔
print(equal_float(1.0, 1.0))
True
- 对于浮点数,
round()
表示四舍五入,ceil()
表示向上取整,floor()
表示向下取整
import math
print(round(2.4))
print(round(2.6))
print(math.ceil(2.2))
print(math.floor(2.9))
2
3
3
2
运算符
+,-,*,%
与c++同/
结果是浮点数
>>> 6 / 5
1.2
//
是整数除法
>>> 6 // 5
1
x ** y
求x的y次幂
>>> 2 ** 3
8
- 逻辑运算符
and or not
字符串和编码
- ASCII编码是1个字节,而Unicode编码通常是2个字节。
- 把ASCII编码的
A
用Unicode编码,只需要在前面补0就可以,因此,A
的Unicode编码是00000000 01000001
- UTF-8编码是可变长的Unicode编码,它把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节
- Python3使用的是Unicode编码
- 可以使用
ord
和chr
函数来进行字符与编码之间的转换,python2.x中默认支持Ascii码,python3.x中默认支持Unicode编码
Python2.x
>>> chr(65)
'A'
>>> ord('A')
65
>>> unichr(20013)
u'\u4e2d'
>>> ord(u'\u4e2d')
20013
>>> ord('中')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 2 found
>>> chr(20013)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: chr() arg not in range(256)
Python3.x
>>> chr(65)
'A'
>>> ord('A')
65
>>> chr(20013)
'中'
>>> ord('中')
20013
>>> ord('\u4e2d')
20013
- python中输出格式化方式与C语言中类似,使用%来实现:
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
- 最常用UTF-8编码对
str
和bytes
进行转换:
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
- 字符串不可修改:
a = "1234"
print(a[2])
a[2] = "3" #error
- 可以用
in, not in
来判断是否为子串:
a = "Hello"
print("el" in a)
b = "Python"
print("th" not in b)
True
False
使用list和tuple
- Python中list和C++、Java中的数组使用方法类似,都用索引来访问,但下标可以是负数,-1表示访问倒数第一个元素:
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
>>> classmates[1]
'Bob'
>>> classmates[-1]
'Tracy'
- 使用
append
来向list末尾增加元素,使用insert
来向指定位置插入元素,使用pop
来删除list元素(使用pop
会输出被删除的元素),默认删除末尾元素,也可以指定位置:
>>> classmates.pop()
'Tracy'
- list中的元素可以是不同类型的,也可以是另外一个list:
>>> L = ['Apple', 123, True]
>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
4
- tuple与list很类似,但tuple一经初始化就无法修改,tuple由数个逗号分隔的值组成,前后可加括号,定义空元组必须有括号:
>>> classmates = 'Michael', 'Bob', 'Tracy'
- 只有一个元素的tuple定义必须要加
,
,否则会把()
理解为数学符号:
>>> t = (1)
>>> t
1
>>> t = (1,)
>>> t
(1,)
- tuple所谓的“不变”是“指向“不变,即每个元素指向一个对象,就不能指向其他对象,但这个对象本身是可变的:
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])
list
和tuple
可以使用乘法操作,但dict
不行:
li = [1,]
li = li * 3
print(li) #[1, 1, 1]
t = (1, 2)
t = t * 3
print(t) #(1, 2, 1, 2, 1, 2)
d = {"1":1, "2":2}
d = d * 3 #TypeError: unsupported operand type(s) for *: 'dict' and 'int'
- 元组的连接会生成一个新的元组,列表则是在原来对象的基础上增加:
>>> a = 1, 2, 3
>>> b = a
>>> b
(1, 2, 3)
>>> a += 4,
>>> b
(1, 2, 3)
>>> a
(1, 2, 3, 4)
>>> a = [1, 2, 3]
>>> b = a
>>> a += [4,]
>>> b
[1, 2, 3, 4]
- 用列表来定义二维数组:
>>> array = [1, 2, 3]
>>> m = [array] * 3
>>> m
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> m[0][1] = 4
>>> m
[[1, 4, 3], [1, 4, 3], [1, 4, 3]]
#上面这种方法得到是并不是二维数组,m[0],m[1],m[2]指向相同的一维数组array
#正确做法
>>> m = [[i * 3 + j for j in range(3)] for i in range(3)]
>>> m
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
条件判断
- Python中条件判断使用
if
、elif
、else
,elif
是else if
的缩写。
age = 3
if age >= 18:
print('adult')
elif age >= 6:
print('teenager')
else:
print('kid')
- 使用
if
、elif
、else
条件判断语句时,除了要注意在语句末尾加上冒号:
,还要注意另起一行的缩进,Python中用缩进来表示代码块
循环
- for…in循环可以用来遍历list和tuple中的元素(同样要注意缩进):
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
- python3中可以使用
for else
语句,当for
语句正常结束,就会执行else
语句;否则(遇到break
)就不执行else
语句
sites = ["Baidu", "Google","IBM","Taobao"] #list
for site in sites:
if site == "IBM":
print("OK")
break
print("site: " + site)
else:
print("No break")
print("Done!")
site: Baidu
site: Google
OK
Done!
- while循环与C++和Java中类似
- break和continue的含义与C++和Java中类似
使用dict和set
- Python中的dict就相当于其他语言中的map,是键-值对的存储方式
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
- key用于计算出值在内存中的存放地址,一个key只能对应一个value,key不存在时会报错
get
方法可用于判断元素是否存在于dict中,存在会返回1,不存在则会返回None或者指定的值
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
pop(key)
方法可以删除对应的key和value- dict的key必须是不可变对象,字符串和整数是不可变对象,而list则不是,因此list不能作为key
>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
- tuple是不可变对象,因此
(1, 2, 3)
是可以作为dict的key的,但(1, [2, 3])
则不能作为key - 字典的格式化输出:
>>> phonebook = {'Alice': 2341, 'Beth': 9102, 'Cecil': 3258}
>>> "Cecil's phone number is %(Cecil)s." % phonebook
"Cecil's phone number is 3258."
>>> "Cecil's phone number is %(Cecil)d." % phonebook
"Cecil's phone number is 3258."
>>> "Cecil's phone number is %(Cecil)f." % phonebook
"Cecil's phone number is 3258.000000."
字典的
keys(), items(), values()
分别可以获得字典的键、键-值对、值set相当于C++的
unordered_set
,是哈希表,元素不可重复且必须可哈希- set是key的集合,不能有重复的key,它与dict唯一的区别就是没有存value:
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
add
和remove
可分别用于增加和删除set中的key- 关于不可变对象,如果对str进行replace操作,结果如下:
>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'
替换成功了,但a
变量指向的值仍是'abc'
,a.replace('a','A')
语句是作用在字符串对象'abc'
的,但实际上并没有修改它的值,而是新建了一个字符串对象'Abc'
并返回。
所以,对于不可变对象,调用对象自身的任何方法都不会改变对象本身,而是会产生的新的对象并返回。