python打卡day26

发布于:2025-05-16 ⋅ 阅读:(18) ⋅ 点赞:(0)
函数、参数、变量

知识点回顾:

  1. 函数的定义
  2. 变量作用域:局部变量和全局变量
  3. 函数的参数类型:位置参数、默认参数、不定参数
  4. 传递参数的手段:关键词参数
  5. 传递参数的顺序:同时出现三种参数类型时
def function_name(parameter1, parameter2, ...):
    """
    Docstring: 描述函数的功能、参数和返回值 (可选但强烈推荐)
    """
    # 函数体: 实现功能的代码
    # ...
    return value # 可选,用于返回结果

函数的基本写法如上,注意冒号、缩进、三引号包起来的注释,函数的参数我们有如下称呼:

  • Parameters (形参): 在函数定义中列出的变量名 (如 name, feature1, feature2)。
  • Arguments (实参): 在函数调用时传递给函数的实际值 (如 "张三", 10, 25),也就是实际的数值(实参)传给了 形参(定义时候的变量)

但是形参/实参还有更具体的参数类型:

  • 位置参数 (Positional Arguments): 调用时按顺序匹配,也可以说是普通形参
  • 默认参数值 (Default Parameter Values): 定义函数时给参数指定默认值,调用时如果未提供该参数,则使用默认值      注意点:带默认值的参数必须放在没有默认值的参数之后
  • 可变数量参数 (*args 和 **kwargs):

            - *args: 将多余的位置参数收集为一个元组

            - **kwargs: 将多余的关键字参数收集为一个字典

Python 先用传的参数按顺序填满普通参数,如果还有剩下的位置参数,全部塞进 *args 这个元组里,如果没多余参数,*args 就是个空元组 ()

def make_pizza(size, *toppings):
    """概述要制作的比萨。
    *toppings 会将所有额外的位置参数收集到一个元组中。
    """
    print(f"\n制作一个 {size} 寸的比萨,配料如下:")
    if toppings: # 只要toppings不为空元组,就会执行
        for topping in toppings:
            print(f"- {topping}")
    else:
        print("- 原味 (无额外配料)")

make_pizza(12, "蘑菇")
make_pizza(16, "香肠", "青椒", "洋葱")
make_pizza(9) # toppings 会是空元组

# ---------- 结果如下 -----------
制作一个 12 寸的比萨,配料如下:
- 蘑菇

制作一个 16 寸的比萨,配料如下:
- 香肠
- 青椒
- 洋葱

制作一个 9 寸的比萨,配料如下:
- 原味 (无额外配料)

Python 先处理所有位置参数(包括普通参数和*args),把能匹配普通参数名的关键字参数用掉,剩下的所有 参数名=值 都塞进 **kwargs 这个字典里

def build_profile(first_name, last_name, **user_info):
    """创建一个字典,其中包含我们知道的有关用户的一切。
    **user_info 会将所有额外的关键字参数收集到一个字典中。
    """
    profile = {}
    profile['first_name'] = first_name
    profile['last_name'] = last_name
    for key, value in user_info.items():
        profile[key] = value
    return profile

user_profile = build_profile('爱因斯坦', '阿尔伯特',
                             location='普林斯顿',
                             field='物理学',
                             hobby='小提琴')
print(f"\n用户信息: {user_profile}")

# ------------ 结果如下 --------------
用户信息:{'first_name': '爱因斯坦', 'last_name': '阿尔伯特', 'location': '普林斯顿', 'field': '物理学', 'hobby': '小提琴'}

关键字参数 (Keyword Arguments)并非是一种参数,而是一种传递参数的手段: 调用时通过 参数名=值 的形式指定,可以不按顺序。他可以传位置参数的值,也可以传默认参数的值,也可以传可变参数的值,也可以传关键字参数的值。为了可读性,更推荐对所有参数均采取关键字参数传递

假设一个复杂的绘图函数
plot_data(data, x_col, y_col, "blue", "-", True, False, "My Plot", "X-axis", "Y-axis") # 不清晰

使用关键字参数
plot_data(data=my_data, x_column='time', y_column='value',
          color='blue', linestyle='-', show_grid=True, use_log_scale=False,
          title="My Awesome Plot", xlabel="Time (s)", ylabel="Value") # 非常清晰

- 局部变量 (Local Variables): 在函数内部定义的变量,只在该函数内部有效。当函数执行完毕后,局部变量通常会被销毁

- 全局变量 (Global Variables): 在所有函数外部定义的变量,可以在程序的任何地方被访问(但在函数内部修改全局变量需要特殊声明,如 global 关键字,初学阶段可以先避免)

收获心得:

还有几道作业就没放上来了,说实话大部分概念都是之前接触C或者C++见过并且熟知的,就是*args 和 **kwargs需要稍微注意一下

@浙大疏锦行


网站公告

今日签到

点亮在社区的每一天
去签到