o 1. 解释一下 Python 中 pass 语句的作用?
o 2. 简述你对 input()函数的理解
o 3. Python 中的 is 和==
o 4. Python 中的作用域
o 5. 三元运算写法和应用场景?
o 6. 了解 enumerate 么?
o 7. 列举 5 个 Python 中的标准模块
o 8. 如何在函数中设置一个全局变量
o 9. pathlib 的用法举例
o 10. Python 中的异常处理,写一个简单的应用场景
o 11. Python 中递归的最大次数,那如何突破呢?
o 12. 什么是面向对象的 mro
o 13. isinstance 作用以及应用场景?
o 14. 什么是断言?应用场景?
o 15. lambda 表达式格式以及应用场景?
o 16. 新式类和旧式类的区别
o 17. dir()是干什么用的?
o 18. 一个包里有三个模块,demo1.py、demo2.py、demo3.py,但使用 from tools import * 导入模块时,如何保证只有 demo1、demo3 被导入了。
o 19. 列举 5 个 Python 中的异常类型以及其含义
o 20. copy 和 deepcopy 的区别是什么?
o 21. 代码中经常遇到的*args, **kwargs 含义及用法。
o 22. Python 中会有函数或成员变量包含单下划线前缀和结尾,和双下划线前缀结尾,区别是什么?
o 23. w、a+、wb 文件写入模式的区别
o 24. 举例 sort 和 sorted 的区别
o 25. 什么是负索引?
o 26. pprint 模块是干什么的?
o 27. 解释一下 Python 中的赋值运算符
o 28. 解释一下 Python 中的逻辑运算符
o 29. 讲讲 Python 中的位运算符
o 30. 在 Python 中如何使用多进制数字?
o 31. 怎样声明多个变量并赋值?
1.解释一下 Python 中 pass 语句的作用?
答:pass 实际上就是一个占位符,在写一个函数但是不确定里面写啥的时候,这个时候可以使用 pass。示例如下
def foo():
pass
2.简述你对 input()函数的理解
答:
在 Python3 中 input 函数可以接收用户输入的字符串。
然后根据程序的需要转换成所需格式即可。
3.Python 中的 is 和==
答:
==的作用是判断两个对象的值是否相同,is 表示的谁是谁,这也就意味着对象完全相等。我们知道一个对象有各自的内存地址和对应的值,当内存地址和值都相同的时候使用 is 可以得到结果 True。另外需要注意的下面两点特殊的情况。
这些变量很可能在许多程序中使用。 通过池化这些对象,Python 可以防止对一致使用的对象进行内存分配调用。
1)介于数字-5 和 256 之间的整数
2)字符串仅包含字母、数字或下划线
4.Python 中的作用域
答:
Python 中,一个变量的作用域总是由在代码中被赋值的地方所决定
当 Python 遇到一个变量的话它会按照这的顺序进行搜索
本地作用域(Local)—>当前作用域被嵌入的本地作用域(Enclosing locals)—>全局/模块作
5.三元运算写法和应用场景?
答:
Python 中的三元运算又称三目运算,是对简单的条件语句的简写。 是一种比较 Pythonic 的学法,形式为:val = 1 if 条件成立 else 2 代码示例如下:
a = 2
b = 5
# 普通写法
if a > b:
val = True
else:
val = False
# 改为三元运算符后
val = a if a > b else b
print(val) # 5
6.了解 enumerate 么?
答:
enumerate 可以在迭代一个对象的时候,同时获取当前对象的索引和值。 代码示例如下
from string import ascii_lowercase
s = ascii_lowercase
for index, value in enumerate(s):
print(index, value)
7.列举 5 个 Python 中的标准模块
答:
pathlib:路径操作模块,比 os 模块拼接方便。
urllib:网络请求模块,包括对 url 的结构解析。
asyncio: Python 的异步库,基于事件循环的协程模块。
re:正则表达式模块。
itertools:提供了操作生成器的一些模块。
8.如何在函数中设置一个全局变量
答:
通过使用 global 对全局变量进行修改。
n = 0
def foo():
global n
n = 100
foo()
print(n)
x = 0
9.pathlib 的用法举例
答:
pathlib 可以对文件以及文件的其他属性进行操作。比较喜欢的一点是路径拼接符"/"的使用。
10.Python 中的异常处理,写一个简单的应用场景
答:
比如在计算除法中出现为 0 的情况出现异常
try:
1 / 0
except ZeroDivisionError as e:
print(e.args)
11.Python 中递归的最大次数,那如何突破呢?
答:
Python 有递归次数限制,默认最大次数为 1000。通过下面的代码可以突破这个限制
import sys
sys.setrecursionlimit(1500) # set the maximum depth as 1500
另外需要注意的是 sys.setrecursionlimit() 只是修改解释器在解释时允许的最大递归次数,此外,限制最大递归次数的还和操作系统有关。
12.什么是面向对象的 mro
答:
Python 是支持面向对象编程的,同时也是支持多重继承的。一般我们通过调用类对象的 mro()方法获取其继承关系。
13.isinstance 作用以及应用场景?
答:
isinstance 是判断一个对象是否为另一个对象的子类的,例如我们知道在 Python3 中 bool 类型其实是 int 的子类,所以我们可以对其检测。
print(isinstance(True,int))
14.什么是断言?应用场景?
答:
在 Python 中是断言语句 assert 实现此功能,一般在表达式为 True 的情况下,程序才能通过。
#assert()方法,断言成功,则程序继续执行,断言失败,则程序报错
# 断言能够帮助别人或未来的你理解代码,
# 找出程序中逻辑不对的地方。一方面,
# 断言会提醒你某个对象应该处于何种状态,
# 另一方面,如果某个时候断言为假,
# 会抛出 AssertionError 异常,很有可能终止程序。
def foo(a):
assert a==2,Exception("不等于 2")
print("ok",a)
if __name__ == '__main__':
foo(1)
15.lambda 表达式格式以及应用场景?
答:
lambda 表达式其实就是一个匿名函数,在函数编程中经常作为参数使用。 例子如下
a = [('a',1),('b',2),('c',3),('d',4)]
a_1 = list(map(lambda x:x[0],a))
16.新式类和旧式类的区别
答:
Python 2.x 中默认都是经典类,只有显式继承了 object 才是新式类,Python 3.x 中默认都是新式类,经典类被移除,不必显式的继承 object。 新式类都从 object 继承,经典类不需要。 新式类的 MRO(method resolution order 基类搜索顺序)算法采用 C3 算法广度优先搜索,而旧式类的 MRO 算法是采用深度优先搜索。 新式类相同父类只执行一次构造函数,经典类重复执行多次。
17.dir()是干什么用的?
答:
当在使用某一个对象不知道有哪些属性或者方法可以使用时,此时可以通过 dir() 方法进行查看。
18.一个包里有三个模块,demo1.py、demo2.py、demo3.py,但使用 from tools import *导入模块时,如何保证只有 demo1、demo3 被导入了。
答:
增加_init_.py 文件,并在文件中增加:
__all__ = ['demo1','demo3']
19.列举 5 个 Python 中的异常类型以及其含义
AttributeError
对象没有这个属性
NotImplementedError
尚未实现的方法
StopIteration
迭代器没有更多的值
TypeError
对类型无效的操作
IndentationError
缩进错误
20.copy 和 deepcopy 的区别是什么?
答:
copy.copy()浅拷贝,只拷贝父对象,不会拷贝对象的内部的子对象。 copy.deepcopy()深拷贝,拷贝对象及其子对象。
21.代码中经常遇到的*args, * *kwargs 含义及用法。
答:
在函数定义中使用 *args 和**kwargs 传递可变长参数。 *args 用来将参数打包成 tuple 给函数体调用。 **kwargs 打包关键字参数成 dict 给函数体调用。
22.Python 中会有函数或成员变量包含单下划线前缀和结尾,和双下划线前缀结尾,区别是什么?
答:
“单下划线” 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量; “双下划线” 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入;以双下划线开头的(__foo)代表类的私有成员;
以双下划线开头和结尾的(_foo)代表 Python 里特殊方法专用的标识,如 _init()代表类的构造函数。
代码示例
class Person:
"""docstring for ClassName"""
def __init__(self):
self.__age = 12
self._sex = 12
def _sex(self):
return "男"
def set_age(self,age):
self.__age = age
def get_age(self):
return self.__age
if __name__ == '__main__':
p=Person()
print(p._sex)
#print(p.__age)
#Python 自动将__age 解释成 _Person__age,于是我们用 _Person__age 访问,这次成功。
print(p._Person__age)
23.w、a+、wb 文件写入模式的区别
答:
w 表示写模式支持写入字符串,如果文件存在则覆盖。 a+ 和 w 的功能类型不过如果文件存在的话内容不会覆盖而是追加。 wb 是写入二进制字节类型的数据。
24.举例 sort 和 sorted 的区别
答:
相同之处 sort 和 sorted 都可以对列表元素排序,sort() 与 sorted() 的不同在于,sort 是在原位重新排列列表,而 sorted() 是产生一个新的列表。 sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
25.什么是负索引?
答:
负索引一般表示的是从后面取元素。
26.pprint 模块是干什么的?
答:
pprint 是 print 函数的美化版,可以通过 import pprint 导入。示例如下
import pprint
pprint.pprint("this is pprint")
27.解释一下 Python 中的赋值运算符
答:
通过下面的代码列举出所有的赋值运算符
a=7
a+=1
print(a)
a-=1
print(a)
a*=2
print(a)
a/=2
print(a)
a**=2
print(a)
a//=3
print(a)
a%=4
print(a)
28.解释一下 Python 中的逻辑运算符
答:
Python 中有三个逻辑运算符:and、or、not
print(False and True) #False
print(7<7 or True) #True
print(not 2==2) #False
29.讲讲 Python 中的位运算符
答:按位运算符是把数字看作二进制来进行计算的。Python 中的按位运算法则如下:
下表中变量 a 为 60,b 为 13,二进制格式如下:
a = 0011 1100
b = 0000 1101
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
30.在 Python 中如何使用多进制数字?
答:
我们在 Python 中,除十进制外还可以使用二进制、八进制和十六进制
二进制数字由 0 和 1 组成,我们使用 0b 或 0B 前缀表示二进制数
print(int(0b1010))#10
使用 bin()函数将一个数字转换为它的二进制形式
print(bin(0xf))#0b1111
八进制数由数字 0-7 组成,用前缀 0o 或 0O 表示 8 进制数
print(oct(8))#0o10
十六进数由数字 0-15 组成,用前缀 0x 或者 0X 表示 16 进制数
print(hex(16))#0x10
print(hex(15))#0xf
32.怎样声明多个变量并赋值?
答:
Python 是支持多个变量赋值的,代码示例如下
#对变量 a,b,c 声明并赋值
a,b,c = 1,2,3