当前位置: 首页 > ds >正文

python打卡day26

函数、参数、变量

知识点回顾:

  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_nameprofile['last_name'] = last_namefor key, value in user_info.items():profile[key] = valuereturn profileuser_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需要稍微注意一下

@浙大疏锦行

http://www.xdnf.cn/news/6545.html

相关文章:

  • 【开源Agent框架】OWL:面向现实任务自动化的多智能体协作框架深度解析
  • 从代码学习深度学习 - 风格迁移 PyTorch版
  • 中国科学院计算所:从 NFS 到 JuiceFS,大模型训推平台存储演进之路
  • 【知识点】大模型面试题汇总(持续更新)
  • SQLPub:一个提供AI助手的免费MySQL数据库服务
  • 智慧化系统安全分析报告
  • AI学习博文链接
  • 12V升24V升压恒压WT3207
  • YOLO格式数据集制作以及训练
  • c++多态面试题之(析构函数与虚函数)
  • 工业操作系统核心技术揭秘
  • sizeof()运算符
  • 嵌入式学习笔记 D21:双向链表的基本操作
  • 系统集成项目管理工程师学习笔记
  • 【日撸 Java 三百行】Day 16(递归)
  • Ubnutu ADB 无法识别设备的解决方法
  • 数据库的锁 - 全局锁、表锁、行锁
  • Vuex和Vue的区别
  • RabbitMQ概述
  • 【ArcGIS技巧】根据地块、界址点图层生成界址线
  • 如何在Edge浏览器里-安装梦精灵AI提示词管理工具
  • MySQL数据类型之VARCHAR和CHAR使用详解
  • 基于大模型预测围术期麻醉苏醒时间的技术方案
  • Ubuntu 安装 Redis
  • 《Adversarial Sticker: A Stealthy Attack Method in the Physical World》论文分享(侵删)
  • A2O娱乐李秀满纪录片首映礼,A2O MAY、少女时代、崔始源、泰民齐聚祝贺
  • 脚本语言Lua
  • 使用PEFT库将原始模型与LoRA权重合并
  • 视频分辨率增强与自动补帧
  • ‌JMeter聚合报告中的任务数和并发数区别