Python - 默认参数

你好,有抱负的Python程序员们!今天,我们将深入探讨Python中神奇的默认参数世界。作为你友好的邻居计算机科学老师,我非常兴奋能引导你完成这次学习之旅。所以,拿起你最喜欢的饮料,放松一下,让我们一起踏上这次Python冒险吧!

Python - Default Arguments

什么是默认参数?

在我们深入细节之前,先从基础开始。默认参数是Python中的一个便捷特性,它允许你为函数参数定义预设值。如果你在调用函数时没有提供特定的值,这些预设值就会被使用。

可以将默认参数视为一个安全网。如果你忘记指定一个值,它们会在那里接住你,确保你的函数仍然可以平稳运行。这就像有一个朋友在野餐时总是带额外的零食一样——你可能并不总是需要它们,但有了它们以防万一真是太好了!

为什么使用默认参数?

  1. 它们使你的代码更灵活。
  2. 它们减少了你需要提供的参数数量。
  3. 当向函数中添加新参数时,它们有助于保持向后兼容性。

现在,让我们看看这在实践中是如何工作的!

默认参数的例子

让我们从一个简单的例子开始。想象我们正在创建一个用于问候人们的函数:

def greet(name, greeting="Hello"):
return f"{greeting}, {name}!"

# 使用该函数
print(greet("Alice"))
print(greet("Bob", "Hi"))

输出:

Hello, Alice!
Hi, Bob!

在这个例子中,greeting是我们的默认参数。如果我们没有指定问候语,函数将默认使用"Hello"。让我们分解一下:

  1. 我们用两个参数定义了greet函数:namegreeting
  2. greeting的默认值是"Hello"。
  3. 当我们调用greet("Alice")时,我们只提供了name。函数使用默认的"Hello"作为问候语。
  4. 当我们调用greet("Bob", "Hi")时,我们提供了namegreeting,所以函数使用"Hi"而不是默认值。

不使用关键字参数调用函数的例子

现在,让我们看一个稍微复杂一点的例子。我们将创建一个用于计算购物车中商品总价的函数:

def calculate_total(items, tax_rate=0.08, discount=0):
subtotal = sum(items)
total = subtotal * (1 + tax_rate) - discount
return round(total, 2)

# 使用该函数
cart1 = [10, 20, 30]
print(calculate_total(cart1))
print(calculate_total(cart1, 0.10))
print(calculate_total(cart1, 0.10, 5))

输出:

64.80
66.00
61.00

让我们分解一下:

  1. 我们的calculate_total函数有三个参数:items(必需),tax_rate(默认0.08)和discount(默认0)。
  2. 在第一次调用中,我们只提供了items。函数使用默认的税率,没有折扣。
  3. 在第二次调用中,我们提供了items和自定义的税率0.10。折扣保持为0。
  4. 在第三次调用中,我们提供了所有三个参数:items、税率和5的折扣。

请记住,当不使用关键字参数调用函数时,顺序很重要!Python会按照它们被提供的顺序将值分配给参数。

可变对象作为默认参数

现在,事情变得有点棘手。使用可变对象(如列表或字典)作为默认参数可能会导致意外的行为。让我给你看看我的意思:

def add_item(item, shopping_list=[]):
shopping_list.append(item)
return shopping_list

print(add_item("apple"))
print(add_item("banana"))
print(add_item("cherry"))

输出:

['apple']
['apple', 'banana']
['apple', 'banana', 'cherry']

惊喜!列表在每次调用时都在增长。这是因为默认列表只在函数定义时创建一次,而不是每次调用函数时。

为了避免这种情况,我们可以使用None作为默认值,并在函数内部创建一个新列表:

def add_item(item, shopping_list=None):
if shopping_list is None:
shopping_list = []
shopping_list.append(item)
return shopping_list

print(add_item("apple"))
print(add_item("banana"))
print(add_item("cherry"))

输出:

['apple']
['banana']
['cherry']

好多了!现在每次调用都会如预期地创建一个新的列表。

Python默认参数总结

让我们用一个方便的表格来总结我们学到的东西:

概念 描述 例子
基本默认参数 为参数提供默认值 def greet(name, greeting="Hello"):
多个默认参数 函数可以有多个默认参数 def calculate_total(items, tax_rate=0.08, discount=0):
参数顺序 非默认参数必须在函数定义中位于默认参数之前 def func(required, optional=default):
可变默认参数 避免使用可变对象作为默认参数 使用None作为默认值,并在函数内部创建对象
关键字参数 允许以任意顺序调用带有命名参数的函数 calculate_total(items=[10, 20], discount=5)

就这样,各位!你已经用默认参数提升了你的Python技能。记住,像任何强大的工具一样,要明智地使用它们。它们可以使你的代码更灵活、更易于使用,但要注意那些可变的默认值!

继续练习,保持好奇心,快乐编码!在你意识到之前,你将能够像专业人士一样编写Python。下次见,这是你友好的邻居计算机科学老师,再见!

Credits: Image by storyset