1. Python 里面如何實現 tuple 和 list 的轉換?
答:
Python 中的類型轉換,一般通過類型強轉即可完成
tuple 轉 list 使用 list() 方法
list 轉 tuple 使用 tuple() 方法
2. 我們知道對于列表可以使用切片操作進行部分元素的選擇,那么如何對生成器類型的對象實現相同的功能呢?
答: 這個題目考察了 Python 標準庫的 itertools 模快的掌握情況,該模塊提供了操作生成器的一些方法。 對于生成器類型我們使用 islice 方法來實現切片的功能。例子如下
from itertools import islice
gen = iter(range(10))
#iter()函數用來生成迭代器,
# 第一個參數是迭代器,第二個參數起始索引,第三個參數結束索引,不支持負數索引
for i in islice(gen,0,4):print(gen)print(i)
運行結果:
<range_iterator object at 0x00000000021484F0>
0
<range_iterator object at 0x00000000021484F0>
1
<range_iterator object at 0x00000000021484F0>
2
<range_iterator object at 0x00000000021484F0>
3
相關鏈接
3. 請將 [i for i in range(3)] 改成生成器
答:
通過把列表生產式的中括號,改為小括號我們就實現了生產器的功能即,
a = (i for i in range(3))
print(a)
運行結果:
<generator object <genexpr> at 0x00000184F7962ED0>
關于生成器的詳細資料,請參考博客:生成器
4. a=“hello” 和 b=“你好” 編碼成 bytes 類型
答: 這個題目一共三種方式,第一種是在字符串的前面加一個 b,第二種可以使用 bytes 方法,第三種使用字符串 encode 方法。具體代碼如下,abc 代表三種情況
a = b"hello"
b = bytes("你好", "utf-8")
c = "你好".encode("utf-8")
print(a, b, c)
運行結果:
b'hello' b'\xe4\xbd\xa0\xe5\xa5\xbd' b'\xe4\xbd\xa0\xe5\xa5\xbd'
5. 下面的代碼輸出結果是什么?
a = (1,2,3,[4,5,6,7],8)
a[2] = 2
答: 我們知道元組里的元素是不能改變的所以這個題目的答案是出現異常。
6. 下面的代碼輸出的結果是什么?
a = (1,2,3,[4,5,6,7],8)
a[3][0] = 2
答:元組的里元素是不能改變的,這句話嚴格來說是不準確的,如果元組里面元素本身就是可變類型,比如列表,那么在操作這個元素里的對象時,其內存地址也是不變的。a[3] 對應的元素是列表,然后對列表第一個元素賦值,所以最后的結果是: (1,2,3,[2,5,6,7],8)
7. response.text和response.content的區別:
- response.content:這個是直接從網絡上面抓取的數據。沒有經過任何解碼。所以是一個bytes類型。其實在硬盤上和在網絡上傳輸的字符串都是bytes類型。
- response.text:這個是str的數據類型,是requests庫將response.content進行解碼的字符串。解碼需要指定一個編碼方式,requests會根據自己的猜測來判斷編碼的方式。所以有時候可能會猜測錯誤,就會導致解碼產生亂碼。這時候就應該使用
response.content.decode('utf-8')
進行手動解碼。