乔克视界 乔克视界
首页
  • 运维
  • 开发
  • 监控
  • 安全
  • 随笔
  • Docker
  • Golang
  • Python
  • AIOps
  • DevOps
  • 心情杂货
  • 读书笔记
  • 面试
  • 实用技巧
  • 博客搭建
友链
关于
收藏
  • 分类
  • 标签
  • 归档

乔克

云原生爱好者
首页
  • 运维
  • 开发
  • 监控
  • 安全
  • 随笔
  • Docker
  • Golang
  • Python
  • AIOps
  • DevOps
  • 心情杂货
  • 读书笔记
  • 面试
  • 实用技巧
  • 博客搭建
友链
关于
收藏
  • 分类
  • 标签
  • 归档
  • Docker

  • Golang

  • AIOps

  • Python

    • 基础知识

      • Python之链表
      • Python 之类的初识
      • Python之函数式编程
      • Python之匿名函数
      • Python之自定义函数
      • Python之异常处理
      • Python之条件与循环
        • 一、条件语句
        • 二、循环语句
        • 三、条件和循环的复用
        • 四、总结
      • Python之列表生成式
      • Python之生成器
      • Python之装饰器
      • Python之迭代器
      • Python之进程、线程、协程
      • Python之深浅拷贝
      • Python之反射
      • Python之并发编程
      • Python之垃圾回收机制
      • Python之断言assert
      • Python之上下文管理器和with语句
      • Python中JSON的对应关系
      • Python之单例模式
    • Django框架

    • 其他

  • DevOps

  • 专栏
  • Python
  • 基础知识
乔克
2025-07-19
目录

Python之条件与循环

# 一、条件语句

先来看一个简单的示例,如下:

if x > 0:
  x = 1
else:
  x = 0
1
2
3
4

这就是一个简单的条件语句,旨在判断 x 的值,如果大于 0,将 x 重新赋值为 1,反之赋值为 0。值得注意的是,在 python 中条件是不需要括号包起来的,如下是不允许的:

if (x>1):
    .....
1
2

还有一点,那就是条件语句的条件后是需要加":",这是 python 的语法要求。

在 python 中是没有 switch 语句的,如果需要实现类似的效果就需要 if...elif...else 来实现,如下:

if id = 1:
    print("登录1")
elif id = 2:
    print("登录2")
elif id = 3:
    print("登录3")
else:
    print("不存在")
1
2
3
4
5
6
7
8

条件语句是顺序执行的,也就是说如果 id=1 满足要求,则后续的 id=2 等等就不再执行,反之,就会执行下面的 elif 语句,直到条件满足,如果所有的 elif 语句都不满足,则最后执行 else 语句。

注意:if 语句是可以单独使用的,但是 elif 和 else 都必须和 if 配对。

在实际运用中,我们还会使用如下的写法:

if a:
    ....
1
2

这种省略用法 a 的结果是 True 或者 False,一般是满足如下要求:

数据类型 数据结果
String 空字符串为 False,其他为 True
Int 0 为 False,其他为 True
Bool True 为 True,False 为 False
List/Tuple/Dic/Set 空为 False,其他为 True
Object null 为 False,其他为 True

在实际应用中,建议除了 Bool 类型的,其他的都建议写完整表达式,这样更直观的显示输出,方便调试。

# 二、循环语句

循环语句的本质上是遍历集合中的元素,python 中的循环有 for 和 while 循环,如下示例:

li = [1,2,3,4]
for i in li:
    print(i)

j = 0
while j < len(li):
    print(j)
1
2
3
4
5
6
7

在 python 中,只要数据结构是可迭代的(interable),比如列表、集合,都可以使用以下方面来遍历元素:

for i in [1,2,3,4]:
    print(i)

for j in (5,6,7,8):
    print(j)
1
2
3
4
5

需要注意的是:如果是字典,字段的键本身是可迭代的,所以直接循环得到是键而不是值,如果需要得到键值对,就需要其内置方法 values()和 items()实现,其中 values()返回的是字典的值的集合,items()返回的是字典的键的集合。如下:

d = {'name': 'jason', 'dob': '2000-01-01', 'gender': 'male'}
for k in d: ## 遍历字典的键
    print(k)
name
dob
gender

for v in d.values(): ## 遍历字典的值
    print(v)
jason
2000-01-01
male

for k, v in d.items(): ## 遍历字典的键值对
    print('key: {}, value: {}'.format(k, v))
key: name, value: jason
key: dob, value: 2000-01-01
key: gender, value: male
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

我们也可以通过集合中的索引来获取数据,这时候我们通常会使用 range()函数来获取索引,拿到索引,再去获取元素,如下:

li = [1,2,3,4]
for i in range(len(li)):
    print(li[i])
1
2
3

当我们同时需要索引和元素的时候,还可以借助 python 的内置函数 enumerate(),用来遍历集合,不仅返回元素,还返回索引,如下:

