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

Python 函数全攻略:函数进阶(生成器、闭包、内置函数、装饰器、推导式)

一、默认参数中的易错点

  • 问题: 当函数的默认参数是可变类型(如 list, dict)时,存在“坑”。

  • 现象:

    def func(a2=[]): # a2 默认是一个空列表a2.append(2)print(a2)func() # 第一次调用,a2 默认为 [],输出 [2]
    func([]) # 传入新列表,输出 [2]
    func([1]) # 传入带元素的列表,输出 [1, 2]
    func() # 再次调用 func(),a2 仍指向第一次创建的那个列表,输出 [2, 2]
    
  • 原因:

    • 函数定义时,默认参数的可变对象只创建一次,并被该参数引用。

    • 当函数调用时未传递该默认参数,它会一直使用并修改第一次创建的那个可变对象。

    • 当函数调用时传递了该默认参数,它会使用传入的值,不影响原始默认对象。

    • 不可变类型int, str, tuple)则无此问题,因其“修改”会生成新对象,不影响原默认值。


二、内置函数(Functions)

Python内置函数丰富,以下分组介绍常用和重要部分:

  1. 数值计算类 (5个):

    • abs(x): 求绝对值。

    • pow(base, exp): baseexp 次方 (等同于 base ** exp)。

      • 示例: pow(2, 5) -> 32

    • sum(iterable): 对可迭代对象中的数字求和。

      • 示例: sum([1, 2, 3]) -> 6

    • divmod(dividend, divisor): 返回商和余数的元组 (商, 余数)

      • 示例: divmod(98, 10) -> (9, 8)

      • 应用场景: 分页计算(总页数 = 商 + (1 if 余数 > 0 else 0))。

    • round(number, ndigits=None): 四舍五入,ndigits 指定小数位数。

      • 示例: round(3.1415926, 2) -> 3.14;round(3.147, 2) -> 3.15

  2. 序列操作与布尔判断类 (4个):

    • min(iterable): 获取可迭代对象中的最小值。

    • max(iterable): 获取可迭代对象中的最大值。

    • all(iterable): 判断可迭代对象中所有元素布尔值为 True 才返回 True,否则返回 False(空可迭代对象返回 True)。

      • 示例: all([1, 'hello', True]) -> Trueall([1, 0, True]) -> False

      • 应用: 校验多条件(如用户名密码非空)。

    • any(iterable): 判断可迭代对象中任一元素布尔值为 True 就返回 True,否则返回 False(空可迭代对象返回 False)。

      • 示例: any([0, '', False, 1]) -> Trueany([0, '', False]) -> False

  3. 进制转换类 (4个):

    • 核心: 计算机底层是二进制,其他进制(八进制、十进制、十六进制)为方便人类表示。

    • 转换路径: 二进制/八进制/十六进制 <-> 十进制 (必须通过十进制中转)。

    • Python表示:

      • 十进制:普通整数 90

      • 二进制:0b 前缀字符串 0b1011010

      • 八进制:0o 前缀字符串 0o132

      • 十六进制:0x 前缀字符串 0x5a

    • 转换函数:

      • bin(decimal): 十进制转二进制字符串(带0b前缀)。

      • oct(decimal): 十进制转八进制字符串(带0o前缀)。

      • hex(decimal): 十进制转十六进制字符串(带0x前缀)。

      • int(string, base=None): 将字符串(或其他类型)转为十进制整数。base 参数指定字符串的进制(2, 8, 16等),若无base则自动推断。

        • 示例: int('0b1011010', base=2) -> 90;int('0o132', base=8) -> 90;int('0x5a', base=16) -> 90

    • 面试题: 将IP地址 (192.168.11.23) 转换为二进制字符串,再转换为整体十进制数。

      • 思路:

        1. IP按 . 分割成四个字符串数字。

        2. 遍历每个字符串数字:

          • 转为整数 (十进制)。

http://www.lryc.cn/news/2404019.html

相关文章:

  • 基于springboot的藏文古籍系统
  • 重构城市应急指挥布控策略 ——无人机智能视频监控的破局之道
  • 声音信号的基频检测(python版本)
  • STM32 控制12VRGB灯带颜色亮度调节,TFTLCD显示
  • Hive开窗函数的进阶SQL案例
  • 【JJ斗地主-注册安全分析报告】
  • 《绩效管理》要点总结与分享
  • Microsoft前后端不分离编程新风向:cshtml
  • 【评测】用Flux的图片文本修改的PS效果
  • 青少年编程与数学 01-011 系统软件简介 01 MS-DOS操作系统
  • 数据库管理-第334期 Oracle Database 23ai测试版RAC部署文档(20250607)
  • springCloud2025+springBoot3.5.0+Nacos集成redis从nacos拉配置起服务
  • AI生成的基于html+marked.js实现的Markdown转html工具,离线使用,可实时预览 [
  • 机器学习:load_predict_project
  • OkHttp 3.0源码解析:从设计理念到核心实现
  • 【storage】
  • 微信小程序带参分享、链接功能
  • JVM 垃圾回收器 详解
  • FreeRTOS任务之深入篇
  • Linux 系统、代码与服务器进阶知识深度解析
  • 人工智能--AI换脸
  • NLP学习路线图(二十七):Transformer编码器/解码器
  • 【机器学习】支持向量机实验报告——基于SVM进行分类预测
  • 策略模式实战:Spring中动态选择商品处理策略的实现
  • 主流信创数据库对向量功能的支持对比
  • Matlab | matlab中的画图工具详解
  • HA: Wordy靶场
  • 6.7本日总结
  • 中国移动6周年!
  • Svelte 核心语法详解:Vue/React 开发者如何快速上手?