搜索
首页后端开发Python教程Python 使用 list 作为函数参数时,参数是否会初始化?

看到了这样一段代码:

def foo(a, b=[]):
    b.append(a)
    print b

回复内容:

<span class="o">>>></span> <span class="k">def</span> <span class="nf">foo</span><span class="p">(</span><span class="n">bar</span><span class="o">=</span><span class="p">[]):</span>
<span class="o">...</span>     <span class="k">return</span> <span class="n">bar</span>
<span class="o">>>></span> <span class="n">foo</span><span class="o">.</span><span class="n">func_name</span>
<span class="s">'foo'</span>
<span class="o">>>></span> <span class="n">foo</span><span class="o">.</span><span class="n">func_defaults</span>
<span class="p">([],)</span>
<span class="o">>>></span> <span class="n">foo</span><span class="p">()</span> <span class="ow">is</span> <span class="n">foo</span><span class="o">.</span><span class="n">func_defaults</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="bp">True</span>
官方文档解释在这里:default args 的求值是在定义的时候,只做一次
4. More Control Flow Tools

但是……
>>> def f(a, b=[]):
...     b.append(a)
...     print b
... 
>>> f(1)
[1]
>>> f(1)
[1, 1]
>>> def f(a, b=None):
...     b = b if b is not None else []
...     b.append(a)
...     print b
... 
>>> f(1)
[1]
>>> f(1)
[1]
>>> f(1)
[1]
>>> a = []
>>> b = []
>>> a.append(1)
>>> b
[]
>>> 
啥都不用说,加一个id()输出b的所谓的地址,你就明白了

Python 使用 list 作为函数参数时,参数是否会初始化? no, def foo(a=[]) 这种函数参数写法叫 参数默认值,只会在函数声明是初始化一次。之后不会再变了。

note, 建议了解一下 def foo(a=[])和 foo(a=[])的区别:前者是参数默认值,后者是keyword arguments. 还有这种def foo(*args, **kargs) 和 这种 foo(*args, **kargs), 都是有细微区别的。 不会的, 默认值之间是共享的, 只会创建一次, 并不会每次创建一个新的对象. 也就是说使用可变对象作为函数的默认值时会导致函数的混乱. 同理使用字典作为默认参数,会得出类似的返回.
<span class="k">def</span> <span class="nf">foo</span><span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="n">v</span><span class="p">,</span> <span class="n">fdict</span><span class="o">=</span><span class="p">{}):</span>
    <span class="n">fdict</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
    <span class="k">print</span> <span class="n">fdict</span>
<span class="n">foo</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span>
<span class="n">foo</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">)</span>
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
使用java的StringBuilder.append()函数拼接字符串使用java的StringBuilder.append()函数拼接字符串Jul 26, 2023 am 09:18 AM

使用Java的StringBuilder.append()函数拼接字符串在Java编程中,字符串的拼接是非常常见的操作。为了高效地拼接字符串,Java提供了StringBuilder类,其中的append()函数可以快速地将多个字符串连接在一起。StringBuilder是一个可变的字符序列,使用起来比String类更加高效。当我们需要拼接大量字符串时,使用

python中append怎么用python中append怎么用Nov 14, 2023 am 10:41 AM

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。需要注意的是,append()方法只能用于列表对象,不能用于其他类型的对象。此外,append()方法会直接修改原列表,而不会返回一个新的列表。

Java中如何使用StringBuilder类的append()方法来拼接字符串Java中如何使用StringBuilder类的append()方法来拼接字符串Jul 25, 2023 pm 03:05 PM

Java中如何使用StringBuilder类的append()方法来拼接字符串在Java中,拼接字符串是一项常见的操作。在拼接过程中,如果使用基本的String类来进行字符串相加,会导致频繁的创建新的String对象,从而影响性能。为了解决这个问题,Java提供了StringBuilder类来进行字符串的拼接操作。StringBuilder类是Java中一

append怎么用append怎么用Oct 25, 2023 pm 03:14 PM

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。append命令的用法为“append [选项] 源文件 目标文件”,其中,源文件是要追加的文件,目标文件是要被追加的文件。

Python函数介绍:print函数的功能和使用示例Python函数介绍:print函数的功能和使用示例Nov 03, 2023 pm 04:33 PM

Python是一种流行的编程语言,旨在使计算机编程变得更加简单和易于理解。在Python中,用print函数向控制台输出文本是一个基本的任务。在本文中,我们将介绍Python的print函数,探索其功能和使用示例,并提供代码示例来帮助您更好地了解如何使用该函数。Python的print函数是一个内置的函数,用于输出文本和变量的值。它的语法非常简单。您只需将要

print在键盘哪里print在键盘哪里Jun 19, 2023 am 09:37 AM

printscreen键在键盘设备的方向键上,有“prtsc sysrq”字样,位于f12的右侧。如果没有“prtsc sysrq”字样的按键,可找到“fn”和“insert(prt sc)”,先点击“fn”,再点击‘insert(PRT sc)’实现printscreen截图功能。

使用Python中的print函数使用Python中的print函数Feb 18, 2024 pm 02:48 PM

Python是一种简单易学的高级编程语言,被广泛用于数据分析、人工智能、Web开发等领域。在Python中,print是一个常用的函数,用于在屏幕上输出结果或调试信息。本文将详细介绍print函数的用法,并提供具体的代码示例帮助读者更好地掌握。首先,print函数可以接受多个参数,并将它们打印到屏幕上。这些参数可以是字符串、整数、浮点数等,甚至还可以是变量、

vb中print什么意思vb中print什么意思Jan 18, 2021 am 10:47 AM

vb中print是输出语句,在WINDOWS图形界面下,该语句实在没有存在的必要了;而在VB.NET版本里,作为打印输出Print也已经不复存在了。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具