欢迎来到我们的系列博客《Python全景系列》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系列都将提供你需要的知识和技能。

这是系列第三篇,在这篇文章中我们将全面深入地介绍 Python 的控制流程,包括条件语句、循环结构和异常处理等关键部分,尤其会将列表解析、生成器、装饰器等高级用法一网打尽。此外,我还将分享一些独特的见解和研究发现,希望能给你带来新的启发。文章的结尾,我们将有一个 "One More Thing" 环节,我会分享一个很特别但又很少人知道的有用的 Python 控制流程的技巧。

一、条件语句(If-Elif-Else)

Python的条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。条件语句的基本形式包括 if、if-else 和 if-elif-else 三种。

# if 语句
x = 10
if x > 0:
print("x is positive") # if-else 语句
if x % 2 == 0:
print("x is even")
else:
print("x is odd") # if-elif-else 语句
if x < 0:
print("x is negative")
elif x == 0:
print("x is zero")
else:
print("x is positive")

注意Python的缩进规则,这是Python语法的一大特色。缩进用于区分代码块,比如以上if-elif-else的代码块。此外,Python中没有类似C++、Java的大括号{}来控制语句块,完全依赖于缩进。

二、循环结构(For和While)

Python中的循环有两种,一种是for循环,一种是while循环。

1 # for循环
2 for i in range(5):
3 print(i)
4
5 # while循环
6 count = 0
7 while count < 5:
8 print(count)
9 count += 1

Python的for循环更像是一个遍历循环,它会遍历序列中的每一个元素。而在很多其他语言中,for循环是通过条件判断来控制循环的。Python中的range()函数在很多情况下都非常有用,特别是在循环结构中。

三、异常处理(Try-Except)

在Python中,我们可以使用try-except语句来处理可能出现的错误或异常。

try:
print(1 / 0)
except ZeroDivisionError:
print("You can't divide by zero!")

Python的异常处理机制是一个很强大的工具,它可以帮助我们在出现错误或异常时保持程序的正常运行。不仅如此,Python的异常处理还支持多个except子句,这样我们可以对不同类型的异常进行不同的处理。此外,我们还可以使用finally子句,无论是否发生异常,finally子句中的代码总会被执行,常常用于进行清理工作。

四、控制流程的高级用法!

Python 的控制流程不仅仅局限于简单的条件判断、循环和异常处理。Python 还有很多高级的控制流程工具,它们可以帮助我们更高效、更精简地编写代码。以下是一些常见的高级控制流程工具:

1. 列表解析

列表解析是一种创建列表的简洁方法,它在一行代码中就可以完成循环和条件判断等操作。以下是一个列表解析的例子:

squares = [x**2 for x in range(10)]

以上代码会生成一个包含 0 到 9 的平方的列表。这个列表解析的过程可以理解为:对于每个在 `range(10)` 中的 `x`,计算 `x` 的平方,然后将结果添加到列表中。列表解析相比普通的循环语句,不仅代码更简洁,而且执行速度更快。这是因为列表解析在内部实现了优化,而普通的循环语句没有。

2. 生成器表达式

生成器表达式和列表解析类似,但它生成的是一个生成器对象,而不是一个实际的列表。生成器对象是一个可迭代的对象,它在每次迭代时都会生成新的值,而不是一次性生成所有的值。以下是一个生成器表达式的例子:

squares = (x**2 for x in range(10))

以上代码会创建一个生成器对象,这个对象会在每次迭代时生成一个平方数。你可以通过 `next()` 函数或者 `for` 循环来迭代这个对象。生成器表达式比列表解析更节省内存,因为它不需要一次性生成所有的值。这在处理大规模数据时非常有用。

3. 装饰器

装饰器是一个非常强大的工具,它允许我们修改一个函数或者类的行为,而不需要改变它的源代码。以下是一个简单的装饰器例子:

 1 def my_decorator(func):
2 def wrapper():
3 print("Something is happening before the function is called.")
4 func()
5 print("Something is happening after the function is called.")
6 return wrapper
7
8 @my_decorator
9 def say_hello():
10 print("Hello!")
11
12 say_hello()

以上代码定义了一个装饰器 `my_decorator`,它会在调用 `say_hello` 函数前后分别打印一段消息。`@my_decorator` 就是将 `say_hello` 函数装饰成 `my_decorator` 的方式。装饰器可以用来做很多事情,比如日志记录、性能测试、事务处理、缓存等等。在很多情况下,使用装饰器可以让我们的代码更加干净,更易于管理和重用。

One More Thing!!

我在阅读GitHub和各种技术博客中发现了一个很特别但又很少人知道的Python控制流程技巧——使用`else`子句在`for`和`while`循环中。

许多人可能不知道,`for`循环和`while`循环可以有一个可选的`else`子句,它在循环正常结束时执行。如果循环被`break`语句终止,`else`子句将不会被执行。

 1 for i in range(5):
2 print(i)
3 else:
4 print("Loop finished!")
5
6 count = 0
7 while count < 5:
8 print(count)
9 count += 1
10 else:
11 print("Loop finished!")

