目录
一、数据类型的介绍
变量的定义
num1 = 10 #变量
num2 = 9 #变量
result = num1 + num2 #求和
- 变量就是在代码中为某一数据取得的名称
- 如果想要存储多个数据,可以设置多个变量,但是变量不能重复。
程序是用来处理数据,而变量是用来存储数据
1 .1 数据类型
根据数据类型,可以分配不同大小的内存空间。
1.1.1 int(整型)
整数 在python中不受长度限制大小范围
num1 = 100
print(type(num1))
<class 'int'>
- 注意 uint 不支持前面+负号
long(长整型):可以代表八进制和十六进制
32位与64位区别
print(-2**63 , 2**(63-1)) #由内存管理所实现
print(-2**31 , 2**(31-1))
1.1.2 float(浮点型)
num2 = 99.
99.0
只要出现“.”就是浮点型
complex(复数):实部+虚部
1.1.3 bool(布尔型)
bool是int的一个子类,所以True == 1 False ==0 是会返回True
bool(-1)
True
bool(0)
False
总结:True 对 False 错
布尔类型只有两种状态,True和False,数字除了0以外,其余均为True,字符串除了空字符之外都为True,对象除了空对象之外,都为True。
1.1.4 String(字符串)
字符串的格式化
- 使用print函数将信息输出到控制台
- 如果希望输出文本信息的同时,输出文本数据,就需要用到格式化操作符
- %被称为格式化操作符,专门用于处理字符串中的格式
- 包含%的字符串,被称为格式化字符串
- %和不同的字符连用,不同的类型需要使用不同的格式化 字符
result1 = "fengxiaobai" + "521"
result2 = 3.1415926
print(result1)
print(result1*2)
print('%7.3f'%result2)
print(result1[-1])
print(result1[0:5])
fengxiaobai521
fengxiaobai521fengxiaobai521
3.142
1
fengx
- 字符串是python中最常见的数据类型 常用(' '或者" "或者''' ''')来创建字符串 但是''' '''表示换行
- 创建字符串只需要为变量分配一个值即可
- 可以使用+ * 使字符串合并成新的字符串
- 从右-1编号
- a[ start:end] 表示从下标为start到end-1
1.2 运算符
假设变量a为10,b为20
二、字符串方法
mystr = 'hello world'
result1 = mystr.find('p')#1检测he包含在mystr中
result2 = mystr.index('he',0,10)#确定起始位置与结束位置 若找不到直接抛异常
result3 = mystr.count('he')#计数 出现了几次
result4 = mystr.replace('he','He',1)#表示对只找到第一个进行替换
result5 = mystr.split(' ')#分割 spit 分割成三个字符串 放到一个列表里
result6 = mystr.capitalize()#首字母大写 不需要传参
result7 = mystr.title()#每个单词的首字母大写 必须有空格 才能判断这是否是一个单词
result8_1 = mystr.startswith('e')#检测字符串的开头
result8_2 = mystr.endswith('e')#检测字符串的结尾
name1 = 'fengxiaobai'
result9_1 = name1.upper()#大写
name2 = 'FENGXIAOBAI'
result9_2 = name2.lower()#小写
result10_1 = name1.ljust(10)#左对齐
result10_2 = name1.rjust(10)#右对齐
result10_3 = name1.center(10)#居中
name3 = ' fengxiaobai '
result11_1 = name3.lstrip()#删除左空格
result11_2 = name3.rstrip()#删除右空格
result11_3 = name3.strip()#删除左右空格
name4 = 'fengxiaobai521'
result12_1 = name4.isdigit()#检验是否包含数字
result12_2 = name4.isalnum()#检验是否包含字母
result12_3 = name4.isspace()#检验是否包含空格
print(result1)
print(result2)
print(result3)
print(result4)
print(result5)
print(result6)
print(result7)
print(result8_1)
print(result8_2)
print(result9_1)
print(result9_2)
print(result10_1)
print(result10_2)
print(result10_3)
print(result11_1)
print(result11_2)
print(result11_3)
print(result12_1)
print(result12_2)
print(result12_3)
-1
-1
0
1
Hello world
['hello', 'world']
Hello world
Hello World
False
False
FENGXIAOBAI
fengxiaobai
fengxiaobai
fengxiaobai
fengxiaobai
fengxiaobai
fengxiaobai
fengxiaobai
False
True
False
三、类型转化
四、程序的三大流程
4.1 流程控制
是指计算机运算领域的用语,是指在程序运行时个别的指令、运行或是求值的顺序。
- 顺序——从上向下,顺序执行代码
- 分支——根据条件判断,决定执行代码的分支
- 循环——让特定代码重复执行
4.2 If语句
- 如果条件满足,才能做某件事情
- 如果条件不满足,就做另外一件事情,或是什么也不做
a=100
if a>90:
print('A')
else:
print('B')
A
If 嵌套
ticket = 1
knife = 1
if ticket==1:
print('有票')
if knife==1:
print('不能通过安检')
else:
print('通过')
有票
不能通过安检
4.3 while循环
- 让指定的代码重复执行
- 让执行的代码按照指定的次数重复执行
while 条件:
do something
i=0
while i<5:
i=i+1
print(i)
1
2
3
4
5
死循环:忘记在循环内部修改循环的判断条件,导致循环持续执行,程序无法终止!
4.4 for 循环
for 临时变量 in 序列(可迭代): 代码内容
name = 'bai'
for i in name:
print(i)
b
a
i
for循环嵌套(组合)
for i in '0123':
for j in '4567':
print(i,j)
0 4
0 5
0 6
0 7
1 4
1 5
1 6
1 7
2 4
2 5
2 6
2 7
3 4
3 5
3 6
3 7
for row in range(1, 10):
for col in range (1, row+1):
print("%d * %d = %d" % (col,row,row*col),end='\t')
print()
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
range 随机生成一个序列 例:for i range (10): [0,1,2,3,4,5,6,7,8,9]
4.5 跳出循环(break and continue)
- break 某一条件满足时,跳出循环,不再执行后续重复的代码
- continue 某一条件满足时,才执行后续重复的代码
- break continue 只针对当前所在的循环有效
name = 'fengxiaobai'
for i in name:
if i == 'x':
break
print(i)
f
e
n
g
如果不想换行 可以写成print(i,end='') ,整个跳出循环
name = 'fengxiaobai'
for i in name:
if i == 'x':
continue
print(i)
f
e
n
g
i
a
o
b
a
i
跳出本次循环,不会终止掉整个程序
i=0
while i < 5:
i+=1
if i==2:
continue
print(i)
1
3
4
5
4.6 pass 占位符
a = 100
if a == 99:
print('99')
else:
pass
不会因为这个地方有问题而报错
五、数据容器
5.1 列表
列表是比较常见的一种数据形式,是一种有序的序列,可以随时添加和删除其中的元素
列表非常适合利用顺序和位置定位某一元素,尤其是当元素的顺序或内容经常发生改变时,与字符串不同,列表是可变的,可以直接对原始列表进行修改、添加元素、删除或覆盖已有元素。
5.1.1 列表创建
- list 是python中使用最频繁的数据类型,在其他语言中叫做数组
- 专门用于存储一串信息
- 列表用[]定义,数组之间使用,分隔
- 列表中的索引从0开始
names = ['feng','xiao','bai',[1,2,3]]
print(len(names))
print(names[1])
print(names[-1])
print(names[-1][1])#有几层对应的下标就有几层
4
xiao
[1, 2, 3]
2
注意:索引超出范围会报错
5.1.2 列表下标
可以根据索引位置修改内容
list = [1,2,3,4]
list[0]=0
print(list)
[0, 2, 3, 4]
5.1.3 切片
同字符串切片
list = [1,2,3,4]
print(list[0:2])
print(list[0:])
print(list[:])
[1, 2]
[1, 2, 3, 4]
[1, 2, 3, 4]
5.1.4 常用函数
#增
arr = list(range(1,5))
arr1 = list(range(1,5))
arr.append(9)#增加 只能添加一个
arr.insert(1,0)#插入下标前值
print(arr)
#删
arr.clear()
arr1.pop()#从末尾开始剔除
arr1.pop(2)
arr1.remove(2)#移除的数据
print(arr1)
#改
arr.extend([5,6,7])#因为之前clear
print(arr)
#查询
print(arr.count(1))
print(arr1.index(1))
#排序
arr.sort()#升序
print(arr)
arr.sort(reverse=True)#降序
print(arr)
[1, 0, 2, 3, 4, 9]
[1]
[5, 6, 7]
0
0
[5, 6, 7]
[7, 6, 5]
5.1.5 其他方法
- 使用in判断值是否存在
- 使用+=合并列表
- 使用len()获取长度
- 使用join()转换为字符串
5.1.6 列表推导式
print([x for x in range(1,11)])
5.1.7 对象引用、浅拷贝、深拷贝
使用=赋值(对象引用)
a = [1,2,3,[7,8,9]]
b = copy.copy(a)
c = copy.deepcopy(b)
print(b)
print(c)
[1, 2, 3, [7, 8, 9]]
[1, 2, 3, [7, 8, 9]]
总结:
- copy.copy浅拷贝 只拷贝父对象,不会拷贝对象内部的子对象
- copy.deepcopy深拷贝 拷贝对象及其子对象
5.2 元组
5.2.1 创建元组
- 元组和列表类似、但属于不可变序列,元组一旦被创建,用任何方法都不可以修改其元素
- 元组的定义方式与列表相同,但定义时元素是放在一对圆括号“()”而不是[]
- 元组没有列表中那么多方法可以用,因为不可变,所以安全,速度比列表快
t = (1,2,3)
print(t)
print(type(t))
(1, 2, 3)
<class 'tuple'>
5.2.2 元组的取值与切片
- 元组的取值、切片与列表时一样使用
- 不能对元组的元素进行删除,但是可以删除整个元组
常用方法
info.count info.index
5.2.3 元组解包
对应里面元素
t = (1,2,3)
a,b,c = t
print(a)
print(b)
print(c)
a
b
c
a,_,_ = t 可以只取一个元素
5.3 元组与列表的区别
- 元组一旦定义就不允许更改
- 元组没有append()、extend()和insert()等方法,无法向元组中添加元素
- 元组中没有remove()或pop()方法,也无法对元组元素进行del操作,不能从元组中删除元素
- 从效果上看,tuple()冻结列表,而list()融化列表
元组的优点
- 元组的速度比列表快,如果定义了一系列常量值,而所需要做的仅是对它的遍历,那么一般使用元组而不用列表
- 元组不需要改变数据进行“写保护”将使得代码更加安全
- 元组可用作字典的“键”,也可以作为集合的元素,列表永远不能当作字典键使用,也不能作为集合元素,因为列表不是不可变的
元组的缺点
- 不可修改
5.4 集合
集合是无序、可变的序列,使用一对大括号界定,元素不可重复,同一个集合每个元素都是唯一的。
集合中只能包含数组、字符串、元组等不可变类型(或者说可哈希),而不能包含列表、字典、集合等可变类型的数据。
注意:创建一个空集合必须用set()而不是{},因为{}是用来创建一个空字典
a={1,2,3}#元素不可重复
print(type(a))
print(a)
a.add(7)#加
print(a)
#print(a[0]) 取值 集合无序,所以不能通过下标取值
print(a.pop()) #按照顺序弹出
<class 'set'>
{1, 2, 3}
{1, 2, 3, 7}
1
5.5 字典
字典是一种键值对的数据类型,且可存储任意类型的对象。
字典的每个键值对用冒号(:)分割,整个字典包括在花括号({})中
- 字典是无序、可变。
- 定义字典时,每个元素的键和值用冒号分隔,元素之间用逗号分隔,所有元素放在一对大括号里“{}”中
- 字典中的键为不可变数据,比如整数、实数、复数、字符串、元组等
5.5.1 字典操作
d = {'name':[]}#创建
print(d)
print(type(d))
print(d['name'])#取值 修改
d['name'] = '老王'
print(d['name'])
d['sex']='nan'#字典添加
print(d)
{'name': []}
<class 'dict'>
[]
老王
{'name': '老王', 'sex': 'nan'}
5.5.2 常用方法
res1 = d.get('name')
res2 = d.keys()
res3 = d.values()
res4 = d.items()
print(res1)
print(res2)
print(res3)
print(res4)
冯小白
dict_keys(['name', 'age'])
dict_values(['冯小白', 18])
dict_items([('name', '冯小白'), ('age', 18)])
六、函数
6.1 函数的定义与调用
#def 函数名():
#函数体
def mylen():
s='hello'
l=0
for i in s:
l+=1
print(l)
#函数调用
mylen()
5
6.2 函数参数
6.2.1 基本参数调用
def add(a, b):
c = a + b
return c
res = add(1, 2) # # 调用add 传递的参数与定义的参数一一对应
print(res)
6.2.2 默认参数的使用
def add(a,3): #默认参数必须放在最后,不能放在前面
c=a+b
return c
add(3) #调用add
6.2.3 不定参数的使用
def test(a, b, *feng, **bai):
print(a + '\n'+b)
print(feng)
print(bai)
6.3 返回值
使用return返回值,如果没有return相当于返回None
6.4 python闭包机制
Python函数是支持嵌套的,如果在嵌套的内部函数中对外部函数作用域(非全局变量)的变量进行引用,外部函数有调用内部函数作为返回,这种现象称之为闭包。闭包需要满足3个条件:
- 存在嵌套函数
- 嵌套的内部函数引用了外部函数的变量
- 嵌套的外部函数调用内部函数作为返回
def count():
a = []
for i in range(1, 4):
def b():
return i * i
a.append(b)
return a
a1, a2, a3 = count()
闭包的特点是返回的函数还引用了外层函数的局部变量,所以要正确使用闭包,就要确保引用的局部变量在函数返回后不能变.