数据类型 #
1. 整型 #
- 十进制,
1
,100
,-80。
- 十六进制,
0x
开头,0xff00
,0xa5b4c3d2。
- 允许数字中间用
_
分割,10_000_000_000
等于10000000000
,十六进制0xa1b2_c3d4
。
2. 浮点数 #
字符串是以单引号
'
或双引号"
括起来的任意文本,比如'abc'
,"xyz"
等等。转义字符
\
。用
r''
表示''
内部的字符串默认不转义,print('\\\t\\')
输出\ \
,print(r'\\\t\\')
输出\\\t\\
。用
'''...'''
的格式表示多行内容>>> print('''line1 ... line2 ... line3''') line1 line2 line3 # .py文件 print('''line1 line2 line3''') # 加上r,不转义 print(r'''hello,\n world''')
3. 布尔值 #
True
和False
两种
# and、or和not运算
>>> True and True
True
>>> True and False
False
>>> False and False
False
>>> 5 > 3 and 3 > 1
True
>>> True or True
True
>>> True or False
True
>>> False or False
False
>>> 5 > 3 or 1 > 3
True
>>> not True
False
>>> not False
True
>>> not 1 > 2
True
4. 空值 #
空值是Python里一个特殊的值,用None
表示。
5. 字符串 #
字符串类型是
str
在Python 3版本中,字符串是以Unicode编码的
对于单个字符的编码,Python提供了
ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符:>>> ord('A') 65 >>> ord('中') 20013 >>> chr(66) 'B' >>> chr(25991) '文'
bytes
类型的数据用带b
前缀的单引号或双引号表示:x = b'ABC'
以Unicode表示的
str
通过encode()
方法可以编码为指定的bytes
,例如:>>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87'
要把
bytes
变为str
,就需要用decode()
方法:>>> b'ABC'.decode('ascii') 'ABC' >>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') '中文' #errors='ignore'忽略错误的字节 >>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore') '中'
len()
函数计算的是str
的字符数,如果换成bytes
,len()
函数就计算字节数>>> len('ABC') 3 >>> len('中文') 2 >>> len(b'ABC') 3 >>> len(b'\xe4\xb8\xad\xe6\x96\x87') 6 >>> len('中文'.encode('utf-8')) 6
指定Python源码编码:
#!/usr/bin/env python3 # -*- coding: utf-8 -*-
格式化
%
运算符
>>> 'Hello, %s' % 'world' 'Hello, world' >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000) 'Hi, Michael, you have $1000000.' >>> print('%2d-%02d' % (3, 1)) 3-01 >>> print('%.2f' % 3.1415926) 3.14 #%%来表示一个% >>> 'growth rate: %d %%' % 7 'growth rate: 7 %'
常见的占位符有:
占位符 替换内容 %d 整数 %f 浮点数 %s 字符串 %x 十六进制整数 f-string
最后一种格式化字符串的方法是使用以
f
开头的字符串,称之为f-string
,它和普通字符串不同之处在于,字符串如果包含{xxx}
,就会以对应的变量替换:>>> r = 2.5 >>> s = 3.14 * r ** 2 >>> print(f'The area of a circle with radius {r} is {s:.2f}') The area of a circle with radius 2.5 is 19.62
{r}
被变量r
的值替换,{s:.2f}
被变量s
的值替换format()
用传入的参数依次替换字符串内的占位符
{0}
、{1}
……>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125) 'Hello, 小明, 成绩提升了 17.1%'
6. list #
list是一种有序的集合,可以随时添加和删除其中的元素。
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
>>> len(classmates)
3
>>> classmates[0]
'Michael'
>>> classmates[1]
'Bob'
>>> classmates[2]
'Tracy'
>>> classmates[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
#获取最后一个元素:-1,类推:-2倒数第二个,-3倒数第三个....
>>> classmates[-1]
'Tracy'
#末尾追加元素
>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']
#插入元素到指定位置
>>> classmates.insert(1, 'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
#删除末尾元素
>>> classmates.pop()
'Adam'
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']
#删除指定位置元素
>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']
#替换指定位置元素
>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']
#list里面的元素的数据类型也可以不同
>>> L = ['Apple', 123, True]
#list元素也可以是另一个list
>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
4
>>> p = ['asp', 'php']
>>> s = ['python', 'java', p, 'scheme']
#空的list
>>> L = []
>>> len(L)
0
7. tuple #
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。
没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0]
,classmates[-1]
,但不能赋值成另外的元素。
#定义一个空的tuple
>>> t = ()
>>> t
()
#定义只有1个元素的tuple,只有1个元素的tuple定义时必须加一个逗号,来消除歧义
>>> t = (1,)
>>> t
(1,)
#tuple元素包含list,list值可变
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])
8. 字典(dict) #
dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
# 字典d
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
# 判断key是否存在
>>> 'Thomas' in d
False
# get方法不存在返回None
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
# 删除key
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}
9. set #
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
>>> 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}
变量 #
变量名必须是大小写英文、数字和_
的组合,且不能用数字开头。
等号=
是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。
t_007 = 'T007'
a = 1
Answer = True
常量 #
通常用全部大写的变量名表示常量:
PI = 3.14159265359
但事实上PI
仍然是一个变量,Python根本没有任何机制保证PI
不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法,如果你一定要改变变量PI
的值,也没人能拦住你。
流程控制 #
条件判断 #
- if
age = 20
if age >= 18:
print('your age is', age)
print('adult')
age = 3
if age >= 18:
print('your age is', age)
print('adult')
elif age >= 6:
print('teenager')
else:
print('your age is', age)
print('teenager')
# 只要x是非零数值、非空字符串、非空list等,就判断为True
if x:
print('True')
循环 #
# for ... in
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
sum = 0
for x in range(101):
sum = sum + x
print(sum)
# while
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
# continue break