这个特性在很多情况下都非常有用,比如我们在循环中搜索一个元素,如果找到了就通过`break`语句终止循环,如果循环正常结束还没有找到,就执行`else`子句中的代码。

希望你在阅读这篇文章后,能对Python的控制流程有更深入的理解。如果你有任何问题或者有更好的建议,欢迎在下方留言,我们一起探讨,一起学习。

< Python全景系列-3 > Python控制流程盘点及高级用法、神秘技巧大揭秘!的更多相关文章

  1. 【python可视化系列】python数据可视化利器--pyecharts

    学可视化就跟学弹吉他一样,刚开始你会觉得自己弹出来的是噪音,也就有了在使用python可视化的时候,总说,我擦,为啥别人画的图那么溜: [python可视化系列]python数据可视化利器--pyec ...

  2. python基础系列教程——Python中的编码问题,中文乱码问题

    python基础系列教程——Python中的编码问题,中文乱码问题 如果不声明编码,则中文会报错,即使是注释也会报错. # -*- coding: UTF-8 -*- 或者 #coding=utf-8 ...

  3. python基础系列教程——Python库的安装与卸载

    python基础系列教程——Python库的安装与卸载 2.1 Python库的安装 window下python2.python3安装包的方法 2.1.1在线安装 安装好python.设置好环境变量后 ...

  4. python基础系列教程——Python的安装与测试:python的IDE工具PyDev和pycharm,anaconda

    ---恢复内容开始--- python基础系列教程——Python的安装与测试:python的IDE工具PyDev和pycharm,anaconda 从头开启python的开发环境搭建.安装比较简单, ...

  5. Python通过subprocess.Popen.poll控制流程

    python写流程控制的时候,有时需要等待运行结果完成才能进行下一步.有几个想法: 一是反复循环判断直到生成结果文件(且文件中有预期结果),低效易出错: 二是用subprocess模块来判断进程结果, ...

  6. Python知识点入门笔记——基本控制流程

    复合赋值语句 在Python中,可以使用一次赋值符号,给多个变量同时赋值:                  划重点:age_1,age_2 = age_2,age_1这种操作是Python独有的 i ...

  7. Python学习系列之一: python相关环境的搭建

    前言 学习python和使用已经一年多了,这段时间抽空整理了一下以前的笔记,方便日后查阅. Python介绍 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Pytho ...

  8. python系列:二、Urllib库的高级用法

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 打开我们的浏览器,调 ...

  9. Python黑帽编程2.4 流程控制

    Python黑帽编程2.4  流程控制 本节要介绍的是Python编程中和流程控制有关的关键字和相关内容. 2.4.1 if …..else 先上一段代码: #!/usr/bin/python # - ...

  10. 小白学 Python(8):基础流程控制(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

随机推荐

  1. CUDA基础2

    二. 1.指令调度,对于多条指令怎样调度让他们运行更快. 对于有冲突的两条指令,采用寄存器重命名技术. 2.指令重排  乱序执行,为了获取最大的吞吐率.  增大功耗 增加芯片面积. 3.缓存,容量越大 ...

  2. 【RSocket】使用 RSocket(三)——服务端主动调用客户端方法

    1. 编写客户端接收请求的逻辑 我们可以在初始化 Rsocket 实例的时候指定客户端可以被调用的方法,使用 acceptor() 指定可被调用的方法和方法使用的通信模型类型: 通信类型为 Reque ...

  3. fullcalendar 日历插件的使用

    [需求]:使用 fullcalendar日历插件,完成如下功能:可以进行拖动,点击空白处添加,双击后修改和删除等功能.API 链接

  4. ThreadLocal 类

    更多内容,访问 IT-BLOG ThreadLocal 并不是一个Thread,而是 ThreadLocalVariable(线程局部变量).也许把它命名为 ThreadLocalVar更加合适.线程 ...

  5. Midjourney AI绘画使用指南

    ​上图有Midjourney生成,提示语为:24-year-old Chinese woman with long hair and a Tedd Midjourney是一款基于Prompt设计和CL ...

  6. Vue2模版编译(AST、Optimize 、Render)

    在Vue $mount过程中,我们需要把模版编译成render函数,整体实现可以分为三部分: parse:解析模版 template生成 AST语法树 optimize: 优化 AST语法树,标记静态 ...

  7. ES6中的解构赋值(数组,对象,嵌套,默认值)

    解构赋值 通过解构赋值,可以快速从对象或者数组中取出属性或者数值. 解构赋值 可以通过定位到数组或者对象的某一个位置,将值直接赋给一个或多个变量. const arr = ['dasha', 'ers ...

  8. computed的setter妙用

    使用场景:当我们用v-model绑定了一个计算属性,想直接设置计算属性时,就要利用到setter demo: <template> <div> <div>First ...

  9. JS中我们为什么要new个实例而不直接执行

    正常情况:<script> function sayHello() { alert("hello") } sayHello();直接调用他 </script> ...

  10. Windows下搭建java环境最新版本jdk运行jar文件

    1:安装JDK(Java Development Kit),链接https://www.oracle.com/java/technologies/downloads/#jdk18-windows下载最 ...