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')
进行手动解码。