超详解——python条件和循环——小白篇

2024-06-15 10:29:07 浏览数 (2)

1. 缩进和悬挂else

在Python中,代码块是通过缩进来表示的,这与其他许多编程语言不同。正确的缩进不仅影响代码的可读性,还直接影响程序的逻辑。悬挂else(hanging else)是指else子句和相应的if或循环在同一级别的缩进。

1.1 缩进的重要性

Python使用缩进来表示代码块,缩进的层次决定了代码的结构和执行顺序。

代码语言:javascript复制
x = 5

if x > 0:
    print("Positive")
else:
    print("Non-positive")

else子句与if语句在同一级别的缩进。如果条件判断为False,则执行else子句中的代码。

1.2 悬挂else的使用

悬挂else指的是else子句和相应的if或循环在同一级别的缩进。

代码语言:javascript复制
for i in range(5):
    if i == 3:
        print("Found 3")
        break
else:
    print("3 not found")

else子句与for循环在同一级别的缩进。只有当循环正常结束(没有被break打断)时,才会执行else子句。

1.3 代码示例和解释

代码语言:javascript复制
number = 7

# 判断数字是正数、负数还是零
if number > 0:
    print("Positive number")
elif number == 0:
    print("Zero")
else:
    print("Negative number")

# 判断数字是否在某个范围内
if 5 <= number <= 10:
    print("Number is between 5 and 10")
else:
    print("Number is not between 5 and 10")

我们使用了if、elif和else来检查number的值,并且检查number是否在特定范围内。

2. 条件表达式

条件表达式(也称为三元运算符)允许我们在一行中进行简洁的条件判断。条件表达式的语法如下:

代码语言:javascript复制
result = "Positive" if x > 0 else "Non-positive"

2.1 条件表达式的应用

条件表达式在需要简洁判断的情况下非常有用。

代码语言:javascript复制
x = 5
result = "Positive" if x > 0 else "Non-positive"
print(result)  # 输出:Positive

x = -3
result = "Positive" if x > 0 else "Non-positive"
print(result)  # 输出:Non-positive

2.2 复杂条件下的使用

在更复杂的条件下,条件表达式依然可以简化代码。考虑以下示例:

代码语言:javascript复制
age = 20
status = "Adult" if age >= 18 else "Minor"
print(status)  # 输出:Adult

score = 85
grade = "A" if score >= 90 else ("B" if score >= 80 else "C")
print(grade)  # 输出:B

通过嵌套条件表达式,我们可以在一行中实现多重判断。

2.3 条件表达式的优缺点

条件表达式的优点在于其简洁性和可读性,但在条件复杂时,过度使用可能会降低代码的可读性。在这种情况下,使用传统的if-else结构可能更为合适。

3. 和循环搭配的else

在Python中,循环结构(如for和while)可以使用else子句。只有当循环正常结束(即没有被break语句打断)时,else子句才会被执行。

3.1 for循环中的else

for循环中的else子句:

代码语言:javascript复制
for i in range(5):
    print(i)
else:
    print("Loop finished")

# 如果循环被break打断,else子句不会执行
for i in range(5):
    if i == 3:
        break
    print(i)
else:
    print("Loop finished")  # 不会执行

for循环正常结束,因此else子句被执行,输出"Loop finished"。在第二个示例中,for循环在i == 3时被break打断,因此else子句不会执行。

3.2 while循环中的else

while循环中的else子句也遵循相同的规则:

代码语言:javascript复制
count = 0
while count < 5:
    print(count)
    count  = 1
else:
    print("While loop finished")

# 如果循环被break打断,else子句不会执行
count = 0
while count < 5:
    if count == 3:
        break
    print(count)
    count  = 1
else:
    print("While loop finished")  # 不会执行

while循环正常结束,因此else子句被执行。在第二个示例中,while循环在count == 3时被break打断,因此else子句不会执行。

3.3 实际应用

在实际应用中,for-else和while-else结构可以用于查找特定元素或条件。例如,检查一个列表中是否存在某个元素:

代码语言:javascript复制
numbers = [1, 2, 3, 4, 5]

for number in numbers:
    if number == 3:
        print("Found 3")
        break
else:
    print("3 not found")

在这个示例中,如果在列表中找到了数字3,则打印"Found 3"并结束循环。如果循环正常结束而没有找到数字3,则打印"3 not found"。

4. 可调用对象

在Python中,可调用对象包括函数、方法、类等。可调用对象是可以被调用执行的一类对象。我们可以使用callable()函数判断一个对象是否可调用。

4.1 可调用对象的示例

不同类型的可调用对象:

代码语言:javascript复制
# 定义一个函数
def my_function():
    print("Hello, world!")

# 定义一个类
class MyClass:
    def __call__(self):
        print("Instance called")

# 创建对象
func = my_function
obj = MyClass()

# 检查对象是否可调用
print(callable(func))  # True,因为func是一个函数
print(callable(obj))  # True,因为obj是一个可调用的类实例

# 调用对象
if callable(func):
    func()  # 输出:Hello, world!

if callable(obj):
    obj()  # 输出:Instance called

4.2 可调用类实例

在Python中,类实例也可以是可调用的。如果一个类定义了__call__方法,则其实例为可调用对象。

代码语言:javascript复制
class Counter:
    def __init__(self):
        self.count = 0

    def __call__(self):
        self.count  = 1
        print(f'Current count: {self.count}')

counter = Counter()
counter()  # 输出:Current count: 1
counter()  # 输出:Current count: 2

4.3 使用函数作为参数

函数是Python中的一等公民,可以作为参数传递给其他函数。

代码语言:javascript复制
def greet(name):
    return f'Hello, {name}!'

def call_function(func, arg):
    return func(arg)

result = call_function(greet, 'Alice')
print(result)  # 输出:Hello, Alice!

greet函数作为参数传递给call_function函数,并调用它。

4.4 高阶函数

高阶函数是指接受函数作为参数或返回一个函数的函数。高阶函数的用法:

代码语言:javascript复制
def add(x):
    def add_to(y):
        return x   y
    return add_to

add_five = add(5)
result = add_five(3)
print(result)  # 输出:8

add函数返回一个新函数add_to,该函数将其参数与add函数的参数相加。

4.5 匿名函数(Lambda)

匿名函数(lambda)是一种简洁的定义函数的方法。lambda表达式通常用于定义简单的、临时的函数。

代码语言:javascript复制
add = lambda x, y: x   y
print(add(2, 3))  # 输出:5

# 使用lambda表达式进行排序
data = [(1, 'one'), (2, 'two'), (3, 'three')]
data.sort(key=lambda item: item[1])
print(data)  # 输出:[(1, 'one'), (3, 'three'), (2, 'two')]

总结

在条件判断和循环中使用缩进和悬挂else,可以使代码结构清晰。条件表达式使简单的条件判断更加简洁。循环结构中的else子句在循环正常结束时执行。可调用对象包括函数、方法、类等,可以使用callable()函数判断对象是否可调用。

0 人点赞