一、函数核心参数类型及传参方式

核心:4种参数类型,3种传参方式,按表格用法直接套用,无需多余理解。

1. 四种参数类型

参数类型

固定用法

关键说明

位置参数

def func(a, b): pass调用:func(1, 2)

必须按顺序传入,个数与定义一致,最基础常用

关键字参数

def func(a, b): pass调用:func(a=1, b=2)

指定参数名传入,无需按顺序,可与位置参数混用(位置参数在前)

默认参数

def func(a, b=2): pass调用:func(1) 或 func(1, 3)

定义时赋值默认值,调用时可省略,默认参数必须在位置参数后面

可变参数

*args:def func(*args): pass**kwargs:def func(**kwargs): pass

*args接收任意个位置参数(元组),**kwargs接收任意个关键字参数(字典)

2. 三种传参方式

# 1. 位置传参(最常用)
def add(a, b):
    return a + b
print(add(3, 5))  # 8

# 2. 关键字传参(不按顺序)
print(add(a=3, b=5))  # 8
print(add(b=5, a=3))  # 8(位置参数在前,关键字在后)

# 3. 默认参数(省略默认值调用)
def add2(a, b=2):
    return a + b
print(add2(3))    # 5(b默认取2)
print(add2(3, 4)) # 7(覆盖默认值)

# 4. 可变参数(*args, **kwargs)
def func(*args, **kwargs):
    print(args)    # 接收位置参数,元组形式
    print(kwargs)  # 接收关键字参数,字典形式
func(1, 2, 3, name="Python", age=10)
# 输出:(1, 2, 3);{'name': 'Python', 'age': 10}

二、匿名函数(lambda)

简化单行函数,无需def定义,仅用于简单逻辑,复杂逻辑用普通函数。

1.核心用法

用法场景 固定格式 核心说明
基础运算 lambda 参数1,参数2: 表达式 无 return,表达式结果即返回值
变量赋值 func = lambda x: x*2 赋值后可像普通函数一样调用
内置函数传参 sorted(lst, key=lambda x: x[1]) 简化排序、过滤等单行逻辑

2.代码演示

# 基础用法
add = lambda a, b: a + b
print(add(3, 5))  # 8

# 多个参数
func = lambda x, y, z: x*y + z
print(func(2, 3, 4))  # 10

# 配合内置函数(排序)
lst = [(1, 3), (2, 1), (3, 2)]
lst.sort(key=lambda x: x[1])  # 按元组第二个元素排序
print(lst)  # [(2, 1), (3, 2), (1, 3)]

# 配合内置函数(过滤)
lst = [1, 2, 3, 4, 5]
res = filter(lambda x: x%2 == 0, lst)
print(list(res))  # [2, 4]

三、函数的类型注解

非强制,仅用于标注参数和返回值类型,提升代码可读性

1.核心用法

注解类型

固定格式

说明

参数注解

def func(a: int, b: str) -> None: pass

参数后加“: 类型”,标注参数应传入的类型

返回值注解

def func(a: int) -> int: return a

函数后加“-> 类型”,标注函数返回值的类型

复杂类型注解

from typing import Listdef func(lst: List[int]) -> List[int]: pass

列表、字典等复杂类型,需从typing导入对应类型

2.代码演示

# 基础类型注解
def add(a: int, b: int) -> int:
    return a + b
print(add(3, 5))  # 8(传入非int类型也能运行,仅标注)

# 无返回值注解(返回None)
def print_info(name: str) -> None:
    print(f"Name: {name}")
print_info("Python")

# 复杂类型注解(列表、字典)
from typing import List, Dict
def process_lst(lst: List[int]) -> List[int]:
    return [x*2 for x in lst]

def process_dict(d: Dict[str, int]) -> int:
    return sum(d.values())

print(process_lst([1, 2, 3]))  # [2, 4, 6]
print(process_dict({"a":1, "b":2}))  # 3

四、模块相关知识

核心:模块是.py文件,存放函数/类/变量,用于代码复用

1.核心用法

操作类型

固定用法

说明

导入整个模块

import 模块名模块名.函数名()

导入模块中所有内容,使用时需加“模块名.”

导入指定内容

from 模块名 import 函数名/类名

仅导入需要的内容,直接使用,无需加模块名

导入重命名

import 模块名 as 别名from 模块名 import 函数名 as 别名

简化调用,避免命名冲突

导入所有内容

from 模块名 import *

不推荐,易导致命名冲突,可读性差

2.代码演示

# 1. 导入整个模块
import math
print(math.sqrt(16))  # 4.0(求平方根)
print(math.pi)        # 3.141592653589793

# 2. 导入指定函数
from math import sqrt, pi
print(sqrt(25))       # 5.0
print(pi)             # 3.141592653589793

# 3. 导入重命名
import math as m
from math import sqrt as sq
print(m.sqrt(36))     # 6.0
print(sq(49))         # 7.0

# 4. 自定义模块(示例)
# 新建test_module.py文件,写入:
# def my_add(a, b):
#     return a + b
# 导入自定义模块
from test_module import my_add
print(my_add(2, 3))   # 5

五、注意

  • 默认参数必须放在位置参数后面,可变参数(*args, **kwargs)放在最后。

  • lambda匿名函数仅支持单行表达式,复杂逻辑用def定义普通函数。

  • 类型注解非强制,不影响代码运行,仅提升可读性。

  • 导入模块时,模块名不能与Python内置函数/关键字重名(如math、list)。

  • 自定义模块需与当前代码文件在同一目录,否则需指定路径。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