分支和循环
if
if
语句用于根据条件控制代码需要执行的逻辑。
示例:
age = 20if age >= 18:print("成年人")
elif age >= 13 and age < 18:print("青少年")
else:print("儿童")
在这个示例中,首先检查 age
是否大于或等于18
,如果是,则输出 “成年人”。如果不是,则继续检查 age
是否在13
至17
岁之间,如果是,则输出 “青少年”。如果上述两个条件都不满足,则执行 else
子句,输出 “儿童”。
注意:每个条件后面都需要跟一个冒号:
,并且在条件为真的情况下执行的代码需要适当的缩进(通常是4个空格或者1个制表符)。此外,Python中用于判断条件的表达式可以是任意能够计算出布尔值(True
或者False
)的表达式。
关于代码缩进:Python 使用严格的代码缩进表示代码块(一般为四个空格),多加空格或少加空格都会引发语法错误。
当代码块中不需要执行实际的逻辑时,为了让程序能正常运行,可以使用 pass 表示什么都不做,如:
if some_condition:pass # 什么都不做
else:...
Python 中没有 switch-case
语句。
Python中的空置判断
Python中判断一个值是否为空,可以使用is None
、is not None
、==None
、=!None
。
# is None
variable = None
if variable is None:# 变量variable是None...
else:# 变量variable不是None
is not None
则相反
# 使用is not None
if variable is not None:# 变量variable不是None...
else:# 变量variable是None
# 使用 == None
if variable == None:# 可能适用于某些情况,但在比较复杂类型时可能引起意料之外的结果
else:# 变量variable不等于None
# 使用 != None
if variable != None:# 变量variable不等于None
else:# 变量variable等于None
- 尽管
==
和!=
在大多数情况下也能工作,但由于is
关键字专门用来检测两个对象是否是同一个对象引用,对于None
这样的单例对象而言,is
操作符提供了更加准确且符合直觉的比较。同时,考虑到Python的动态类型特性,直接用is None
或is not None
检查空值避免了潜在的类型转换陷阱, 因此在实践中更推荐使用这两种形式。
Python的条件表达式
# val_is_true if condition else val_is_false
age = 25
status == "成年" if age >= 18 else "未成年"
for 和 while 语句
for循环
for
循环主要用于遍历任何可迭代对象,包括但不限于列表、元组、字符串、字典、集合以及生成器等。
基础示例:
fruits = ['apple', 'banana', 'cherry']for fruit in fruits:print(fruit) # apple banana cherry
另外可选else
子句
for item in iterable:# 循环体# 执行相关逻辑
# 可选else子句,会在循环结束后(非break跳出的情况下)执行
else:...
示例
numbers = [1, 2, 3, 4, 5]
found_even = Falsefor number in numbers:if number % 2 == 0:found_even = Trueprint(f"找到偶数:{number}")break
else:print("列表中没有找到偶数")# 如果在循环体中找到偶数并执行了break,则else部分不会被执行
# 如果在循环正常结束(即没有执行break),else部分将会被执行
while循环
while
循环会不断地执行循环体内的代码,直到指定的条件不再满足为止。
while conditon:# 这里是循环体 只要条件为True就会一直执行# 执行相关操作# 可选的else子句,同样在循环结束以后(非break跳出情况下)执行
else:
举例
count = 0
while count < 5:print(count) # 0 1 2 3 4count += 1
区别:
for
循环常用语已知次数或遍历已知集合的情况。while
循环适用于不确定循环次数,需要依赖某种条件才能决定何时退出循环的情况。for
循环通常与迭代器配合使用,无需手动管理索引或迭代过程。while
循环在需要不断检查某个状态或者条件时更有优势,循环次数往往不能事先确定。
共同点:
二者都可以通过break
语句提前跳出循环,也可以通过continue
语句跳过本次循环进入下一轮循环,并且都支持使用else
子句在特定条件下执行额外的代码块。
range 函数,enumerate 函数 ,break,continue
range()
函数在Python中用于生成一个整数序列,只要配合for
循环来遍历一定范围内的数字。
range(stop)
range(start, stop)
range(start, stop, step)
- stop 参数指定了序列结束位置(不包含该值本身)。
- start 参数是序列开始的位置,默认是0。
- step 参数定义了序列中相邻两个元素之间的差值,默认为1。
for i in range(5):print(i) # 0 1 2 3 4for i in range(1, 6, 2):print(i) # 1 3 5
enumerate()
函数用于将一个可迭代对象(如列表、元组或其他序列类型)组合成一个索引序列,同时列出数据项及其相应的索引。这在需要同时访问序列中的索引和值时非常有用。其基本语法如下:
enumrate(iterable, start=0)
- iterable是要枚举的对象
- start指定计数从哪个数字开始,默认为0
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumrate(fruits):print(f"index:{index}, fruit: {fruit}")# index:0, fruit: apple# index:1, fruit: banana# index:2, fruit: cherry
break
语句用于强制退出当前正在执行的循环(无论是for
还是while
循环)。一旦执行到break
,程序将立即离开循环结构,继续执行循环之后的代码。
for num in range(10):if num == 5:breakprint(num) # 0 1 2 3 4 (不会打印5及5后的数字
continue
语句用于跳过当前循环体中剩余的语句,然后直接进入下一轮循环的判断阶段。当执行到continue
时,本次循环余下的代码将被忽略。
for num in range(10):if num % 2 == 0:continueprint(num) # 1 3 5 7 9 (只打印基数,每次遇到偶数时就跳过输出并进入下一次循环
列表推导与字典推导
列表推导(List Comprehension)和字典推导(Dictionary Comprehension)是Python中两种高效简洁的创建序列结构的方法。
列表推导
列表推导允许你从其他可迭代对象(如列表、元组、字符串、range对象等)中创建一个新的列表。它的基本形式是将一个表达式嵌入在[]
方括号内,并可能包含循环和条件判断。
numbers = [1, 2, 3, 4, 5]
# 使用列表推导生成一个新的列表,其中每个元素都是原列表元素的平方
squared_numbers = [n**2 for n in numbers]
# [1, 4, 9, 16, 25]# 同时还可以添加条件过滤
even_squared = [n**2 for n in number if n % 2 == 0]
# [4, 16]
字典推导
字典推导与列表推导类似,但它用来创建字典而不是列表。字典推导采用一对键值对的形式,置于花括号内{}
内,并同样支持循环和条件判断。
# 姓名
names = ['Alice', 'Bob', 'Charlie']
# 年龄
ages = [25, 30, 35]# 使用字典推导创建一个字典,键为姓名值为年龄
person_dict = {name:age for name, age in zip(names, ages)}
# 结果: {'Alice':25, 'Bob': 30, 'Charlie':35}# 添加条件过滤,只保留年龄大于30的人
adults_dict = {name: age for name, age in zip(names, ages) if age >= 30}
列表推导和字典推导都是Python中简化和优化代码的有效手段,尤其是处理大量数据转换和筛选时尤为实用。
zip
是 Python 内置函数,它用于将多个可迭代对象(在这个例子中是names
和ages
两个列表)的元素按序配对。具体来说,zip
函数会返回一个迭代器,这个迭代器会产生由输入序列中相对应位置的元素组成的元组。对于每一个输入序列,zip
函数都会取出相同索引位置上的元素,直到任一输入序列耗尽为止。