Table des matières
回复内容:
Maison développement back-end Tutoriel Python Python 使用 list 作为函数参数时,参数是否会初始化?

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

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

看到了这样一段代码:

def foo(a, b=[]):
    b.append(a)
    print b
Copier après la connexion

回复内容:

<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>
Copier après la connexion
官方文档解释在这里: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
[]
>>> 
Copier après la connexion
啥都不用说,加一个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>
Copier après la connexion
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Utilisez la fonction StringBuilder.append() de Java pour épisser des chaînes Utilisez la fonction StringBuilder.append() de Java pour épisser des chaînes Jul 26, 2023 am 09:18 AM

Utilisez la fonction StringBuilder.append() de Java pour épisser des chaînes. En programmation Java, l'épissage de chaînes est une opération très courante. Afin de raccorder efficacement des chaînes, Java fournit la classe StringBuilder, dont la fonction append() peut rapidement joindre plusieurs chaînes. StringBuilder est une séquence de caractères variable plus efficace à utiliser que la classe String. Lorsque nous devons concaténer un grand nombre de chaînes, utilisez

Comment utiliser l'ajout en python Comment utiliser l'ajout en python Nov 14, 2023 am 10:41 AM

En Python, append() est une méthode de l'objet liste utilisée pour ajouter un élément à la fin de la liste. Il convient de noter que la méthode append() ne peut être utilisée que pour les objets de liste et ne peut pas être utilisée pour d'autres types d'objets. De plus, la méthode append() modifiera directement la liste d'origine sans renvoyer de nouvelle liste.

Comment utiliser la méthode append() de la classe StringBuilder pour épisser des chaînes en Java Comment utiliser la méthode append() de la classe StringBuilder pour épisser des chaînes en Java Jul 25, 2023 pm 03:05 PM

Comment utiliser la méthode append() de la classe StringBuilder pour épisser des chaînes en Java L'épissage de chaînes est une opération courante en Java. Pendant le processus d'épissage, si vous utilisez la classe String de base pour ajouter des chaînes, de nouveaux objets String seront créés fréquemment, affectant ainsi les performances. Afin de résoudre ce problème, Java fournit la classe StringBuilder pour effectuer des opérations d'épissage de chaînes. La classe StringBuilder est l'une des classes Java

Comment utiliser l'ajout Comment utiliser l'ajout Oct 25, 2023 pm 03:14 PM

append est un outil de ligne de commande couramment utilisé pour ajouter le contenu d'un fichier à la fin d'un autre fichier. L'utilisation de la commande append est "append [option] fichier source fichier cible", où le fichier source est le fichier à ajouter et le fichier cible est le fichier à ajouter.

Où est l'impression sur le clavier ? Où est l'impression sur le clavier ? Jun 19, 2023 am 09:37 AM

La touche d'impression d'écran se trouve sur les touches fléchées du clavier, avec les mots "prtsc sysrq" dessus, et est située à droite de f12. S'il n'y a pas de bouton avec le mot « prtsc sysrq », vous pouvez trouver « fn » et « insert (prt sc) », cliquez d'abord sur « fn », puis cliquez sur « insert (PRT sc) » pour réaliser la fonction de capture d'écran d'impression. .

Introduction aux fonctions Python : fonctions et exemples d'utilisation de la fonction print Introduction aux fonctions Python : fonctions et exemples d'utilisation de la fonction print Nov 03, 2023 pm 04:33 PM

Python est un langage de programmation populaire conçu pour rendre la programmation informatique plus simple et plus facile à comprendre. En Python, utiliser la fonction d'impression pour afficher du texte sur la console est une tâche basique. Dans cet article, nous présenterons la fonction d'impression de Python, explorerons ses capacités et ses exemples d'utilisation, et fournirons des exemples de code pour vous aider à mieux comprendre comment utiliser la fonction. La fonction d'impression de Python est une fonction intégrée utilisée pour afficher du texte et la valeur d'une variable. Sa syntaxe est très simple. Il te suffit de

Utiliser la fonction d'impression en Python Utiliser la fonction d'impression en Python Feb 18, 2024 pm 02:48 PM

Python est un langage de programmation de haut niveau simple et facile à apprendre, largement utilisé dans l'analyse de données, l'intelligence artificielle, le développement Web et d'autres domaines. En Python, print est une fonction couramment utilisée pour afficher des résultats ou des informations de débogage à l'écran. Cet article présentera en détail l'utilisation de la fonction d'impression et fournira des exemples de code spécifiques pour aider les lecteurs à mieux la maîtriser. Premièrement, la fonction d'impression peut accepter plusieurs paramètres et les imprimer à l'écran. Ces paramètres peuvent être des chaînes, des entiers, des nombres à virgule flottante, etc., ou encore des variables,

Que signifie imprimer en VB Que signifie imprimer en VB Jan 18, 2021 am 10:47 AM

Imprimer en VB est une instruction de sortie. Sous l'interface graphique WINDOWS, cette instruction n'est pas nécessaire et dans la version VB.NET, Imprimer en tant que sortie d'impression n'existe plus.

See all articles