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>
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 [] >>>

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>

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

使用Java的StringBuilder.append()函數拼接字串在Java程式設計中,字串的拼接是非常常見的操作。為了有效率地拼接字串,Java提供了StringBuilder類,其中的append()函數可以快速地將多個字串連接在一起。 StringBuilder是一個可變的字元序列,使用起來比String類別更有效率。當我們需要拼接大量字串時,使用

在Python中,append()是列表物件的一個方法,用於在列表末尾添加一個元素。需要注意的是,append()方法只能用於列表對象,不能用於其他類型的對象。此外,append()方法會直接修改原始列表,而不會傳回一個新的列表。

append是一個常用的命令列工具,用於將一個檔案的內容追加到另一個檔案的末端。 append指令的用法為“append [選項] 原始檔 目標文件”,其中,原始檔是要追加的文件,目標文件是要被追加的文件。

Java中如何使用StringBuilder類別的append()方法來拼接字串在Java中,拼接字串是一項常見的操作。在拼接過程中,如果使用基本的String類別來進行字串相加,會導致頻繁的創建新的String對象,從而影響效能。為了解決這個問題,Java提供了StringBuilder類別來進行字串的拼接操作。 StringBuilder類別是Java中一

Java文件解讀:StringBuilder類別的append()方法詳細介紹Java提供了StringBuilder類別作為一種可變的字串類型,該類別提供了一系列方法來操作字串,其中最常用的方法之一就是append( )方法。本文將對StringBuilder類別的append()方法進行詳細介紹,並附上具體的程式碼範例。 StringBuilder類別是在Java

printscreen鍵在鍵盤裝置的方向鍵上,有「prtsc sysrq」字樣,位於f12的右側。如果沒有“prtsc sysrq”字樣的按鍵,可找到“fn”和“insert(prt sc)”,先點選“fn”,再點選‘insert(PRT sc)’實作printscreen截圖功能。

Python是一種簡單易學的高階程式語言,廣泛用於資料分析、人工智慧、Web開發等領域。在Python中,print是一個常用的函數,用於在螢幕上輸出結果或偵錯資訊。本文將詳細介紹print函數的用法,並提供具體的程式碼範例幫助讀者更好地掌握。首先,print函數可以接受多個參數,並將它們列印到螢幕上。這些參數可以是字串、整數、浮點數等,甚至可以是變數、

Python是一種流行的程式語言,旨在使電腦程式設計變得更加簡單和易於理解。在Python中,用print函數向控制台輸出文字是一個基本的任務。在本文中,我們將介紹Python的print函數,探索其功能和使用範例,並提供程式碼範例來幫助您更好地了解如何使用該函數。 Python的print函數是一個內建的函數,用來輸出文字和變數的值。它的語法非常簡單。您只需將要
