首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第7章 编程术语
7.1 编程术语定义
7.1.1 作为语言的Python和作为解释器的Python
7.1.2 垃圾回收
7.1.3 字面量
7.1.4 关键字
7.1.5 对象、值、实例和身份
7.1.6 项
7.1.7 可变和不可变
7.1.8 索引、键和哈希值
7.1.9 容器、序列、映射和集合类型
7.1.10 特殊方法
7.1.11 模块和包
7.1.12 可调用对象和头等对象
7.2 经常被混淆的术语
7.2.1 语句和表达式
7.2.2 块、子句和主体
7.2.3 变量和特性
7.2.4 函数和方法
7.2.5 可迭代对象和迭代器
7.2.6 语法错误、运行时错误和语义错误
7.2.7 形参和实参
7.2.8 显式类型转换和隐式类型转换
7.2.9 属性和特性
7.2.10 字节码和机器码
7.2.11 脚本和程序,以及脚本语言和编程语言
7.2.12 库、框架、SDK、引擎、API
第8章 常见的Python陷阱
8.1 循环列表的同时不要增删其中的元素
8.2 复制可变值时务必使用copy.copy()和copy.deepcopy()
8.3 不要用可变值作为默认参数
8.4 不要通过字符串连接创建字符串
8.5 不要指望sort()按照字母顺序排序
8.6 不要假设浮点数是完全准确的
8.7 不要使用链式!=运算符
8.8 不要忘记在仅有一项的元组中添加逗号
第9章 Python的奇特难懂之处
9.1 为什么256 是256,而257 不是257
9.2 字符串驻留
9.3 假的Python 增量运算符和减量运算符
9.4 传递空列表给all()
9.5 布尔值是整数值
9.6 链式使用多种运算符
9.7 Python 的反重力特性
当前位置:
首页>>
技术小册>>
Python编程轻松进阶(三)
小册名称:Python编程轻松进阶(三)
### 7.2.7 形参和实参 在Python编程中,函数是组织代码块以实现特定功能的强大工具。函数通过接收输入(参数)并返回输出(返回值)来执行其任务。这些输入,即函数在定义时指定的变量,被称为**形式参数**(简称形参),而在调用函数时传递给函数的实际值则被称为**实际参数**(简称实参)。理解和掌握形参与实参的概念及其相互关系,对于编写高效、可复用的Python代码至关重要。 #### 7.2.7.1 理解形参 形参是函数定义时声明的变量,它们代表了函数将要接收的数据的占位符。在函数体内部,你可以通过形参来访问传递给函数的值,并对这些值执行操作。形参的声明是在函数定义时完成的,通常位于函数名后的括号内,多个形参之间用逗号分隔。 ```python def greet(name, greeting): print(f"{greeting}, {name}!") ``` 在这个例子中,`name`和`greeting`就是`greet`函数的形参。 #### 7.2.7.2 实参的作用 实参是在调用函数时传递给函数的实际值。这些值可以是常量、变量、表达式的结果或者是其他函数的返回值。实参的数量、类型和顺序必须与函数定义中的形参相匹配(除非使用了特定的Python特性,如位置参数、关键字参数、默认参数、可变参数等),否则将引发错误。 继续上面的例子,调用`greet`函数时提供的值就是实参: ```python greet("Alice", "Hello") ``` 这里,`"Alice"`和`"Hello"`就是实参,它们分别被传递给`name`和`greeting`形参。 #### 7.2.7.3 位置参数与关键字参数 - **位置参数**:按照函数定义中形参的顺序来传递实参。这是最常见的参数传递方式。 ```python greet("Bob", "Hi") # "Bob"对应name,"Hi"对应greeting ``` - **关键字参数**:在调用函数时,通过指定形参名来传递实参。这种方式使得参数的传递更加清晰,且可以不必按照形参定义的顺序来传递实参。 ```python greet(greeting="Hello", name="Charlie") # 关键字参数允许不按顺序传递 ``` #### 7.2.7.4 默认参数 在函数定义时,可以为形参指定默认值。如果在调用函数时没有为这些形参提供实参,那么将使用其默认值。默认参数提供了一种灵活的方式来处理可选的输入。 ```python def greet(name, greeting="Hello"): print(f"{greeting}, {name}!") greet("David") # 输出: Hello, David! ``` 在这个例子中,`greeting`形参有一个默认值`"Hello"`,因此在调用`greet("David")`时没有提供`greeting`实参时,将使用默认值。 #### 7.2.7.5 可变参数 Python支持两种类型的可变参数,允许函数接收任意数量的实参: - ***args(非关键字可变参数)**:允许你将一个不定长度的参数列表传递给一个函数。这些参数在函数内部被组织成一个元组。 ```python def sum_numbers(*args): return sum(args) print(sum_numbers(1, 2, 3, 4)) # 输出: 10 ``` - ***kwargs(关键字可变参数)**:允许你将不定长度的关键字参数传递给一个函数。这些参数在函数内部被组织成一个字典。 ```python def greet_with_details(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") greet_with_details(name="Eve", age=30, occupation="Engineer") # 输出: # name: Eve # age: 30 # occupation: Engineer ``` #### 7.2.7.6 参数的混合使用 在Python中,你可以在同一个函数定义中混合使用位置参数、关键字参数、默认参数和可变参数。但是,它们的顺序和规则必须遵循一定的约定: 1. 位置参数必须位于所有关键字参数之前。 2. 默认参数必须位于所有位置参数之后。 3. *args参数必须位于所有位置参数和默认参数之后,但在**kwargs之前。 4. **kwargs参数必须位于最后。 ```python def complex_function(a, b, c=0, *args, **kwargs): print(f"a: {a}, b: {b}, c: {c}") for arg in args: print(f"arg: {arg}") for key, value in kwargs.items(): print(f"{key}: {value}") complex_function(1, 2, 3, 4, 5, extra1="foo", extra2="bar") # 输出: # a: 1, b: 2, c: 3 # arg: 4 # arg: 5 # extra1: foo # extra2: bar ``` #### 7.2.7.7 参数解包 在调用函数时,你还可以使用参数解包(unpacking)来传递列表、元组或字典作为位置参数、关键字参数。这通过`*`和`**`操作符实现。 - 使用`*`解包列表或元组作为位置参数: ```python numbers = [1, 2, 3] sum_numbers(*numbers) # 等同于 sum_numbers(1, 2, 3) ``` - 使用`**`解包字典作为关键字参数: ```python details = {"name": "Frank", "age": 25} greet_with_details(**details) # 等同于 greet_with_details(name="Frank", age=25) ``` #### 7.2.7.8 结论 形参和实参是Python函数编程中的基本概念,它们共同构成了函数参数传递机制的核心。理解并熟练掌握这些概念,能够帮助你编写出更加灵活、强大且易于维护的Python代码。通过合理使用位置参数、关键字参数、默认参数、可变参数以及参数解包,你可以轻松处理各种复杂的参数传递场景,从而编写出更加高效、可复用的函数。在编写《Python编程轻松进阶(三)》这本书时,深入探讨这些概念及其应用场景,将有助于读者更好地掌握Python函数编程的精髓。
上一篇:
7.2.6 语法错误、运行时错误和语义错误
下一篇:
7.2.8 显式类型转换和隐式类型转换
该分类下的相关小册推荐:
Python自动化办公实战
Python3网络爬虫开发实战(下)
Python合辑2-字符串常用方法
Python合辑9-判断和循环
Python3网络爬虫开发实战(上)
Python与办公-玩转PPT
Python机器学习实战
Python高并发编程与实战
Python合辑3-字符串用法深度总结
实战Python网络爬虫
Python编程轻松进阶(五)
Python合辑13-面向对象编程案例(上)