首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第 10章 编写高效的函数
10.1 函数名
10.2 函数大小的权衡
10.3 函数的形参和实参
10.3.1 默认参数
10.3.2 使用*和**向函数传参
10.3.3 使用*创建可变参数函数
10.3.4 使用**创建可变参数函数
10.3.5 使用*和**创建包装函数
10.4 函数式编程
10.4.1 副作用
10.4.2 高阶函数
10.4.3 lambda 函数
10.4.4 在列表推导式中进行映射和过滤
10.5 返回值的数据类型应该不变
10.6 抛出异常和返回错误码
第 11章 注释、文档字符串和类型提示
11.1 注释
11.1.1 注释风格
11.1.2 内联注释
11.1.3 说明性的注释
11.1.4 总结性的注释
11.1.5 “经验之谈”的注释
11.1.6 法律注释
11.1.7 注释的专业性
11.1.8 代码标签和TODO 注释
11.1.9 神奇的注释和源文件编码
11.2 文档字符串
11.3 类型提示
11.3.1 使用静态分析器
11.3.2 为多种类型设置类型提示
11.3.3 为列表、字典等设置类型提示
11.3.4 通过注释向后移植类型提示
第 12章 通过Git管理项目
12.1 Git 提交和仓库
12.2 使用Cookiecutter新建Python项目
12.3 安装Git
12.3.1 配置Git 用户名和电子邮件
12.3.2 安装GUI Git 工具
12.4 Git 的工作流程
12.4.1 Git 是如何追踪文件状态的
12.4.2 为什么要暂存文件
12.5 在计算机上创建Git 仓库
12.5.1 添加供Git 追踪的文件
12.5.2 忽略仓库中的文件
12.5.3 提交修改
12.5.4 从仓库中删除文件
12.5.5 重命名和移动仓库中的文件
12.6 查看提交日志
12.7 恢复历史修改
12.7.1 撤销未提交的本地修改
12.7.2 取消暂存的文件
12.7.3 回滚近期的提交
12.7.4 回滚到单个文件的某次提交
12.7.5 重写提交历史
12.8 GitHub 和git推送命令
12.8.1 将一个已存在的仓库推送到GitHub
12.8.2 克隆已存在的GitHub仓库
当前位置:
首页>>
技术小册>>
Python编程轻松进阶(四)
小册名称:Python编程轻松进阶(四)
### 10.3.1 默认参数 在Python编程中,函数是组织代码、实现代码复用的重要手段。函数的参数是函数与外界交互的接口,它们允许我们向函数传递数据,并根据这些数据执行相应的操作。然而,在实际编程过程中,我们经常遇到一些函数,它们的大部分参数在大多数情况下都保持相同的值,只有少数几个参数会根据需要改变。为了简化这种函数的调用,Python提供了默认参数(Default Arguments)的概念。 #### 一、默认参数的基本概念 默认参数是指在函数定义时,为参数指定的一个默认值。如果在调用函数时没有为该参数提供值,则自动使用定义时指定的默认值。这不仅可以减少函数调用的复杂度,还能提高代码的可读性和可维护性。 **语法示例**: ```python def greet(name, greeting="Hello"): print(f"{greeting}, {name}!") # 使用默认参数 greet("Alice") # 输出: Hello, Alice! # 覆盖默认参数 greet("Bob", "Hi") # 输出: Hi, Bob! ``` 在上面的例子中,`greet`函数有一个名为`name`的位置参数和一个名为`greeting`的默认参数。调用`greet("Alice")`时,没有为`greeting`提供值,因此它使用了默认的`"Hello"`。而在`greet("Bob", "Hi")`中,我们显式地提供了`greeting`的值`"Hi"`,覆盖了默认值。 #### 二、默认参数的注意事项 虽然默认参数非常有用,但在使用时也需要注意一些细节,以避免常见的陷阱。 **1. 不可变类型的默认值** 最好将默认参数设置为不可变类型(如数字、字符串、元组等),因为它们在函数被定义时就已经创建,并且在函数调用时不会改变。如果默认参数是可变类型(如列表、字典、集合等),那么在函数定义时创建的默认对象会在所有函数调用之间共享,这可能会导致意外的副作用。 **正确示例**: ```python def add_to_list(item, my_list=None): if my_list is None: my_list = [] my_list.append(item) return my_list # 安全的调用 print(add_to_list(1)) # 输出: [1] print(add_to_list(2)) # 输出: [2],而不是[1, 2] ``` **错误示例**(可能会导致意外的副作用): ```python def add_to_list_wrong(item, my_list=[]): my_list.append(item) return my_list # 意外的行为 print(add_to_list_wrong(1)) # 输出: [1] print(add_to_list_wrong(2)) # 输出: [1, 2],这通常不是我们想要的 ``` **2. 默认值在函数定义时计算** 默认参数的值在函数定义时计算一次,并且之后不会重新计算。这意味着如果你将函数调用时才能确定的值作为默认参数,或者默认参数依赖于函数内的其他变量,那么这通常会导致错误。 **错误示例**: ```python i = 0 def increment_and_return(): global i i += 1 return i def test(value=increment_and_return()): print(value) # 意外的行为 test() # 输出: 1,符合预期 test() # 输出: 1,而不是预期的2,因为默认值在函数定义时就已经计算了 ``` #### 三、默认参数的应用场景 默认参数因其简洁性和便利性,在多种编程场景中都有广泛的应用。以下是一些常见的应用场景: **1. 简化函数调用** 当函数的某些参数在大多数情况下都使用相同的值时,使用默认参数可以减少函数调用的冗余。 **2. 提供可选功能** 在编写具有多种行为模式的函数时,可以通过默认参数来启用或禁用某些可选功能。 **3. 提高代码可读性** 通过为函数参数提供有意义的默认值,可以让函数的用途更加清晰,从而提高代码的可读性。 **4. 简化配置管理** 在处理需要配置的函数时,可以将常见的配置作为默认参数,而特殊配置则通过显式传递参数来实现。 #### 四、高级用法与技巧 **1. 使用`*args`和`**kwargs`与默认参数结合** `*args`和`**kwargs`允许函数接受任意数量和类型的参数。它们可以与默认参数结合使用,以提供更灵活的函数接口。 **示例**: ```python def complex_function(a, b=2, *args, c=3, **kwargs): print(f"a={a}, b={b}, c={c}") print("Positional arguments:", args) print("Keyword arguments:", kwargs) # 调用示例 complex_function(1, 4, 5, 6, d=10, e=20) # 输出: # a=1, b=4, c=3 # Positional arguments: (5, 6) # Keyword arguments: {'d': 10, 'e': 20} ``` 注意:在定义函数时,`*args`和`**kwargs`必须位于位置参数之后,但在默认参数之前。 **2. 动态设置默认参数** 虽然不推荐在函数定义时动态计算默认参数的值(因为这会在函数定义时而非调用时执行),但可以通过其他方式(如闭包或类)来实现类似的效果。 #### 五、结论 默认参数是Python中一个非常有用的特性,它可以简化函数的调用,提高代码的可读性和可维护性。然而,在使用默认参数时,需要注意其背后的工作原理,避免常见的陷阱,如默认值为可变类型的问题。通过合理利用默认参数,我们可以编写出更加灵活、强大的函数,从而提升我们的Python编程技能。
上一篇:
10.3 函数的形参和实参
下一篇:
10.3.2 使用*和**向函数传参
该分类下的相关小册推荐:
Python与办公-玩转Excel
Python编程轻松进阶(五)
Python合辑6-字典专题
Python编程轻松进阶(二)
Python爬虫入门与实战开发(上)
Python合辑13-面向对象编程案例(上)
Python合辑8-变量和运算符
Python机器学习基础教程(上)
Python合辑11-闭包函数
Python机器学习实战
Python合辑3-字符串用法深度总结
Python合辑12-面向对象