看到了这样一段代码:
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的所谓的地址,你就明白了
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>

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

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

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

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

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

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

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

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


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Dreamweaver Mac版
Alat pembangunan web visual

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft
