“最不令人惊讶”和可变默认参数
Python 中 foo 函数的意外行为,其中默认参数绑定在函数定义而不是执行时,具有让很多人感到困惑。有些人甚至认为这是一种编程失礼。然而,这种行为有一个合理的理由,植根于 Python 作为一种具有一流函数的语言的本质。
Python 中的函数不仅仅是代码块;它是一个函数。它们是在定义时评估的对象。此评估包括绑定默认参数,这些参数充当函数对象的“成员数据”。因此,对默认参数所做的更改在函数调用中持续存在,类似于保留任何对象中的状态更改的方式。
为了说明这一点,请考虑一个打印消息并返回空列表的函数 a。另一个函数 b 采用单个参数 x,默认值为 a()。当调用 b 而不指定 x 时,它将 x 绑定到调用 a 的结果,该结果返回一个空列表。但是,由于空列表作为默认参数存储在 b 中,因此对 b 的后续调用将附加到同一列表,从而导致观察到的行为,其中第一次调用时打印 [5],第二次调用时打印 [5, 5] .
此行为遵循“最少惊讶”原则,该原则规定程序的行为应与程序员的合理预期一致。在这种情况下,一旦定义了函数对象,其默认参数就会成为其状态的一部分,并且对这些参数的任何修改都会反映在后续调用中。
虽然这种行为对某些人来说可能违反直觉,但它是一致的符合Python的设计理念。作为一流对象的函数允许更大的灵活性并鼓励更面向对象的编程风格。理解这个概念可以增强程序员对 Python 基础知识的掌握,并促进更健壮和有效的代码开发。
以上是为什么 Python 中的可变默认参数会导致意外行为?的详细内容。更多信息请关注PHP中文网其他相关文章!

Tomergelistsinpython,YouCanusethe操作员,estextMethod,ListComprehension,Oritertools

在Python3中,可以通过多种方法连接两个列表:1)使用 运算符,适用于小列表,但对大列表效率低;2)使用extend方法,适用于大列表,内存效率高,但会修改原列表;3)使用*运算符,适用于合并多个列表,不修改原列表;4)使用itertools.chain,适用于大数据集,内存效率高。

使用join()方法是Python中从列表连接字符串最有效的方法。1)使用join()方法高效且易读。2)循环使用 运算符对大列表效率低。3)列表推导式与join()结合适用于需要转换的场景。4)reduce()方法适用于其他类型归约,但对字符串连接效率低。完整句子结束。

pythonexecutionistheprocessoftransformingpypythoncodeintoExecutablestructions.1)InternterPreterReadSthecode,ConvertingTingitIntObyTecode,whepythonvirtualmachine(pvm)theglobalinterpreterpreterpreterpreterlock(gil)the thepythonvirtualmachine(pvm)

Python的关键特性包括:1.语法简洁易懂,适合初学者;2.动态类型系统,提高开发速度;3.丰富的标准库,支持多种任务;4.强大的社区和生态系统,提供广泛支持;5.解释性,适合脚本和快速原型开发;6.多范式支持,适用于各种编程风格。

Python是解释型语言,但也包含编译过程。1)Python代码先编译成字节码。2)字节码由Python虚拟机解释执行。3)这种混合机制使Python既灵活又高效,但执行速度不如完全编译型语言。

useeAforloopWheniteratingOveraseQuenceOrforAspecificnumberoftimes; useAwhiLeLoopWhenconTinuingUntilAcIntiment.ForloopSareIdeAlforkNownsences,而WhileLeleLeleLeleLoopSituationSituationSituationsItuationSuationSituationswithUndEtermentersitations。

pythonloopscanleadtoerrorslikeinfiniteloops,modifyingListsDuringteritation,逐个偏置,零indexingissues,andnestedloopineflinefficiencies


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3汉化版
中文版,非常好用

Dreamweaver CS6
视觉化网页开发工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)