一、函数的定义和使用
在 Python 中,函数通过使用 def 关键字来定义。
以下是一个简单的函数定义和使用的示例:
def greet(name):
"""这是一个打招呼的函数"""
print(f"Hello, {name}!")
# 调用函数
greet("Alice")
greet("Bob")
在上述代码中:
- def 关键字用于定义函数,后跟函数名和括号内的参数(在这个例子中是 name)。
- 函数体是在缩进块中的代码,这里只是打印一个问候语。
- 函数定义好后,可以通过函数名和传递相应的参数来调用函数,如 greet(“Alice”) 。
函数还可以有默认参数、返回值等特性。例如:
def add_numbers(a, b=0):
"""这是一个求和的函数,b 有默认值 0"""
return a + b
# 调用函数
result = add_numbers(5)
print(result) # 输出 5
result = add_numbers(5, 3)
print(result) # 输出 8
在这个例子中,b 参数有默认值 0,如果调用函数时没有传递 b 的值,就使用默认值。函数使用 return 语句返回计算结果。
二、可变参数
在 Python 中,可变参数也称不定长参数,即传入函数中的实际参数可以是零个、一个、两个甚至任意个。定义可变参数主要有两种形式,一种是带一个星号*的,另一种是带两个星号**的。
带一个星号*
的可变参数:函数可以接收任意个数的参数,只需在形参前面加一个*
,一个星号形参的函数会把多个位置参数值当成元组的形式传入,也就是传入的多个参数值可以在函数内部进行元组遍历。例如:
def kecheng(*jianzhan):
print("要学习的建站课程有: ")
for item in jianzhan:
print(item)
kecheng('html','CSS','JavaScript')
kecheng('php','MySQL')
kecheng('Thinkphp')
如果使用一个已经存在的列表作为函数的可变参数,可以在列表的名称前加“*”。例如:
jianzhan = ('HTML','CSS','JavaScript')
kecheng(*jianzhan)
带两个星号**
的可变参数:形参前面加两个*
(星号),两个星号形参的函数会把关键字参数值当成字典的形式传入,在函数内部会把关键字参数当成字典进行遍历。例如:
def chengji(**chengji):
print()
for key, value in chengji.items():
print(key,"的成绩是:",value)
chengji(语文=92, 数学=98, 英语=90)
chengji(历史=88, 地理=90)
同理,如果想要使用一个已经存在的字典作为函数的可变参数,可以在字典的名称前加“**”。例如:
dict1 = {'语文':92,'数学':98,'英语':90}
chengji(**dict1)
需要注意的是,在 Python 实参中分为位置参数(positional argument)和关键字参数(keyword argument),传参时要保证位置参数在关键字参数之前。使用可变参数时,*
args用于收集所有未匹配的位置参数组成一个元组,**kwargs
用于收集所有未匹配的关键字参数组成一个字典。同时,在函数调用时,*
参数可用于解包元组对象的每个元素,将其作为一个一个的位置参数传入到函数中;**
参数可用于解包字典对象的每个元素,将其作为一个一个的关键字参数传入到函数中。