Python面试答案之编码规范与数据类型

9. 了解 DocStrings 么?

答:DocStrings 文档字符串是一个重要工具,用于解释文档程序,帮助你的程序文档更加简单易懂。主要是解释代码作用的。

10. 了解类型注解么?

答:PEP 484 引入了类型提示,这使得可以对 Python 代码进行静态类型检查。 在使用 Ide 的时候可以获取到参数的类型,更方便传入参数。使用格式如下
def foo(num: int) -> None:
print(f"接收到的数字是:{num}")
介绍下这个简单例子,我们可以在函数的参数部分使用参数名+:+类型,来指定参数可以接受的类型,这里的话就是 num 参数为 int 类型,然后后面->接的是返回值的类型。这里返回值为 None,然后通过 fstring 格式化字符串输出传入的数字。

11. 例举你知道 Python 对象的命名规范,例如方法或者类等

答:类:总是使用首字母大写单词串,如 MyClass。内部类可以使用额外的前导下划线。 变量:小写,由下划线连接各个单词。方法名类似 常量:常量名所有字母大写 等

13. 如何优雅的给一个函数加注释?

答:可以使用 docstring 配合类型注解

14. 如何给变量加注释?

答:可以通过变量名:类型的方式如下
a: str = “this is string type”

17. 在给 Py 文件命名的时候需要注意什么?

答:给文件命名的时候不要和标准库库的一些模块重复,比如 abc。 另外要名字要有意义,不建议数字开头或者中文命名。

18. 例举几个规范 Python 代码风格的工具

答:pylint 和 flake8

19. 列举 Python 中的基本数据类型?

答: Python3 中有六个标准的数据类型:字符串(String)、数字(Digit)、列表(List)、元组(Tuple)、集合(Sets)、字典(Dictionary)。

20. 如何区别可变数据类型和不可变数据类型

答: 从对象内存地址方向来说

  1. 可变数据类型:在内存地址不变的情况下,值可改变(列表和字典是可变类型,但是字典中的 key 值必须是不可变类型)
  2. 不可变数据类型:内存改变,值也跟着改变。(数字,字符串,布尔类型,都是不可变类型)可以通过 id() 方法进行内存地址的检测。
  3. 将字符串"ilovechina"进行反转
    答:s1 = “ilovechina”[::-1]
    print(s1)

24. Python 中的字符串格式化方式你知道哪些?

答:%s,format,fstring(Python3.6 开始才支持,现在推荐的写法)
数据类型 - 列表

33. [[1,2],[3,4],[5,6]] 一行代码展开该列表,得出 [1,2,3,4,5,6]

答:
l = [[1,2],[3,4],[5,6]]
x=[j for i in l for j in i]
print(x)

数据类型 - 字典

36. 字典操作中 del 和 pop 有什么区别

答:del 可以根据索引(元素所在位置)来删除的,没有返回值。 pop 可以根据索引弹出一个值,然后可以接收它的返回值。

37. 按照字典的内的年龄排序

d1 = [
{‘name’:‘alice’, ‘age’:38},
{‘name’:‘bob’, ‘age’:18},
{‘name’:‘Carl’, ‘age’:28},
]
答:
d1 = [
{‘name’: ‘alice’, ‘age’: 38},
{‘name’: ‘bob’, ‘age’: 18},
{‘name’: ‘Carl’, ‘age’: 28},
]

print(sorted(d1, key=lambda x:x[“age”]))

38. 请合并下面两个字典 a = {“A”:1,“B”:2},b = {“C”:3,“D”:4}

答: 合并字典方法很多,可以使用 a.update(b) 或者下面字典解包的方式
a = {“A”:1,“B”:2}
b = {“C”:3,“D”:4}
print({**a,**b})

39. 如何使用生成式的方式生成一个字典,写一段功能代码。

答:
#需求 3: 把字典的 key 和 value 值调换;
d = {‘a’:‘1’, ‘b’:‘2’}

print({v:k for k,v in d.items()})

40. 如何把元组 (“a”,“b”) 和元组 (1,2),变为字典 {“a”:1,“b”:2}

答 zip 的使用,但是最后记得把 zip 对象再转换为字典。
a = (“a”, “b”)
b = (1, 2)
print(dict(zip(a, b)))

数据类型 - 综合

41. 下列字典对象键类型不正确的是?

A:{1:0,2:0,3:0}
B:{“a”:0, “b”:0, “c”:0}
C: {(1,2):0, (2,3):0}
D: {[1,2]:0, [2,3]:0}
答:D 因为只有可 hash 的对象才能做字典的键,列表是可变类型不是可 hash 对象,所以不能用列表做为字典的键。

42. 如何交换字典 {“A”:1,“B”:2}的键和值

答:
s = {“A”:1,“B”:2}

#方法一:
dict_new = {value:key for key,value in s.items()}

方法二:

new_s= dict(zip(s.values(),s.keys()))

44. 我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?

答: 这个题目考察了 Python 标准库的 itertools 模快的掌握情况,该模块提供了操作生成器的一些方法。 对于生成器类型我们使用 islice 方法来实现切片的功能。例子如下
from itertools import islice
gen = iter(range(10)) #iter()函数用来生成迭代器
#第一个参数是迭代器,第二个参数起始索引,第三个参数结束索引,不支持负数索引
for i in islice(gen,0,4):
print(i)

45. 请将 [i for i in range(3)] 改成生成器

答:通过把列表生产式的中括号,改为小括号我们就实现了生产器的功能即,
(i for i in range(3))

你可能感兴趣的:(python)