一个python 程序执行顺序

1. Python程序执行顺序

在Python中,程序的执行顺序通常遵循几个基本原则:

(1)从上到下:Python代码通常从上到下顺序执行。

(2)代码块:由缩进(如空格或制表符)定义的代码块(如函数定义、类定义、循环体、条件语句体等)内的代码会按照特定的逻辑顺序执行。

(3)控制流语句:如ifforwhile等控制流语句会改变代码的执行顺序。

下面是一个具体、完整、详细的代码示例,该示例演示了Python程序的基本执行顺序和控制流语句的使用:

# 这是一个简单的Python程序,演示了执行顺序和控制流语句  # 1. 定义变量  
x = 10  
y = 20  # 2. 打印初始值  
print("初始值:x =", x, "y =", y)  # 3. 定义一个函数  
def add_numbers(a, b):  # 函数内部的代码块  sum_value = a + b  return sum_value  # 4. 调用函数并打印结果  
result = add_numbers(x, y)  
print("x 和 y 的和是:", result)  # 5. 使用if语句  
if x > y:  print("x 大于 y")  
else:  print("x 不大于 y")  # 6. 使用for循环  
for i in range(5):  print("当前循环次数:", i)  # 7. 使用while循环  
count = 0  
while count < 3:  print("当前while循环次数:", count)  count += 1  # 8. 更改变量值并打印  
x = x + 5  
y = y - 10  
print("修改后的值:x =", x, "y =", y)

这个程序首先定义了两个变量xy,并打印了它们的初始值。然后定义了一个函数add_numbers,用于计算两个数的和,并调用了这个函数打印结果。接着使用if语句判断xy的大小关系,并使用forwhile循环分别打印循环次数。最后,更改了xy的值,并打印了修改后的值。整个程序的执行顺序清晰明了,符合Python的语法规则和逻辑。

2. Python中的控制流语句有哪些

Python中的控制流语句是用于控制程序执行流程的语句。这些语句允许程序根据条件、迭代或循环来执行不同的代码块。以下是Python中常见的控制流语句:

2.1条件语句(if, elif, else)

if 语句用于基于某个条件(布尔表达式)来执行代码块。如果条件为真(True),则执行 if 语句块中的代码。如果提供了 elif(else if)子句,则当 if 语句的条件为假时,Python 会检查 elif 子句的条件。如果 ifelif 的条件都为假,并且提供了 else 子句,则执行 else 语句块中的代码。

x = 10  
if x > 0:  print("x 是正数")  
elif x < 0:  print("x 是负数")  
else:  print("x 是零")

2.2循环语句(for, while)

(1)for 循环用于遍历序列(如列表、元组、字符串)或其他可迭代对象。对于可迭代对象中的每个元素,都会执行一次循环体。

for i in range(5):  print(i)

(2)while 循环会不断执行循环体中的代码,直到指定的条件不再满足为止。

count = 0  
while count < 5:  print(count)  count += 1

2.3跳转语句(break, continue, pass)

(1)break 语句用于跳出最近的包含它的循环(forwhile)。

for i in range(10):  if i == 5:  break  print(i)

(2)continue 语句用于跳过当前循环的剩余部分,并立即开始下一次循环。

for i in range(10):  if i % 2 == 0:  continue  print(i)

(3)pass 语句是一个空操作,用于在语法上需要一个语句,但程序不需要执行任何操作时。它通常用作一个占位符,在将来可能会添加代码。

def my_function():  pass  # 这里什么也不做,但语法上需要一个语句

2.4异常处理语句(try, except, finally)

这些语句用于处理运行时错误或异常情况。try 块包含可能会引发异常的代码。except 块用于处理这些异常。finally 块无论是否发生异常都会执行。

try:  x = 1 / 0  # 这会引发一个 ZeroDivisionError  
except ZeroDivisionError:  print("不能除以零")  
finally:  print("这部分代码总是会被执行")

3.其他的控制流结构

除了上文提到的控制流语句外,Python 中还有一些其他的控制流结构,尽管它们不是直接的语句,但在某些情境下对控制程序流程很有帮助。

3.1列表推导式(List Comprehensions)

列表推导式是创建列表的一种简洁方式,它可以在一行代码中生成一个列表,而不需要使用显式的循环。

# 使用列表推导式生成一个包含 0 到 9 的平方的列表  
squares = [x**2 for x in range(10)]  
print(squares)  # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

3.2生成器表达式(Generator Expressions)

生成器表达式类似于列表推导式,但它们返回的是一个生成器对象,而不是一个列表。生成器是惰性的,它们只在迭代时生成值,这可以节省内存。

# 使用生成器表达式创建一个生成器,该生成器产生 0 到 9 的平方  
squares_gen = (x**2 for x in range(10))  
# 迭代生成器以获取其值  
for square in squares_gen:  print(square)

3.3上下文管理器(Context Managers)和 with 语句

