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

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Système de fusion, expliqué
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 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)

Sujets chauds

Tutoriel Java
1665
14
Tutoriel PHP
1269
29
Tutoriel C#
1249
24
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 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.

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

Interprétation de la documentation Java : Introduction détaillée à la méthode append() de la classe StringBuilder Interprétation de la documentation Java : Introduction détaillée à la méthode append() de la classe StringBuilder Nov 04, 2023 am 08:50 AM

Interprétation de la documentation Java : Introduction détaillée à la méthode append() de la classe StringBuilder. Java fournit la classe StringBuilder en tant que type de chaîne variable. Cette classe fournit une série de méthodes pour faire fonctionner les chaînes. L'une des méthodes les plus couramment utilisées est append(. )méthode. Cet article présentera en détail la méthode append() de la classe StringBuilder et joindra des exemples de code spécifiques. La classe StringBuilder est en Java

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. .

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,

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

See all articles