选中答案文字显示答案。
注释
- 行注释
- 块注释
运算符
-
除、整除(地板除)、幂
-
与、或、非
-
可以用连续比较运算符,如
100 >= source >= 90
-
三元运算符:
x if x < y else y
-
其他运算符:
操作符 名称 示例 in
存在 'A' in ['A', 'B', 'C']
not in
不存在 'h' not in ['A', 'B', 'C']
is
是 "hello" is "hello"
is not
不是 "hello" is not "hello"
注意:
- is, is not 对比的是两个变量的内存地址
- ==, != 对比的是两个变量的值
- 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
- 对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。
数据类型与转换
- python里的数据类型都是对象?
- 使用
dir()
查看对象的属性和方法 - 使用
type()
查看变量的数据类型,isinstance()
判断变量是不是某类型type()
不会认为子类是一种父类类型,不考虑继承关系。isinstance()
会认为子类是一种父类类型,考虑继承关系。
- python包是对象吗?
- decimal包与Decimal对象
- 使用Decimal构造函数构造固定精度的小数
- 使用
decimal.getcontext()
查看Decimal对象的信息,decimal.getcontext().prec
存储了Decimal小数当前的精度
- 布尔型
- 除了直接给变量赋值
True
和False
,还可以用bool(X)
来创建变量,其中X
可以是- 基本类型:整型、浮点型、布尔型
- 容器类型:字符串、元组、列表、字典和集合
bool
作用在基本类型变量:X
只要不是整型0
、浮点型0.0
,bool(X)
就是True
,其余就是False
;bool
作用在容器类型变量:X
只要不是空的变量,bool(X)
就是True
,其余就是False
。
- 除了直接给变量赋值
- 类型转换
- 转换为整型
int(x, base=10)
- 转换为字符串
str(object='')
- 转换为浮点型
float(x)
- 转换为整型
Built-in Functions
print()函数
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
- 将对象以字符串表示的方式格式化输出到流文件对象file里。其中所有非关键字参数都按
str()
方式进行转换为字符串输出; - 关键字参数
sep
是实现分隔符,比如多个参数输出时想要输出中间的分隔字符; - 关键字参数
end
是输出结束时的字符,默认是换行符\n
; - 关键字参数
file
是定义流输出的文件,可以是标准的系统输出sys.stdout
,也可以重定义为别的文件; - 关键字参数
flush
是立即把内容输出到流文件,不作缓存。
range()函数
range([start,] stop[, step=1])
- 这个BIF(Built-in functions)有三个参数,其中用中括号括起来的两个表示这两个参数是可选的。
step=1
表示第三个参数的默认值是1。range
这个BIF的作用是生成一个从start
参数的值开始到stop
参数的值结束的数字序列,该序列包含start
的值但不包含stop
的值。
enumerate()函数
enumerate(sequence, [start=0])
- sequence:一个序列、迭代器或其他支持迭代对象。
- start:下标起始位置。
- 返回 enumerate(枚举) 对象
- 用
enumerate(A)
不仅返回了A
中的元素,还顺便给该元素一个索引值 (默认从 0 开始)。此外,用enumerate(A, j)
还可以确定索引起始值为j
。
sorted()函数
sorted(iterable, key = None, reverse = False)
- 对iterable按key升序排序,若reverse为
True
则降序
位运算
- 用
>>
快速除以2适用于负奇数吗? - 如何用位运算^快速交换2个整数?
- 如何快速获取最后为1位置的整数?
- 如何利用位运算实现整数集合?
- 如何输出整数在计算机内的存储编码?比如如何输出-3的补码?
简单语句
assert关键词
assert
这个关键词我们称之为“断言”,当这个关键词后边的条件为 False 时,程序自动崩溃并抛出AssertionError
的异常。
pass语句
循环语句
- while-else循环
- for循环与C++有何不同?
字符串
推导式
列表推导式
元组推导式
字典推导式
集合推导式
其他
next(iterator[, default])
Return the next item from the iterator. If default is given and the iterator is exhausted, it is returned instead of raising StopIteration.
异常处理
- 如果异常不与任何except匹配,程序会如何处理?
- 如果异常与多个except匹配,程序会如何执行?
- 父类与子类异常谁应该先except?
- try - except - finally语句如果没有任何except能截获异常,finally语句会执行吗?
- try - except - else语句可不可以没有except?
- 为什么不建议except后不带具体的异常类型?
- raise语句
全局变量与局部变量
如何在函数中使用已定义的全局变量?
使用global
声明该变量即可使用。若作用域内没有任何与其同名的变量,则无需global
声明。
创建二维数组
rows, cols = (5, 5)
arr = [[0]*cols]*rows
print(arr)
为什么用以上代码创建的二维数组,改变arr[0][0]
,arr[1][0]
也会跟着改变?
正确使用二维数组
如何将二进制字符串转换为二进制数
int(string, 2)
如何深拷贝list?
copy.deepcopy(object)
list类使用append函数和+操作符有什么区别?
a = [0]
b = [1]
c = a + b # c: [0, 1]
c = []
c.append(a) # c: [[0]]
a = []与a.clear()有什么区别
假设存在递归定义的函数recursion(list),函数体中不建议修改list的内容,为什么?
以下代码想通过递归实现列举一个列表所有排列的功能,基本思想是定义一个permutation
函数,该函数先从当前列表中选择一个元素,然后再对剩余列表递归调用permutation
函数,l_choose
每生成一种排列就存入coll
中。但是以下代码的实现是错误的,因为l_choose
层层传递,导致每一层递归调用都指向同一个l_choose
对象。到了最后一层时,应当将l_choose
清空以便为生成下一组排列情况腾空间,但是最后一层函数调用中l_choose = []
仅仅让这一层的l_choose
指向了空列表,之前几层的l_choose
仍然指向的是原来的对象,导致清空失败。正确实现应参考Generate all permutation of a set in Python。
def permutation(l_choose, lst, coll):
if (len(lst) == 0):
coll.append(lst)
l_choose = []
return
for i in range(len(lst)):
l_choose.append(lst[i])
l_remain = lst[:i] + lst[i+1:]
permutation(l_choose, l_remain, coll)
lst = [1, 2, 3]
coll = []
l_choose = []
permutation(l_choose, lst, coll)