찾다
백엔드 개발파이썬 튜토리얼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 [选项] 源文件 目标文件”,其中,源文件是要追加的文件,目标文件是要被追加的文件。

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函数的功能和使用示例Nov 03, 2023 pm 04:33 PM

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

使用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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!