3.6 Python3 函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。但也可以自己创建函数,这被叫做用户自定义函数


目录

1. 函数介绍

1.1 函数定义

1.2 函数调用

1.3 形参和实参

1.4 函数返回值

2. 函数传递

2.1 可变类型

2.2 不可变类型

3. 参数类型

3.1 必需参数

3.2 位置参数

3.3 默认参数

3.4 不定长参数

3.5 关键字参数

3.6 命名关键字参数

4. 匿名函数(lambda)


1. 函数介绍

1.1 函数定义

函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。

定义函数的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号 : 起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

def function_name(parameters):
    """函数文档字符串"""
    function_body
    return [expression]

示例:

def greet(name):
    """这是一个问候函数"""
    print(f"Hello, {name}!")

1.2 函数调用

定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。

greet("Alice")  # 输出: Hello, Alice!

1.3 形参和实参

  • 形参:函数定义时括号内的参数

  • 实参:函数调用时传入的参数

def add(a, b):  # a, b是形参
    return a + b

result = add(3, 5)  # 3, 5是实参
print(result)  # 输出: 8

1.4 函数返回值

使用return语句返回结果,没有return或return后无表达式则返回None。

def max_num(a, b):
    if a > b:
        return a
    else:
        return b

print(max_num(10, 20))  # 输出: 20

2. 函数传递

2.1 可变类型

列表、字典等可变对象作为参数时,函数内修改会影响原对象。

def modify_list(lst):
    lst.append(4)
    
my_list = [1, 2, 3]
modify_list(my_list)
print(my_list)  # 输出: [1, 2, 3, 4]

2.2 不可变类型

数字、字符串、元组等不可变对象作为参数时,函数内修改不会影响原对象。

def modify_num(n):
    n += 10
    
num = 5
modify_num(num)
print(num)  # 输出: 5 (不变)

3. 参数类型

3.1 必需参数

调用时必须按照正确顺序传入的参数。

def power(base, exponent):
    return base ** exponent

print(power(2, 3))  # 输出: 8
# print(power(2))  # 错误,缺少必需参数

3.2 位置参数

按参数位置顺序传递。

def info(name, age):
    print(f"{name} is {age} years old")

info("Alice", 25)  # Alice对应name,25对应age

3.3 默认参数

定义时给参数指定默认值,调用时可省略。

def greet(name, msg="Good morning!"):
    print(f"Hello {name}, {msg}")

greet("Bob")  # 使用默认msg
greet("Alice", "How are you?")  # 覆盖默认msg

3.4 不定长参数

使用*args接收任意数量的位置参数,作为元组处理。

def sum_all(*numbers):
    total = 0
    for num in numbers:
        total += num
    return total

print(sum_all(1, 2, 3))  # 输出: 6
print(sum_all(1, 2, 3, 4, 5))  # 输出: 15

3.5 关键字参数

使用**kwargs接收任意数量的关键字参数,作为字典处理。

def person_info(**info):
    for key, value in info.items():
        print(f"{key}: {value}")

person_info(name="Alice", age=25, city="New York")

3.6 命名关键字参数

限制调用者可以传入的参数名,使用*分隔。

def person_info(name, *, age, city):
    print(f"{name} is {age} years old, lives in {city}")

person_info("Alice", age=25, city="New York")  # 正确
# person_info("Bob", 30, "London")  # 错误,age和city必须用关键字传递

4. 匿名函数(lambda)

lambda函数是一种小型匿名函数,只能包含一个表达式。

lambda arguments: expression

示例:

# 普通函数
def square(x):
    return x ** 2

# lambda等价形式
square = lambda x: x ** 2

print(square(5))  # 输出: 25

# 直接使用
nums = [1, 2, 3, 4]
squares = list(map(lambda x: x**2, nums))
print(squares)  # 输出: [1, 4, 9, 16]

# 多参数lambda
add = lambda a, b: a + b
print(add(3, 5))  # 输出: 8

lambda常用于需要函数对象的地方,如排序:

students = [("Alice", 22), ("Bob", 19), ("Charlie", 20)]
students.sort(key=lambda student: student[1])  # 按年龄排序
print(students)  # 输出: [('Bob', 19), ('Charlie', 20), ('Alice', 22)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值