今天主要学习了 Python 中字典、函数两大核心知识点,涵盖字典的定义与操作、函数的参数、作用域、嵌套、递归等内容,以下是详细梳理:

一、字典(dict):键值对数据容器

1. 核心特性

        键(key)不可重复,重复则后值覆盖前值;
        键必须是不可变类型(如字符串、数字、元组),值(value)可以是任意类型(列表、字典、数字等);
        字典本身是可变类型,支持增删改查操作。

2. 字典定义

# 常规定义(重复键会覆盖)
d1 = {'张三':18,'李四':19,'张三':21}  # 结果为 {'张三':21,'李四':19}

# 空字典定义
d2 = {}
d3 = dict()

# 特殊键值(元组作键、列表/字典作值)
d5 = {('李四','王五'):10}  # 元组作为key
d8 = {260301: {'name':'zhangsan','age':18}, 2603:['张三','李四']}  # 值为字典/列表

3. 字典核心操作

操作类型方法 / 语法说明
新增 / 修改dict[key] = valuekey 存在则修改值,不存在则新增键值对
dict.update(kwargs)批量更新,支持字典、关键字参数、列表元组等格式
删除del dict[key]删除指定键值对,key 不存在报错
dict.pop(key, 提示语)删除并返回对应值,key 不存在时返回提示语(避免报错)
dict.clear()清空字典所有键值对
查找dict[key]获取值,key 不存在报错
dict.get(key, 提示语)获取值,key 不存在返回提示语(默认 None)
遍历dict.keys()获取所有键(返回 dict_keys 类型)
dict.values()获取所有值(返回 dict_values 类型)
dict.items()获取所有键值对(返回 dict_items 类型,每个元素是 (键,值) 元组)
stu = {'name':'zhangsan','age':18}
# 新增
stu['hobby'] = ['basketball', 'soccer']
# 批量更新
stu.update({'age':22}, money='100')
# 查找
print(stu.get('hobby', '无此键'))  # 存在则返回列表,不存在返回"无此键"
# 遍历
for key in stu:
    print(key, stu[key])  # 遍历键,通过键取值

二、函数:可复用的代码块

1. 函数基础

函数是用于执行特定任务的可重复代码块,核心优势:代码复用、结构清晰、支持模块。

        def 函数名(参数):

                函数体
调用语法:函数名(实参)
函数默认返回 None,可通过return自定义返回值(return 后代码不再执行)

2. 函数参数:灵活的传参方式

参数类型语法说明
位置参数def func(a,b): ...实参按位置顺序传递,与形参一一对应
关键字参数func(name='张三', age=21)实参指定键名,顺序可任意
默认参数def func(a, b, c='默认值'): ...形参设置默认值,不传则用默认值(需放在参数末尾)
可变位置参数def func(*args): ...接收任意数量位置参数,打包成元组(tuple)
可变关键字参数def func(**kwargs): ...接收任意数量关键字参数,打包成字典(dict)
传参限制def func(name,/,age,*,gender): .../前只能用位置参数,*后只能用关键字参数
# 可变参数组合使用
def test3(a,b,*args,c='默认值',**kwargs):
    print(a,b,c)  # 位置参数+默认参数
    print(args)   # 剩余位置参数打包成元组
    print(kwargs) # 关键字参数打包成字典
test3('张三','男','学生','孩子',hobby='篮球')

3. 函数作用域:变量的生效范围

        全局作用域:py 文件最外层定义的变量,程序运行期间一直存在,可被全局访问;
        局部作用域:仅函数内部的变量,函数调用时创建,执行完销毁(if/for/while 不产生局部作用域);
        全局变量修改:函数内修改全局变量需用global 变量名声明,否则视为定义局部变量(未声明直接修改会报错)。

m = 100  # 全局变量
def test2():
    global m  # 声明修改全局变量
    m += 10
    print(m)  # 每次调用+10,输出110、120、130
test2()
test2()

4. 函数嵌套:函数内调用其他函数

函数执行过程中调用另一个函数,遵循 “先调用先执行” 的顺序,示例:

def test1():
    print('进入test1')
    test2()
    print('退出test1')
def test2():
    print('进入test2')
    test3()
    print('退出test2')
def test3():
    print('进入test3')
    print('执行函数3333333')
    print('退出test3')
test1()  # 执行顺序:test1 → test2 → test3 → 反向退出

5. 函数递归:自己调用自己

递归是函数嵌套的特殊形式(调用自身),需设置 “终止条件” 避免无限递归

# 递归打印(先递后归)
def hello(n):
    if n>1:
        hello(n-1)  # 终止条件:n≤1时停止递归
    print('hello',n)
hello(5)  # 输出:hello 1 → hello 2 → ... → hello 5

6. 特殊值 None

None:是一个特殊的字面量,用于表示空值,无值,无意义
    1.None的类型是NoneType
    2.None出现在判断当中会被当作False
    3.None不可以参与数学运算,和字符串拼接
    4.如果不给函数设置返回值,默认返回None
函数可以通过return来设置返回值
    1.return之后的代码,为函数的返回值
    2.自定义函数的运行,return后续的代码将不再执行

​
def add(a,b):
    print(f'{a}+{b}')  # 无return,默认返回None
print(add(1,2))  # 先打印相加信息,再打印None

​

三、核心总结

        1.字典是灵活的键值对容器,重点掌握增删改查的安全操作(如 pop、get 避免报错);
        2.函数参数是重点,需区分位置 / 关键字 / 可变参数的使用场景,合理搭配提升函数灵活性;
        3.作用域核心:全局变量可在函数内读取,修改需加 global;局部变量仅函数内有效;
        4.函数嵌套 / 递归需注意执行顺序,递归必须设置终止条件;
        5.None 是特殊空值,需注意函数返回值的默认行为。

更多推荐