Python基础(4) 控制结构
三种控制流语句:if、for、while,Python用缩进表明成块的代码,以四个空格表示隶属关系,所以语句不能随意缩进。
1 条件语句
(1)简单的if语句
a = 10 if a > 0: # 末尾带“:” print('这是一个整数') # 四个空格缩进表示隶属关系
(2)if...else:二选一,适用于“非黑即白”的判断,只有一个输出
person = [1, 0] # 0-男性 1-女性 if person[0] == 0: print('这是男性!') else: print('这是女性!')
(3)if...elif...else:多选一,多个条件相互独立,只有一个输出
a, b = 10, 5 if a < b: # 首次判断不满足,跳过 print('a 小于 b') elif a == b: # 再次判断不满足,跳过 print('a 等于 b') else: # 因比较只有:大于、等于、小于三种情况,排除两种后只剩大于,直接输出 print('a 大于 b') # a 大于 b
(4)if的嵌套使用:多用于数值/多条件判断,可有多个输出
a = input('a: ') b = input('b: ') c = input('c: ') if a > b: print(a, '大于', b) if a > c: print(a, '大于', c) else: print(a, '小于', c)
2 循环语句
在符合条件的情况下,重复执行一段代码。
2.1 while循环
(1)简单while循环:单线重复
a = 0 while a < 100: a += 1 # 改变循环条件 print(a)
(2)嵌套while循环:多线重复,常用于行列输出
i = 0 while i < 5: # 纵向打印 m = 0 while m < i: # 横向打印 print('*', end=' ') m += 1 # 改变循环条件 i += 1 # 改变循环条件 print( ) # * # * * # * * * # * * * *
(3)while...else...类似与if...else...实际很少用,了解即可
2.2 for循环
可以循环遍历任何序列项目,如列表或字符串(字典只能遍历keys),不需要判断条件,遍历完序列中的项目即结束
a = [4, 3, 8, 9, 6, 1] for i in a: # 打印列表元素 print(i)
注意与while循环的区别
i = 0 while i < len(a): # 必须定义并改变循环条件 print(a[i]) # 通过索引下标输出 i += 1
因为迭代(循环)某范围的数字非常常见,所以有个内建的范围函数range( )
for i in range(10): print(i)
轻量级循环(列表生成式):通过简单语句实现
print([x*x for x in range(10)]) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
2.3 相关函数
(1)enumerater( ):每次循环中同时得到下标和元素
animal = ['Duck', 'Cat', 'Chicken', 'Dog', 'Bird'] for index, num in enumerate(animal): print(index) print(num) # 0 # Duck # 1 # Cat # 2 # Chicken # 3 # Dog # 4 # Bird
(2)zip( ):实现每次循环时从多个等长序列中同时取出一个元素
ta = [1, 2, 3] tb = [7, 8, 9] tc = ['a', 'b', 'c'] for a, b, c in zip(ta, tb, tc): print(a, b, c)
# 1 7 a # 2 8 b # 3 9 c
2.4 中断循环
(1)break:退出循环
(2)continue:退出本次循环,直至不满足遍历条件终止循环
name = input('请输入犯人名字:') person = ['Jack', 'Tom', 'John', 'Susan'] for se in person: if se == name: print('嫌疑人是:%s' % se) break # 退出整个循环,不会输出“end” # continue print(se) ''' break:运行至找到犯人为止,退出整个循环 请输入犯人名字:Tom 嫌疑人是:Tom Tom continue:找到后退出当前循环,从下次继续执行整个循环直至不满足循环条件 请输入犯人名字:Tom 嫌疑人是:Tom Susan '''
3 深拷贝与浅拷贝
3.1 术语解释
(1)变量:是一个系统表的元素,拥有指向对象的连接空间
(2)对象:被分配的一块内存,存储其所代表的值
(3)引用:是自动形成的从变量到对象的指针
注意:类型(int类型,long类型(Python3已去除long类型,只剩下int类型的数据))属于对象,不是变量
3.2 拷贝方法
在Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,Python并没有拷贝这个对象,只是拷贝了这个对象的引用而已。
3.2.1 直接赋值
默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变。
alist = [1, 2, 3, ['a', 'b']] b = alist print(b) # [1, 2, 3, ['a', 'b']] alist.append(5) print(alist) # [1, 2, 3, ['a', 'b'], 5] print(b) # [1, 2, 3, ['a', 'b'], 5]
3.2.2 浅拷贝 copy.copy( )
拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对象中引用的其他对象我不复制。
import copy c = copy.copy(alist) print(c) # [1, 2, 3, ['a', 'b']] alist.append(5) print(alist) # [1, 2, 3, ['a', 'b'], 5] print(c) # [1, 2, 3, ['a', 'b'], 5]
3.2.3 深拷贝 copy.deepcopy( )
外围和内部元素都进行了拷贝对象本身,而不是引用。也就是,把对象复制一遍,并且该对象中引用的其他对象我也复制。
d = copy.deepcopy(alist) print(d) # [1, 2, 3, ['a', 'b']] alist.append(5) print(alist) # [1, 2, 3, ['a', 'b'], 5] print(d) # [1, 2, 3, ['a', 'b']]
浙公网安备 33010602011771号