一、函数的定义和使用

在 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用于收集所有未匹配的关键字参数组成一个字典。同时,在函数调用时,*参数可用于解包元组对象的每个元素,将其作为一个一个的位置参数传入到函数中;**参数可用于解包字典对象的每个元素,将其作为一个一个的关键字参数传入到函数中。