一、函数目的
函数的目的是封装一定的功能,提升代码复用,减少代码的编写。
二、函数定义
使用def语句创建函数,其格式为:
def my_fun(s,n):
result = s * n
print(result)
三、函数调用
函数调用是函数名(),例子如下:
def my_fun(s,n):
result = s * n
print(result)
my_fun()
四、函数形参
形参又叫形式参数,形参变量,它出现在函数声明时()中,例如下图的代码中,s,n就是形参
def my_fun(s,n):
result = s * n
print(result)
my_fun()
五、函数实参
实参又叫实际参数,有值,出现在函数调用()中,例如下图的代码中,10,20就是实参
def my_fun(s,n):
result = s * n
print(result)
my_fun(10,20)
六、函数返回值
函数返回值是指函数在执行完毕后返回给调用者的结果。在函数体内部,可以使用return
语句来指定函数的返回值。
函数的返回值可以是任意类型的数据,包括整数、浮点数、字符串、列表、字典等等。函数可以有一个返回值,也可以没有返回值。
在函数体内部,当遇到return
语句时,函数会立即停止执行,并将return
后面的表达式的值作为返回值返回给调用者。函数返回值可以被存储在一个变量中,或者直接被使用。
以下是一个使用return
语句返回函数执行结果的示例:
def add_numbers(x, y):
result = x + y
return result
sum = add_numbers(3, 4)
print(sum) # 输出结果为 7
在上面的示例中,add_numbers
函数接受两个参数x
和y
,并将它们相加得到结果。使用return
语句将结果返回给调用者,并存储在变量sum
中。最后,我们将sum
打印出来,得到结果为7。
需要注意的是,return
语句会立即终止函数的执行,因此如果在return
语句后面还有其他代码,这些代码将不会被执行到。通常情况下,return
语句应该是函数的最后一条语句。如果没有显式地使用return
语句,函数将默认返回None
。
七、函数的参数类型
1.位置参数
在定义函数时,可以在函数的参数列表中通过位置顺序指定需要接收的参数。当函数被调用时,实参的值会按照位置的对应关系传递给形参。
下面是一个使用位置参数的示例:
def greet(name, age):
print(f"Hello, {name}! You are {age} years old.")
greet("Alice", 25)
在上面的例子中,函数greet
定义了两个参数name
和age
。当函数被调用时,我们使用"Alice"
和25
这两个实参值作为位置参数传递给函数。在函数内部,name
参数接收到"Alice"
,age
参数接收到25
,然后打印出对应的问候语。
2.默认参数
默认参数是指在定义函数时,为某些参数指定了默认值。这样,在调用函数时,如果不传递这些参数的值,函数会使用默认值作为参数的值。默认参数可以在函数定义时通过赋值运算符(=)来指定,默认参数放在参数列表的末尾。
例如,下面是一个带有默认参数的函数的示例:
def greet(name, message="Hello"):
print(message, name)
greet("John") # 输出:Hello John
greet("Mary", "Hi") # 输出:Hi Mary
在上面的例子中,greet
函数有两个参数:name
和message
。message
参数有一个默认值,如果调用函数时没有传递message
的值,函数会使用默认值"Hello"。当调用greet("John")
时,只传递了一个参数name
,函数会使用默认值"Hello"打印出"Hello John"。当调用greet("Mary", "Hi")
时,传递了两个参数,函数会使用传递的值打印出"Hi Mary"。
3.关键字参数
关键字参数是指在调用函数时,通过参数名来指定参数的值。使用关键字参数可以不按照参数定义的顺序传递参数,并且可以只传递需要的参数,而其他参数使用默认值。
以下是一个使用关键字参数的示例:
def greet(name, message):
print(message, name)
greet(message="Hello", name="John") # 输出:Hello John
greet(name="Mary", message="Hi") # 输出:Hi Mary
在上面的示例中,greet
函数有两个参数:name
和message
。当调用函数时,通过参数名来指定参数的值,可以按照任意顺序传递参数。例如,greet(message="Hello", name="John")
会打印出"Hello John",greet(name="Mary", message="Hi")
会打印出"Hi Mary"。
4.可变元组参数
可变元组参数是指在函数定义时,使用"*args"来表示接受任意数量的位置参数,并将这些参数以元组的形式传递给函数。
下面是一个使用可变元组参数的示例:
def print_args(*args):
for arg in args:
print(arg)
print_args(1, 2, 3) # 输出:1 2 3
在上面的示例中,print_args
函数定义中的*args
表示接受任意数量的位置参数,这些参数会以元组的形式存储在args
变量中。当调用函数时,传递的参数会被打包成一个元组,然后传递给args
。
在第一个调用print_args(1, 2, 3)
中,传递了三个整数参数,这三个参数会被打包成一个元组(1, 2, 3)
,然后传递给args
。for
循环遍历args
,将每个参数打印出来。
5.字典参数
字典参数是指在函数定义时,使用"**kwargs"来表示接受任意数量的关键字参数,并将这些参数以字典的形式传递给函数。
下面是一个使用字典参数的示例:
def print_kwargs(**kwargs):
for key, value in kwargs.items():
print(key, ":", value)
print_kwargs(name="Alice", age=25, city="New York") # 输出:name : Alice, age : 25, city : New York
在上面的示例中,print_kwargs
函数定义中的**kwargs
表示接受任意数量的关键字参数,这些参数会以字典的形式存储在kwargs
变量中。当调用函数时,传递的关键字参数会以键值对的形式存储在字典kwargs
中。
在调用print_kwargs(name="Alice", age=25, city="New York")
中,传递了三个关键字参数,这三个参数会以键值对的形式存储在字典kwargs
中,即{"name": "Alice", "age": 25, "city": "New York"}
。for
循环遍历kwargs.items()
,将每个键值对打印出来。
八、匿名函数
匿名函数是一种在代码中定义函数的方式,但不给函数指定一个名称。它通常用于需要在某个地方定义一个简单的函数,而不需要为其命名或重复使用的场景。
匿名函数可以使用lambda关键字定义,其语法如下: lambda 参数列表: 表达式
参数列表是函数的输入参数,可以有多个参数,用逗号分隔。表达式则是函数的执行逻辑,也是函数的返回值。
下面是一个使用匿名函数计算两个数的和的例子:
add = lambda x, y: x + y
print(add(3, 4)) # 输出结果为7
匿名函数可以作为其他函数的参数传递,也可以被赋值给变量。它在编写一些简单的逻辑时非常方便,可以减少代码的复杂性和冗余。