目次
回复内容:
ホームページ バックエンド開発 Python チュートリアル Python 使用 list 作为函数参数时,参数是否会初始化?

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

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

看到了这样一段代码:

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 までご連絡ください。

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Java の StringBuilder.append() 関数を使用して文字列を結合する Java の StringBuilder.append() 関数を使用して文字列を結合する Jul 26, 2023 am 09:18 AM

Java の StringBuilder.append() 関数を使用して文字列を結合する Java プログラミングでは、文字列の結合は非常に一般的な操作です。文字列を効率的に結合するために、Java は StringBuilder クラスを提供します。このクラスの append() 関数は、複数の文字列をすばやく結合できます。 StringBuilder は、String クラスよりも効率的に使用できる可変文字シーケンスです。多数の文字列を連結する必要がある場合は、次を使用します。

Pythonで追加を使用する方法 Pythonで追加を使用する方法 Nov 14, 2023 am 10:41 AM

Python では、append() はリストの末尾に要素を追加するために使用されるリスト オブジェクトのメソッドです。 append() メソッドはリスト オブジェクトにのみ使用でき、他のタイプのオブジェクトには使用できないことに注意してください。さらに、append() メソッドは、新しいリストを返さずに、元のリストを直接変更します。

アペンドの使い方 アペンドの使い方 Oct 25, 2023 pm 03:14 PM

append は、あるファイルの内容を別のファイルの末尾に追加するために使用される、一般的に使用されるコマンド ライン ツールです。 append コマンドの使用法は「append [オプション] ソース ファイル ターゲット ファイル」です。ここで、ソース ファイルは追加されるファイル、ターゲット ファイルは追加されるファイルです。

StringBuilder クラスの append() メソッドを使用して Java で文字列を結合する方法 StringBuilder クラスの append() メソッドを使用して Java で文字列を結合する方法 Jul 25, 2023 pm 03:05 PM

StringBuilder クラスの append() メソッドを使用して Java で文字列を結合する方法 文字列の結合は Java では一般的な操作です。スプライシング プロセス中に、基本 String クラスが文字列の追加に使用される場合、新しい String オブジェクトが頻繁に作成されるため、パフォーマンスに影響します。この問題を解決するために、Java は文字列の結合操作を実行する StringBuilder クラスを提供します。 StringBuilder クラスは Java クラスの 1 つです。

Java ドキュメントの解釈: StringBuilder クラスの append() メソッドの詳細な紹介 Java ドキュメントの解釈: StringBuilder クラスの append() メソッドの詳細な紹介 Nov 04, 2023 am 08:50 AM

Java ドキュメントの解釈: StringBuilder クラスの append() メソッドの詳細な紹介。Java は、StringBuilder クラスを変数文字列型として提供します。このクラスは、文字列を操作するための一連のメソッドを提供します。最も一般的に使用されるメソッドの 1 つは、append( )方法。この記事では、StringBuilder クラスの append() メソッドを詳しく紹介し、具体的なコード例を添付します。 StringBuilder クラスは Java にあります

キーボードのどこに印字があるのでしょうか? キーボードのどこに印字があるのでしょうか? Jun 19, 2023 am 09:37 AM

プリント スクリーン キーはキーボード デバイスの矢印キー上にあり、「prtsc sysrq」という文字が表示され、f12 の右側にあります。 「prtsc sysrq」という単語が含まれるボタンがない場合は、「fn」と「insert(prt sc)」を見つけて、最初に「fn」をクリックし、次に「insert(PRT sc)」をクリックすると、プリントスクリーンのスクリーンショット機能が実現されます。 。

Python で print 関数を使用する Python で print 関数を使用する Feb 18, 2024 pm 02:48 PM

Python は、データ分析、人工知能、Web 開発などの分野で広く使用されている、シンプルで学習しやすい高レベルのプログラミング言語です。 Python では、print は結果やデバッグ情報を画面に出力するためによく使用される関数です。この記事では、print 関数の使用法を詳細に紹介し、読者がそれをよりよく習得できるように具体的なコード例を示します。まず、print 関数は複数のパラメーターを受け取り、それらを画面に出力できます。これらのパラメータには、文字列、整数、浮動小数点数など、または変数を指定できます。

Python関数入門:print関数の関数と使用例 Python関数入門:print関数の関数と使用例 Nov 03, 2023 pm 04:33 PM

Python は、コンピューター プログラミングをよりシンプルかつ理解しやすくするために設計された人気のあるプログラミング言語です。 Python では、print 関数を使用してテキストをコンソールに出力するのが基本的なタスクです。この記事では、Python の print 関数を紹介し、その機能と使用例を調べ、関数の使用方法をよりよく理解するのに役立つコード例を示します。 Python の print 関数は、テキストと変数の値を出力するために使用される組み込み関数です。その構文は非常に単純です。ただ必要なのは、

See all articles