li = [1,2,3,4,5]
for i, v in enumerate(li):
...     print(i,v)
...
0 1
1 2
2 3
3 4
4 5
1
2
3
4
5
6
7
8
9

在循环中,我们通常会搭配 break,continue 来使用。continue 是让程序跳出当前循环,继续执行下一次循环,break 是让程序结束循环。如下示例:

## name_price: 产品名称 (str) 到价格 (int) 的映射字典
## name_color: 产品名字 (str) 到颜色 (list of str) 的映射字典
name_price = {'a': 999, 'b': 1999}
name_color = ('a': 'red', 'b': 'yellow')
for name, price in name_price.items():
    if price >= 1000:
        continue
    if name not in name_color:
        print('name: {}, color: {}'.format(name, 'None'))
        continue
    for color in name_color[name]:
        if color == 'red':
            continue
        print('name: {}, color: {}'.format(name, color))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

前面讲了很多 for 循环,其实 while 循环也是一样的,for 和 while 循环有时候是可以相互转换的,但是它们也有各自的使用场景,如下:

如果只是遍历一个已知的集合找出满足条件的元素,并进行相应的操作,这时候使用 for 循环更加简洁。但是如果是不断的循环执行操作直到一个条件结束循环或者不断的循环则用 while 循环。如下示例使用 while 循环:

while True:
    try:
        text = input('Please enter your questions, enter "q" to exit')
        if text == 'q':
            print('Exit system')
            break
        ...
        ...
        print(response)
    except as err:
        print('Encountered error: {}'.format(err))
        break

1
2
3
4
5
6
7
8
9
10
11
12
13

for 和 while 的效率比较,如下示例:

## for 循环
for i in range(0,10000):
    print(i)

## while 循环
j = 0
while j < 10000:
    print(i)
    j += 1
1
2
3
4
5
6
7
8
9

上面两种使用方式达到的效果是一样的,但是对于 for 循环,由于 range()函数是直接调用 C 语言写的,调用它的速度非常快,而对于 while 循环,循环中的 j+=1 是需要通过 python 解释器去调用底层的 C 语言,并且这个表达式又涉及对象的创建和删除,因为 j 是整型,j+=1 相当于 j = new int(j + 1),所以 for 循环会快一些。

# 三、条件和循环的复用

我们经常会看到一些循环和条件代码并为一行的操作,如下:

expression1 if condition else expression2 for item in iterable
1

上面这个例子等同于:

for item in iterable:
    if condition:
        expression1
    else:
        expression2
1
2
3
4
5

如果没有 else,则可以写成如下格式:

expression for item in iterable if condition
1

比如,我们要绘制 y=2*|x|+5 的函数图像,已知集合 x 的数据点,需要计算 y 的数据点,那么就可以只用一行代码解决,如下:

y = [value * 2 + 5 if value > 0 else -value * 2 + 5 for value in x]
1

再比如,我们要处理文本字符串时,将文本逐行读出,然后按都好分割单词,去掉首尾的空字符串,并过滤长度小于 3 的单词,再返回单词组的列表,如下:

text = ' Today,  is, Sunday'
text_list = [s.strip() for s in text.split(',') if len(s.strip()) > 3]
print(text_list)
['Today', 'Sunday']
1
2
3
4

当然,这样的复用不局限一个循环,比如,给定两个列表 x,y,需要返回所有 x,y 的元素对组成的元组,相等情况除外,可以用以下方式:

[(xx, yy) for xx in x for yy in y if xx != yy]
1

# 四、总结

(1)、在条件语句中,if 语句可以单独执行,而 elif 和 else 必须和 if 配对使用,而 if 语句的判断,除了 bool 类型的,其他的都建议显示判断;

(2)、在 for 循环中,如果需要同时获得索引和值,可以使用 enumerate()函数来简化代码;

(3)、写条件循环的时候,合理利用 continue 和 break,可以很大程度上简化代码;

(4)、要注意条件与循环的复用,简单功能往往可以用一行直接完成,极大的提高代码质量和效率。

作者:乔克

本文链接:https://jokerbai.com

版权声明:本博客所有文章除特别声明外,均采用 署名-非商业性-相同方式共享 4.0 国际 (CC-BY-NC-SA-4.0) 许可协议。转载请注明出处!

上次更新: 2025/07/19, 11:33:23
Python之异常处理
Python之列表生成式

← Python之异常处理 Python之列表生成式→

最近更新
01
使用 Generic Webhook Trigger 触发 Jenkins 多分支流水线自动化构建
07-19
02
使用Zadig从0到1实现持续交付平台
07-19
03
基于Jira的运维发布平台
07-19
更多文章>
Theme by Vdoing | Copyright © 2019-2025 乔克 | MIT License | 渝ICP备20002153号 |
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式