欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > Python 函数全攻略:函数进阶(生成器、闭包、内置函数、装饰器、推导式)

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

2025/6/23 9:54:26 来源:https://blog.csdn.net/m0_60311269/article/details/148500653  浏览:    关键词: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. 遍历每个字符串数字:

          • 转为整数 (十进制)。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词