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

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.lqws.cn/news/202141.html

相关文章:

  • AI大模型:(二)3.2 Llama-Factory微调训练deepseek-r1实践
  • 微前端架构下的B端页面设计:模块化与跨团队协作的终极方案
  • 【图像处理基石】如何构建一个简单好用的美颜算法?
  • 向 AI Search 迈进,腾讯云 ES 自研 v-pack 向量增强插件揭秘
  • JAVA理论第五章-JVM
  • JVM 垃圾回收器 详解
  • LVGL手势识别事件无上报问题处理记录
  • C++图书管理
  • 《前缀和》题集
  • [yolov11改进系列]基于yolov11融合改进检测头特征融合模块AFPN的python源码+训练源码
  • CCPC chongqing 2025 H
  • 振动力学:多自由度系统
  • AI书签管理工具开发全记录(十五):TUI基本逻辑实现与数据展示
  • 【Hot 100】295. 数据流的中位数
  • PyTorch 中contiguous函数使用详解和代码演示
  • Linux(14)——库的制作与原理
  • 华为云Flexus+DeepSeek征文 | 从零到一:用Flexus云服务打造低延迟联网搜索Agent
  • 为什么React列表项需要key?(React key)(稳定的唯一标识key有助于React虚拟DOM优化重绘大型列表)
  • Vue3中computed和watch的区别
  • CSS3 的特性
  • redis分布式锁
  • DAY 24 元组和OS模块
  • 机器学习期末复习
  • 【leetcode】递归,回溯思想 + 巧妙解法-解决“N皇后”,以及“解数独”题目
  • 16-Oracle 23 ai-JSON-Relational Duality-知识准备
  • Java并发编程之并发编程的调试与测试
  • 性能测试-jmeter实战2
  • 打卡第38天:早停策略和模型权重的保存
  • 企业微信授权登录(uniapp项目)
  • 数据通信与计算机网络——数据与信号