Python--函数
一、函数的定义及创建
1、定义
函数是实现某个功能的代码块
2、创建
def function_name([parameter_list]):
function_body
function_name:函数名,在调用函数时使用
parameter_list:参数,可以是零个或多个,如果是多个参数,参数之间用英文的逗号隔开
function_body:要执行的功能代码
例如:
# 计算两个数相加的函数
def sum(num1, num2):
print(num1 + num2)
# 打印字符串的函数
def print_string():
print("Hello, Python!")
二、函数的参数
1、形式参数
定义函数时,函数名后面括号中的参数为形式参数
2、实际参数
调用函数时,函数名后面括号中的参数为实际参数
例如:
3、位置参数
位置参数也称为必备参数,是指调用函数时实际参数的数量和位置必须和形式参数的数量和位置一一对应。
例如:sum函数定义时有两个形式参数,调用时也需要有两个实际参数;3和num1的位置对应,4和num2的位置对应。
4、默认参数
默认参数是指在函数定义时,为函数的参数提供了默认的值。当函数被调用时,如果没有传递该参数的值,那么函数会使用默认值作为参数的值。如果传递了该参数的值,那么函数将使用传递的值覆盖默认值。
需要注意的是,默认参数必须在所有参数的最右边!
例如:
可以使用“函数名.defaults”查看函数的默认值,返回结果是一个元组。
例如:
# 定义函数
def sum(num1, num2 = 4):
result = num1 + num2
print(result)
# 查看函数默认值
print(sum.__defaults__)
输出:
(4,)
5、关键字参数
关键字参数是指在调用函数时,通过指定参数名来传递参数值的一种方式。
与位置参数不同,关键字参数可以不按照参数定义的顺序进行传递,而是根据参数名来确定对应的参数值。
# 定义一个函数,接收两个参数
def greet(name, message):
print(f"Hello, {name}! {message}")
# 使用关键字参数调用函数,实参和形参位置可以不一致
greet(message="How are you?", name="Alice")
输出结果:
Hello, Alice! How are you?
6、可变参数
1、*parameter形式
这种形式表示接受任意多个实际参数并将其放到一个元组中。
例如:
def add(*args):
sum = 0
for num in args:
sum += num
return sum
print(add(1, 2, 3)) # 输出 6
print(add(1, 2, 3, 4, 5)) # 输出 15
2、**parameter形式
这种形式表示接受任意多个类似关键字参数一样显式赋值的实际参数并将其放到一个字典中。
例如:
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="John", age=25, country="USA")
# 输出:
# name: John
# age: 25
# country: USA
三、函数的返回值
函数的返回值是该函数执行后的结果,它可以是任意数据类型,包括数字、字符串、列表、字典等。
函数可以使用return语句来返回一个值,当函数执行到return语句时,函数将会停止执行并将返回值返回给调用者。
如果函数没有使用return语句,或者return语句没有返回任何值,那么函数的返回值将会是None。
调用函数时,可以使用变量来接收函数的返回值,也可以直接使用函数的返回值进行其他操作。
def add_numbers(a, b):
sum = a + b
return sum #返回计算结果
result = add_numbers(5, 3) #调用函数并接受返回值
print(result) # 输出:8
四、变量的作用域
变量的作用域指的是变量在程序中可以被访问的范围。变量的作用域可以分为局部作用域和全局作用域。
1、局部作用域
局部作用域是指变量只在特定的代码块内部可见和访问。
一般而言,代码块可以是函数、循环或条件语句。
在函数内部声明的变量只能在该函数内部访问,而在循环或条件语句内部声明的变量只能在该循环或条件语句内部访问。
2、全局作用域
全局作用域是指变量在整个程序中都可见和访问。在函数外部声明的变量属于全局作用域,可以在整个程序中的任何地方访问。
1、如果一个变量在函数体外定义,那么在函数内和函数外都可以访问。
例如:
message = "Hello, Python!" # 全局变量
def demo():
print("函数体内:全局变量message = ", message) # 函数体内访问变量
demo() # 调用函数
print("函数体外:全局变量message = ", message) # 函数体外访问变量
输出:
函数体内:全局变量message = Hello, Python!
函数体外:全局变量message = Hello, Python!
2、如果一个变量在函数体内定义,并且使用global关键字修饰后,该变量也会变成全局变量。在函数体外可以访问该变量,在函数体内可以对其修改。
例如:
message = "Hello, Python!" # 全局变量
print("函数体外:message = ", message) # 函数体外输出全局变量的值
def demo():
message = "您好!"
print("函数体内:message = ", message) # 函数体内访问变量
demo() # 调用函数
print("函数体外:message = ", message) # 函数体外输出全局变量的值
输出:
函数体外:message = Hello, Python!
函数体内:message = 您好!
函数体外:message = Hello, Python!
从上面的结果可以看出,在函数内部定义的变量即使与全局变量重名,也不影响全局变量的值。如果想要在函数体内部改变全局变量的值,需要在定义变量时,使用global关键字修饰。
例如:
message = "Hello, Python!" # 全局变量
print("函数体外:message = ", message) # 函数体外输出全局变量的值
def demo():
global message 使用global定义全局变量
message = "您好!"
print("函数体内:message = ", message) # 函数体内访问变量
demo() # 调用函数
print("函数体外:message = ", message) # 函数体外输出全局变量的值
输出:
函数体外:message = Hello, Python!
函数体内:message = 您好!
函数体外:message = 您好!
五、匿名函数
在Python中,匿名函数也称为lambda函数,是一种没有名称的函数。它是通过lambda关键字定义的,并且可以用来简洁地定义简单的函数。
使用lambda函数的一般语法如下:
lambda arguments: expression
其中,arguments是函数的参数,可以是一个或多个;expression是函数的返回值表达式。
例如:
# 计算两个数的和
add = lambda x, y: x + y
print(add(2, 3))
# 判断一个数是否为偶数
is_even = lambda x: x % 2 == 0
print(is_even(4))
print(is_even(5))
# 对列表中的每个元素进行平方
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x**2, numbers))
print(squared_numbers)
输出:
5
True
False
[1, 4, 9, 16, 25]