1. 程式人生 > >def f(x,l=[]): for i in range(x): l.append(i*i) print l

def f(x,l=[]): for i in range(x): l.append(i*i) print l

下面程式碼會輸出什麼:

def f(x,l=[]):
    for i in range(x):
        l.append(i*i)
    print l
f(2)
f(3,[3,2,1])
f(3)

答案:

[0, 1]
[3, 2, 1, 0, 1, 4]
[0, 1, 0, 1, 4]

呃?

第一個函式呼叫十分明顯,for迴圈先後將0和1新增至了空列表l中。l是變數的名字,指向記憶體中儲存的一個列表。第二個函式呼叫在一塊新的記憶體中建立了新的列表。l這時指向了新生成的列表。之後再往新列表中新增0、1、2和4。很棒吧。第三個函式呼叫的結果就有些奇怪了。它使用了之前記憶體地址中儲存的舊列表。這就是為什麼它的前兩個元素是0和1了。

執行下面的程式碼看看:

def f(x,l=[]):
    print id(l)
    for i in range(x):
        l.append(i*i)
    print id(l)
    print '#########'

f(2)
f(3,[3,2,1])
f(3)

結果為:

39443912
39443912
#########
39993928
39993928
#########
39443912
39443912
#########
不明白的話就試著執行下面的程式碼吧:

l_mem = []

l = l_mem           # the first call
for i in range(2): l.append(i*i) print l # [0, 1] l = [3,2,1] # the second call for i in range(3): l.append(i*i) print l # [3, 2, 1, 0, 1, 4] l = l_mem # the third call for i in range(3): l.append(i*i) print l # [0, 1, 0, 1, 4]

相關推薦

def f(x,l=[]): for i in range(x): l.append(i*i) print l

下面程式碼會輸出什麼: def f(x,l=[]): for i in range(x): l.append(i*i) print l f(2) f(3,[3,2,1]) f(3) 答案: [0, 1] [3,

[lambda x: x*i for i in range(4)] 詳細解析+LEGB規則 閉包原理

轉自:http://www.cnblogs.com/shiqi17/p/9608195.html 一、問題描述 fun = [lambda x: x*i for i in range(4)] for item in fun: print(item(1)) 上述式子的

numpy array和 list 的相互轉化,和 [np.where(x == i)[0] for i in range(10)] 的意思

1.list 轉 numpy array a = [0,2,3,2,1,2,4,5,6,7,8,6,5,4,3,2,7,8,9,6,5,7,8,9,6,9,1,2,2,5,6,8,8,9,7,0] x = np.array(a) print(x)  2. numpy arr

python for i in range()的使用

for i in range(5): print(i) 輸出:0,1,2,3,4 預設從0開始   for i in range(1,5): print(i) 輸出:1,2,3,4 指定從1開始   for i in rang

python語法 3 for迴圈 (for i in range (0,10,3): #只打印0到9這10個數中能被3整除的數)

# -*- coding:utf-8 -*- # -Author: Paulliam - for i in range (10): print("loop",i) print("------------------------") for i in range (

[i for i in range(0,5) if i>2] - Python的for迴圈的另一種方式

廢話少說直接上程式碼: a = [i for i in range(0,5) if i>2] b = [] for i in range(0,5): if i>2: b.append(i) print('大佬迴圈',a) print('普通for迴圈',b)

fs = [(lambda n, i=i : i + n) for i in range(10)]

看Python中的lambda表示式,不免有很多人對一些文章中的這句不能理解。 相關連結 參考 我也困惑了一下,這裡是我對它的理解。 >>>[a for a in rang

Python在方括號中使用for迴圈,類似[0 for i in range(10)],叫 列表解析List Comprehensions

作者博文地址:https://www.cnblogs.com/liu-shuai/列表解析  根據已有列表,高效建立新列表的方式。  列表解析是Python迭代機制的一種應用,它常用於實現建立新的列表,因此用在[]中。語法:  [expression for iter_val in iterable]  [e

【Python】for i in range ()作用

for i in range ()作用: range()是一個函式, for i in range () 就是給i賦值: 比如 for i in range (1,3): 就是把1,2依次賦值給i

關於python3.6.3 與python2.7.14使用for循環便利時遇到in range(變量)時錯誤

變量 span 發現 顯示 pri 3.6 obj inpu range 1. number = input("Enter a numbers: ")2. product = 13. for i in range(number):4. product = prod

US judge 'optimi iot L?sungen stic' for deal in VW case

www.inhandnetworks.de A US federal judge overseeing thOpenVPN Industrie Routere Volkswagen emissions scandal said Friday he is optimistic about re

for(let i in data){}

timeout con http time function div pan pre png let obj={o:"o",o1:"o1"}; for(let i in obj){ setTimeout(function(){ console.log(i); })

python 中【example[I] for example in dataset】的理解

在機器學習中遇到下面兩個語句,想了半天,也看了一些其他博主文章後自己的總結: featList = [example[i] for example in dataSet] 1 classList = [example[-1] for example in dataSet]

為什麼 python3 執行 x in range(100000000001) 如此快?

在 Python 中,表示式 1000000000000000 in range(1000000000000001) 的執行速度能有多快? 判斷一個元素 x 是否存在於集合 y 中最簡單粗暴地方法就是迭代,每次取出一個值與之比較,如果集合中存在一個值 z 等於 x就返回 true ,它的時間

python 中【example[I] for example in dataset】的理解

在機器學習中遇到下面兩個語句,想了半天,也看了一些其他博主文章後自己的總結: featList = [example[i] for example in dataSet] 1 classList = [example[-1] for example in dataSet]

How do I enable IP-forwarding in MacOS X?

解法是: You’re doing two things there. Enabling IP forwarding. The OS X equivalent might be: sysctl -w net.inet.ip.forwarding=1 …but since I don’t know ex

Ask HN: I would pay X for Y

For example:I would pay $10 every 3 months for a highlevel review/changelog of the top Javascript frameworks.I would pay $1/month for book suggestions rela

for I in [] or [1,2,3] 這種用法你肯定沒見過吧

1. [] or [1,2,3] for i in [] or [1,2,3]: print(i) 將會輸出1,2,3 2.[1,2,3] or [] for i in [1,2,3] or [] print(i) 將會輸出1,2,3 3.[1

Xposed Framework for Android 8.x Oreo is released (in beta)

Want to modify the behavior of your Android device without going through the trouble of replacing the operating system with a custom ROM? Xposed Framework

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-3: ordinal not in range(256)

clas mysq mic swd pass pan 天使 -1 root 今天使用MySQLdb往MySQL插入中文數據遇到一個異常: UnicodeEncodeError: ‘latin-1‘ codec can‘t encode characters in posit