with 语句用于包装代码的执行上下文。它确保了一个代码块执行前后,进行初始化设置和清理操作,如打开和关闭文件、锁定和释放资源等。

# 使用 with 语句打开文件,确保文件在操作完成后被正确关闭  
with open('file.txt', 'r') as file:  data = file.read()  
# 在 with 语句块之外,文件已经被自动关闭

3.4函数定义和调用

虽然函数定义本身不是控制流语句,但函数的调用和返回值可以控制程序的流程。通过定义函数,我们可以将代码块组织成可重用的单元,并通过函数调用在程序的多个位置执行这些代码块。

def greet(name):  return "Hello, " + name  # 调用函数并打印返回值  
print(greet("World"))  # 输出: Hello, World

3.5递归

递归是一种函数调用自身的方式,它通常用于解决可以分解为更小、相似子问题的问题。递归函数通过定义基准情况和递归步骤来控制流程。

def factorial(n):  if n == 0 or n == 1:  return 1  else:  return n * factorial(n-1)  # 调用递归函数并打印结果  
print(factorial(5))  # 输出: 120

3.6装饰器(Decorators)

装饰器是Python中一种高级功能,它允许我们在不修改函数或类代码的情况下,给它们添加额外的功能。装饰器本身是一个可调用对象(通常是函数),它接受一个函数作为参数,并返回一个新的函数或可调用对象。

def my_decorator(func):  def wrapper():  print("Something is happening before the function is called.")  func()  print("Something is happening after the function is called.")  return wrapper  @my_decorator  
def say_hello():  print("Hello!")  # 调用 say_hello 函数时,my_decorator 修饰的功能将被执行  
say_hello()  
# 输出:  
# Something is happening before the function is called.  
# Hello!  
# Something is happening after the function is called.

这些结构虽然不是直接的控制流语句,但它们对于组织和管理Python代码的流程至关重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/25230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20240605解决飞凌的OK3588-C的核心板刷机原厂buildroot不能连接ADB的问题

20240605解决飞凌的OK3588-C的核心板刷机原厂buildroot不能连接ADB的问题 2024/6/5 13:53 rootrootrootroot-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508$ ./build.sh --help rootrootrootroot-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508$ ./build.sh lun…

基于I2C协议的OLED显示(利用U82G库)

目录 一、I2C协议的基本原理和时序协议I2C通信协议的原理I2C时序基本单元I2C时序 二、建立工程RCC配置TIM1配置时钟树配置工程配置 三、U8g2移植精简u8g2_d_setup.c精简u8g2_d_memory.c编写移植函数stm32_u8g2.hstm32_u8g2.c 四、实验1.U82G的demo例程2.显示网名昵称中文取模步…

L48---1637. 两点之间不包含任何点的最宽垂直区域(排序)---Java版

1.题目描述 2.思路 &#xff08;1&#xff09;返回两点之间内部不包含任何点的 最宽垂直区域 的宽度。 我的理解是相邻两个点&#xff0c;按照等差数列那样&#xff0c;后一个数减去相邻的前一个数&#xff0c;才能保证两数之间不含其他数字。 &#xff08;2&#xff09;所以&…

c++|unordered系列关联式容器(unordered_set、unordered_map介绍使用+哈希结构)

目录 一、unordered_set的介绍与使用 1.1unordered_set介绍 1.2unordered_set使用 2.2.1构造 2.2.2容量 2.2.3修改 二、unordered_map的介绍与使用 2.1unordered_map介绍 2.2unordered_map使用 2.2.1构造 2.2.2容量 2.2.3修改 三、底层结构(哈希) 3.1哈希概念 3.2哈…

【回调函数】

1.回调函数是什么&#xff1f; 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另⼀个函数&#xff0c;当这个指针被用来调用其所指向的函数 时&#xff0c;被调用的函数就是回调函数。回调函数不是由该函数的实现方…

【PL理论】(12) F#:模块 | 命名空间 | 异常处理 | 内置异常 |:? | 相互递归函数

&#x1f4ad; 写在前面&#xff1a;本章我们将介绍 F# 的模块&#xff0c;我们前几章讲的列表、集合和映射都是模块。然后我们将介绍 F# 中的异常&#xff0c;以及内置异常&#xff0c;最后再讲解一下相互递归函数。 目录 0x00 F# 模块&#xff08;Module&#xff09; 0x01…

Bootstrap框架集成ECharts教程

最新公司项目要在原有的基础上增加一些饼状图和柱状图来统计一些数据给客户&#xff0c;下面就是集成的一个过程&#xff0c;还是很简单的&#xff0c;分为以下几步 1、引入ECharts的包 2、通过ECharts官网或者菜鸟教程直接拿示例代码过来修修改改直接用就可以了 注意&#xf…

Windows关闭自动更新最有效的方法

