7.Python函数进阶

、”
在前面的几篇文章中,我们已经了解了Python的基础知识,包括变量、数据类型、条件和循环等。现在,让我们进一步深入,学习关于函数的一些高级概念和用法。

一、函数的参数类型

在前面的文章中,我们已经学习了如何定义函数并调用函数。但是,函数的参数不仅可以是简单的值,还可以是其他函数、列表、字典等复杂的数据类型。

  • 位置参数(Positional Arguments):这是我们在前面学到的最基本的参数类型。函数的参数按照定义的顺序传递。
def add(x, y):
    return x + y

result = add(5, 3)
print(result)  # 输出:8
  • 关键字参数(Keyword Arguments):通过指定参数名来传递参数,可以打破参数顺序的限制。
def greet(name, message):
    print(f"Hello, {name}! {message}")

greet(message="How are you?", name="Alice")
# 输出:Hello, Alice! How are you?

需要额外说明的一个点是,当参数比较多时,我们传递参数时可以把所有的参数的名字和值放到一个map中,将这个map传给函数。请看例子:

param_map = {
    "name": "han mei mei",
    "age": "18",
    "sex": "male"
}


def hello(age, name="han mei mei", sex="female"):
    print("hello " + name + ",your age is " + age + ",your sex is " + sex)

# 注意需要加两个*号
hello(**param_map)
  • 默认参数(Default Arguments):在函数定义时为参数提供默认值,调用函数时可以不传递该参数。
def power(x, n=2):
    return x ** n

print(power(3))  # 输出:9,n默认为2
print(power(2, 3))  # 输出:8

如果参数中有多个带默认值的参数,那么传递参数的时候有的想要直接使用默认值即可,有的想要传自定义的参数值,该怎么办呢?答案是传参的时候指定名字:

def hello(age, name="han mei mei", sex="female"):
    print("hello " + name + ",your age is " + age + ",your sex is " + sex)


# 这里传递参数时,传了age和name,sex用默认值
hello("18", "li lei")

# 这里传递参数时,传了age和sex,name用默认值
hello("19", sex="male")
二、可变参数和不定长参数

有时候我们无法预测函数会接收多少个参数,这时就需要使用可变参数或不定长参数。

  • 可变参数:允许函数接收任意个参数,参数将被封装为一个元组。
def sum_all(*args):
    total = 0
    for num in args:
        total += num
    return total

print(sum_all(1, 2, 3))  # 输出:6
print(sum_all(5, 10, 15, 20))  # 输出:50
  • 不定长参数:除了可变参数,还可以接收关键字参数,参数将被封装为一个字典。
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=25, country="USA")
# 输出:
# name: Alice
# age: 25
# country: USA
三、函数的返回值

函数可以返回任意多个、任意类型的值。接收返回值时,按顺序定义变量去接收即可,如果函数返回值的数量大于实际接收的数量,那么后面的返回值将被丢弃。

def return_value():
    ages = [1, 2, 3, 4, 5]
    name = "han mei mei"
    return ages, name


# 按顺序定义变量去接收函数的返回值
ages, name = return_value()

# 这里第二个返回值name将被丢弃
ages = return_value()
四、递归函数的理解和应用

递归函数是指在函数内部调用自身的函数。递归在某些情况下可以简化问题的解决过程,但需要小心处理,避免进入无限递归。

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(5))  # 输出:120

递归函数的经典应用包括计算阶乘、斐波那契数列等。

通过本篇文章,你已经学会了函数的进阶用法,包括不同类型的参数传递、可变参数和不定长参数,以及递归函数的应用。这些知识将帮助你更好地组织和编写复杂的程序,让你的Python编程之路更上一层楼。在下一篇文章中,我们将进一步学习Python提供的内置函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值