Python函数考核:理解args, kwargs及实战应用
需积分: 9 140 浏览量
更新于2024-08-05
收藏 5KB MD 举报
在Python学院的函数阶段考核B卷中,主要考察了几个关键的Python编程概念和技巧,涉及到了函数参数、列表推导、变量作用域和生成器的使用。
1. **`*args` 和 `**kwargs` 的作用**:
- `*args` 是一个动态位置参数,它允许在函数调用时传入任意数量的位置参数,这些参数将被收集到一个元组中。
- `**kwargs` 是一个动态关键字参数,用于接收任意数量的关键字参数,这些参数会被收集到一个字典中,其中键是参数名,值是参数值。
- 当需要处理不确定数量或类型的参数时,`*args` 和 `**kwargs` 结合使用非常灵活,可以适应不同情况下的函数调用。
- 参数的排列顺序遵循一定的规则:位置参数先于 `*args`,`*args` 再次之前是默认参数,然后是 `**kwargs`,最后是 `**kwargs` 后面的剩余位置参数。
2. **代码输出结果分析**:
- `f(5,4,3,"meet")` 的输出是 `(5, 4, (3,), {'meet': None})`。
- `f(arg1=5,arg2=3,c=4,zzz="h1")` 的输出是 `(5, 3, (), {'c': 4, 'zzz': 'h1'})`。
- `f(6,9,13,a=11,b=22,c=33)` 的输出是 `(6, 9, (13,), {'a': 11, 'b': 22, 'c': 33})`。
- `f(*lst,**dic)` 的输出利用了 unpacking,相当于 `f(112, 223, 334, a=110, b=119)`,因此是 `(112, 223, 334, {'a': 110, 'b': 119})`。
- `f(7,5,*lst,g="info",**dic)` 的输出是 `(7, 5, (112, 223, 334), {'g': 'info', 'a': 110, 'b': 119})`。
3. **列表推导错误**:
`print([iforiinrange(10,-1,1)])` 报错,因为 `if` 不是正确的语法。应改为 `for i in range(10, -1, -1):`,所以结果是空列表 `[]`。
4. **`deff()` 函数的执行结果**:
- `f(2)` 输出 `[0, 1]`,因为循环 `x=2`,`l` 初始为空,所以将 `0` 和 `1` 追加。
- `f(3,[3])` 输出 `[3, 0, 1, 4]`,`l` 初始为 `[3]`,循环 `x=3`,添加 `0` 到 `4`。
- `f(4,[])` 输出 `[0, 1, 4, 9]`,`l` 初始为空,循环 `x=4`,依次追加从 `0` 到 `9` 的平方。
5. **Python的加载顺序与取值顺序**:
- 加载顺序(搜索变量时):Python 首先查找局部作用域(函数内部),然后全局作用域(所有模块和函数定义),最后内置作用域(Python 的预定义变量)。
- 取值顺序(访问变量时):相反,Python 先检查局部作用域,然后是全局作用域,最后是内置作用域。
6. **代码错误分析**:
- 代码会报错,因为 `num` 在嵌套函数 `foo()` 中使用了 `nonlocal` 关键字,但没有在外部函数 `func()` 中声明。解决方法是在 `func()` 中添加 `nonlocal num`,使 `num` 变量成为可变的。
7. **生成器和 for 循环**:
`def demo():` 生成了一个生成器,每次循环 `range(3)` 会返回 `0, 1, 2`,`yield i` 使其成为一个序列生成器。然后调用 `g = demo()` 生成器对象,最后 `for em in g:` 循环遍历生成器,输出结果将是 `0, 1, 2`。
总结:这道题目全面检验了考生对Python函数参数的理解、列表推导、变量作用域规则以及生成器的基本运用。通过这些问题,学习者能够巩固基础语法知识并提升问题解决能力。
2024-07-04 上传
2019-08-23 上传
2020-08-05 上传
2020-06-06 上传
housen135
- 粉丝: 0
- 资源: 4
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析