按WR打开电脑命令框输入“regedit”进入注册表 依次点击以下几个 右击新建一个“DWORD(32位)值”&#xff0c;命名为”FlightSettingsMaxPauseDays“ 右边选择十进制&#xff0c;左边填写暂停更新的天数 打开windows更新&#xff0c;进入高级选项 选择暂停更新的天数&#xff…

Fortigate防火墙二层接口的几种实现方式

初始配置 FortiGate出厂配置默认地址为192.168.1.99&#xff08;MGMT接口&#xff09;&#xff0c;可以通过https的方式进行web管理&#xff08;默认用户名admin&#xff0c;密码为空&#xff09;&#xff0c;不同型号设备用于管理的接口略有不同。 console接口的配置 防火墙…

4_1 Linux Centos7的RPM相关知识

4_1 Linux Centos7的RPM相关知识 文章目录 4_1 Linux Centos7的RPM相关知识1. RPM包文件名特征2. RPM软件包管理3. RPM包的一般安装位置4. RPM基本命令5. yum 系统环境centos7.9 临时挂载光盘文件&#xff1a;mount /dev/cdrom /dvd 1. RPM包文件名特征 * 软件名-版本信息.操作…

linux dtb解析方法之验证修改的dts是否有效

我们在调试linux系统外设的时候&#xff0c;经常修改dts文件&#xff0c;那怎么check修改是否生效呢 一、板载设备树路径 linux系统烧录完&#xff0c;登录系统后我们通常能看到如下的fdt和设备树文件&#xff1a; ls /sys/firmware/ devicetree fdt 二、解析板载设备树 那如…

oracle表锁

--oracle提醒记录被另一个用户锁住&#xff1a; --问题描述&#xff1a;你去修改数据时&#xff0c;报错“ --问题分析&#xff1a;你用select t.*,t.rowid from qxt_logsend_0728修改数据结果集时&#xff0c;计oracle会通过事务锁锁住这个记录&#xff0c;点击记录改变&#…

TypeScript常见面试题第十一节

题目五十一:什么是TypeScript映射文件? 一、讲解视频 TS面试题五十一:什么是TypeScript映射文件? 二、题目解析 本题目考察 ts 编译调试的基础内容,ts 的源映射文件通过编译选项–sourceMap 进行生成,指定后编译完了会自动生成对应映射文件,可以用于调试 ts 文件。 三…

java并发控制(猴子摘桃例子)

【问题】 有n个桃子&#xff0c; 猴子A每次固定摘2个&#xff0c;猴子B每次固定摘3个&#xff0c;这2只猴子不断摘桃子直到剩余桃子数量不足以摘&#xff08;必须满足摘桃个数&#xff09;&#xff1b; 【1】 使用AtomicInteger&#xff08;推荐&#xff09; 1&#xff09;利…

Blender导出FBX模型到Unity

Blender设计生成了模型之后&#xff0c;要导入到Unity中使用&#xff0c;我们可以采用FBX格式&#xff0c;但是因为Blender和Unity采用的坐标系不同&#xff0c;Blender是-Y轴向前&#xff0c;Z轴向上&#xff0c;而Unity是Z轴向前&#xff0c;Y轴向上。如果直接导出&#xff0…

iOS--block再学习

block再学习 什么是blockblock是带有自动变量的匿名函数block语法 block的实现block的实质截获自动变量__blcok说明符Block存储域__block变量存储域使用__block变量用结构体成员变量__forwarding的原因 截获对象 什么是block Block时c语言的扩充功能&#xff0c;它允许开发者定…

pytorch之猫狗识别项目

1. 导入资源包 资源包&#xff1a; import torchvision&#xff1a;PyTorch 提供的视觉库&#xff0c;包含了常用的计算机视觉模型架构、数据集以及图像转换工具。 from torchvision import datasets, models&#xff1a;导入 torchvision 中的 datasets 和 models 模块&#…

步态控制之捕获点(Capture Point,CP)

捕获点(Capture Point,CP) 捕获点(Capture Point,CP)是机器人学中的一个重要概念,用于评估和控制机器人步态的稳定性。捕获点表示机器人需要踏出的下一步位置,以确保在动态条件下的稳定性。它特别适用于步态控制和动态行走控制。 应用捕获点进行步态控制 捕获点在步…

python 列出面板数据所有变量名

在Python中&#xff0c;处理面板数据&#xff08;Panel Data&#xff09;通常使用pandas库&#xff0c;特别是当数据以DataFrame或Panel&#xff08;尽管Panel在较新版本的pandas中已被弃用&#xff09;的形式存在时。然而&#xff0c;由于Panel的弃用&#xff0c;现代做法通常…

Docker日志相关命令

日志详情 --details docker logs 默认就是 --details docker logs --details 容器id docker logs 容器id最后n行日志 -n --tail –tail 是 Docker Logs 命令的一个选项&#xff0c;用于限制显示容器日志的行数。通过指定 --tail 后面的数字参数&#xff0c;你可以只显示最后…