目錄
回复内容:
首頁 後端開發 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 Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1269
29
C# 教程
1248
24
使用java的StringBuilder.append()函數拼接字串 使用java的StringBuilder.append()函數拼接字串 Jul 26, 2023 am 09:18 AM

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

python中append怎麼用 python中append怎麼用 Nov 14, 2023 am 10:41 AM

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

append怎麼用 append怎麼用 Oct 25, 2023 pm 03:14 PM

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

Java中如何使用StringBuilder類別的append()方法來拼接字串 Java中如何使用StringBuilder類別的append()方法來拼接字串 Jul 25, 2023 pm 03:05 PM

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

Java文件解讀:StringBuilder類別的append()方法詳細介紹 Java文件解讀:StringBuilder類別的append()方法詳細介紹 Nov 04, 2023 am 08:50 AM

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

print在鍵盤哪裡 print在鍵盤哪裡 Jun 19, 2023 am 09:37 AM

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

使用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