生成器面試題之二

2022-09-06 07:54:10 字數 1329 閱讀 8242

l = 

for i in xrange(10):

print l

l = 

a =

for i in xrange(10):

a['num'] = i

print l

輸出結果

```python

# 第一段**

[, , , , , , , , , ]

[, , , , , , , , , ]

## 解答

以上兩段**的本質區別是第乙個是直接傳物件,第二個是傳物件的引用。第一段**給列表新增,是直接新增字典物件,for迴圈中每次新增的物件都是不同的;

第二段**給列表新增的是字典物件的引用(變數a指向這個字典),迴圈過程中,雖然字典物件在變,但a始終指向當前的字典物件,也就是說,先新增到列表的a和後新增到列表的a始終保持一致

## 驗證

為了驗證上述想法,在適當的位置加上列印語句

```python

# 第一段**

l =

for i in xrange(10):

print i # 每次i都不同

print id() # id不同,說明每次迴圈新增的不是同乙個字典

print l

執行結果

0

44042984

144042712

244043800

344043256

444093784

544093512

644094328

744043528

844094600

944094056

[, , , , , , , , , ]

可以看到每次的id都不同,說明新增的是不同的字典物件

```python

040199032

140199032

240199032

340199032

440199032

540199032

640199032

740199032

840199032

940199032

[, , , , , , , , , ]

每次的id都相同,說明新增到列表的是同乙個引用,所以列表裡的10個值必然是相同的

## 小結

有幾點需要注意

- 生成器只有在使用時才取值

- 搞清楚傳的是物件還是物件的引用

面試題 等概率生成器

問題一 已知一隨機發生器,產生0的概率是p,產生1的概率是1 p,現在要你構造乙個發生器,使得它構造0和1的概率均為1 2 構造乙個發生器,使得它構造1 2 3的概率均為1 3 構造乙個發生器,使得它構造1 2 3 n的概率均為1 n,要求複雜度最低。解決方法 原始的隨機數生成器,生成0 的概率為p...

Python面試題之Python生成器

首先說明一下生成器也是迭代器,也有迭代器的那些優點。那為什麼要生成器呢?因為到目前為止都 不是你寫的迭代器,都是別人定義好的。那如何自己去造乙個迭代器呢?下面的內容就會給你答案。想要自己造乙個迭代器,我們可以根據迭代器的特徵 只要乙個物件有 iter 和 next 方法那它就是迭代器 自己定義乙個類...

面試題之二

static全域性變數與普通的全域性變數有什麼區別?static區域性變數和普通的區域性變數有什麼區別?static函式與普通的函式有什麼區別?1 全域性變數 外部變數 的書名之前再冠以static就構成了靜態的全域性變數.全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式.這兩者在...