Inhaltsverzeichnis
回复内容:
Heim Backend-Entwicklung Python-Tutorial Python 使用 list 作为函数参数时,参数是否会初始化?

Python 使用 list 作为函数参数时,参数是否会初始化?

Jun 06, 2016 pm 04:23 PM
append def print

看到了这样一段代码:

def foo(a, b=[]):
    b.append(a)
    print b
Nach dem Login kopieren

回复内容:

<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>
Nach dem Login kopieren
官方文档解释在这里: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
[]
>>> 
Nach dem Login kopieren
啥都不用说,加一个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>
Nach dem Login kopieren
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1665
14
PHP-Tutorial
1269
29
C#-Tutorial
1249
24
Verwenden Sie die StringBuilder.append()-Funktion von Java, um Zeichenfolgen zu verbinden Verwenden Sie die StringBuilder.append()-Funktion von Java, um Zeichenfolgen zu verbinden Jul 26, 2023 am 09:18 AM

Verwenden Sie die StringBuilder.append()-Funktion von Java, um Zeichenfolgen zu verbinden. In der Java-Programmierung ist das Zusammenfügen von Zeichenfolgen eine sehr häufige Operation. Um Strings effizient zu verbinden, stellt Java die Klasse StringBuilder bereit, deren Funktion append() schnell mehrere Strings zusammenfügen kann. StringBuilder ist eine variable Zeichenfolge, die effizienter zu verwenden ist als die String-Klasse. Wenn wir eine große Anzahl von Zeichenfolgen verketten müssen, verwenden Sie

So verwenden Sie das Anhängen in Python So verwenden Sie das Anhängen in Python Nov 14, 2023 am 10:41 AM

In Python ist append() eine Methode des Listenobjekts, mit der ein Element am Ende der Liste hinzugefügt wird. Es ist zu beachten, dass die Methode append() nur für Listenobjekte und nicht für andere Objekttypen verwendet werden kann. Darüber hinaus ändert die Methode append() direkt die ursprüngliche Liste, ohne eine neue Liste zurückzugeben.

So verwenden Sie das Anhängen So verwenden Sie das Anhängen Oct 25, 2023 pm 03:14 PM

append ist ein häufig verwendetes Befehlszeilentool, mit dem der Inhalt einer Datei an das Ende einer anderen Datei angehängt werden kann. Die Verwendung des Befehls „append“ lautet „append [option] source file target file“, wobei die Quelldatei die anzuhängende Datei und die Zieldatei die anzuhängende Datei ist.

So verwenden Sie die append()-Methode der StringBuilder-Klasse, um Zeichenfolgen in Java zu verbinden So verwenden Sie die append()-Methode der StringBuilder-Klasse, um Zeichenfolgen in Java zu verbinden Jul 25, 2023 pm 03:05 PM

So verwenden Sie die append()-Methode der StringBuilder-Klasse zum Spleißen von Zeichenfolgen in Java. Das Spleißen von Zeichenfolgen ist in Java eine häufige Operation. Wenn während des Spleißvorgangs die Basis-String-Klasse zum Hinzufügen von Zeichenfolgen verwendet wird, werden häufig neue String-Objekte erstellt, was sich negativ auf die Leistung auswirkt. Um dieses Problem zu lösen, stellt Java die StringBuilder-Klasse zur Verfügung, um String-Splicing-Operationen durchzuführen. Die StringBuilder-Klasse ist eine der Java

Interpretation der Java-Dokumentation: Detaillierte Einführung in die append()-Methode der StringBuilder-Klasse Interpretation der Java-Dokumentation: Detaillierte Einführung in die append()-Methode der StringBuilder-Klasse Nov 04, 2023 am 08:50 AM

Interpretation der Java-Dokumentation: Detaillierte Einführung in die append()-Methode der StringBuilder-Klasse. Java stellt die StringBuilder-Klasse als variablen String-Typ bereit. Eine der am häufigsten verwendeten Methoden ist append(. )Verfahren. In diesem Artikel wird die append()-Methode der StringBuilder-Klasse ausführlich vorgestellt und spezifische Codebeispiele angehängt. Die StringBuilder-Klasse ist in Java

Wo ist der Aufdruck auf der Tastatur? Wo ist der Aufdruck auf der Tastatur? Jun 19, 2023 am 09:37 AM

Die Druckbildschirmtaste befindet sich auf den Pfeiltasten des Tastaturgeräts mit der Aufschrift „prtsc sysrq“ und befindet sich rechts von f12. Wenn es keine Schaltfläche mit dem Wort „prtsc sysrq“ gibt, können Sie „fn“ und „insert(prt sc)“ finden. Klicken Sie zuerst auf „fn“ und dann auf „insert(PRT sc)“, um die Druckbildschirm-Screenshot-Funktion zu realisieren .

Verwenden der Druckfunktion in Python Verwenden der Druckfunktion in Python Feb 18, 2024 pm 02:48 PM

Python ist eine einfache und leicht zu erlernende Programmiersprache auf hohem Niveau, die in der Datenanalyse, künstlichen Intelligenz, Webentwicklung und anderen Bereichen weit verbreitet ist. In Python ist Drucken eine häufig verwendete Funktion, mit der Ergebnisse oder Debugging-Informationen auf dem Bildschirm ausgegeben werden. In diesem Artikel wird die Verwendung der Druckfunktion ausführlich vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern zu helfen, sie besser zu beherrschen. Erstens kann die Druckfunktion mehrere Parameter akzeptieren und auf dem Bildschirm ausdrucken. Diese Parameter können Zeichenfolgen, Ganzzahlen, Gleitkommazahlen usw. oder sogar Variablen sein.

Einführung in Python-Funktionen: Funktionen und Anwendungsbeispiele der Druckfunktion Einführung in Python-Funktionen: Funktionen und Anwendungsbeispiele der Druckfunktion Nov 03, 2023 pm 04:33 PM

Python ist eine beliebte Programmiersprache, die die Computerprogrammierung einfacher und verständlicher machen soll. In Python ist die Verwendung der Druckfunktion zum Ausgeben von Text auf der Konsole eine grundlegende Aufgabe. In diesem Artikel stellen wir die Druckfunktion von Python vor, erkunden ihre Fähigkeiten und Anwendungsbeispiele und stellen Codebeispiele bereit, damit Sie die Verwendung der Funktion besser verstehen. Die Druckfunktion von Python ist eine integrierte Funktion zur Ausgabe von Text und dem Wert einer Variablen. Die Syntax ist sehr einfach. Du musst es einfach tun

See all articles