首页 > Python基础教程 > 函数和lambda表达式
阅读:10,296
Python函数默认参数设置(超级详细)
我们知道,在调用函数时,如果不指定某个参数,解释器会抛出异常。为了解决这个问题,Python 允许为参数设置默认值,即在定义函数时,直接给形式参数指定一个默认值,这样的话,即便调用函数时没有给拥有默认值的形参传递参数,该参数可以直接使用定义函数时设置的默认值。
定义带有默认值参数的函数,其语法格式如下:
例如,如下程序为 name、message 形参指定了默认值:
更不能按如下方式来调用 say_hi() 函数:
那么,能不能单纯地将上面两个参数交换位置呢?
将函数调用改为如下两种形式是正确的:
再次强调,由于 Python 要求在调用函数时关键字参数必须位于位置参数的后面,因此在定义函数时指定了默认值的参数(关键字参数)必须在没有默认值的参数之后。例如如下代码:
定义带有默认值参数的函数,其语法格式如下:
def 函数名(...,形参名=默认值):
代码块
例如,如下程序为 name、message 形参指定了默认值:
# 为两个参数指定默认值 def say_hi(name = "孙悟空", message = "欢迎来到C语言中文网"): print(name, ", 您好") print("消息是:", message) # 全部使用默认参数 say_hi() # 只有message参数使用默认值 say_hi("白骨精") # 两个参数都不使用默认值 say_hi("白骨精", "欢迎学习Python") # 只有name参数使用默认值 say_hi(message = "欢迎学习Python")运行结果为:
孙悟空 , 您好
消息是: 欢迎来到C语言中文网
白骨精 , 您好
消息是: 欢迎来到C语言中文网
白骨精 , 您好
消息是: 欢迎学习Python
孙悟空 , 您好
消息是: 欢迎学习Python
say_hi("欢迎学习Python")
上面调用时传入的“欢迎学习Python”字符串将传给 name 参数,而不是 message 参数。更不能按如下方式来调用 say_hi() 函数:
say_hi(name="白骨精", "欢迎学习Python")
因为 Python 规定,关键字参数必须位于位置参数的后面。因此提示错误:positional argument follows keyword argument。那么,能不能单纯地将上面两个参数交换位置呢?
say_hi("欢迎学习Python" , name="白骨精")
上面调用依然是错误的,因为第一个字符串没有指定关键字参数,因此将使用位置参数为 name 参数传入参数值,第二个参数使用关键字参数的形式再次为 name 参数传入参数值,这意味着两个参数值其实都会传给 name 参数,程序为 name 参数传入了多个参数值。因此提示错误:say_hi() got multiple values for argument 'name'。将函数调用改为如下两种形式是正确的:
say_hi("白骨精", message="欢迎学习Python") say_hi(name="白骨精", message="欢迎学习Python")上面第一行代码先使用位置参数为 name 参数传入参数值,再使用关键字参数为 message 参数传入参数值;第二行代码中的 name、message 参数都使用关键字参数传入参数值。
再次强调,由于 Python 要求在调用函数时关键字参数必须位于位置参数的后面,因此在定义函数时指定了默认值的参数(关键字参数)必须在没有默认值的参数之后。例如如下代码:
# 定义一个打印三角形的函数,有默认值的参数必须放在后面 def printTriangle(char, height = 5) : for i in range(1, height + 1) : # 先打印一排空格 for j in range(height - i) : print(' ', end = '') # 再打印一排特殊字符 for j in range(2 * i - 1) : print(char, end = '') print() printTriangle('@', 6) printTriangle('#', height=7) printTriangle(char = '*')上面程序定义了 printTriangle() 函数,其中,有默认值的 height 形参,必须放在 char 形参的后面;反之,将会造成语法错误。
在 Python 中,可以使用“函数名.__defaults__”查看函数的默认值参数的当前值,其返回值是一个元组。例如,显示上面定义的 printTriangle 函数的默认值参数的当前值,可以使用 printTriangle.__defaults__ ,其结果为 (5,)。
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频