• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

世间行者

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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']]

 

posted on 2020-02-09 15:51  世间行者  阅读(258)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3