Python学习笔记

选中答案文字显示答案。

注释

  1. 行注释
  2. 块注释

运算符

  1. 除、整除(地板除)、幂

  2. 与、或、非

  3. 可以用连续比较运算符,如100 >= source >= 90

  4. 三元运算符:x if x < y else y

  5. 其他运算符:

    操作符名称示例
    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等),则两者是有区别的。

数据类型与转换

  1. python里的数据类型都是对象?
  2. 使用dir()查看对象的属性和方法
  3. 使用type()查看变量的数据类型,isinstance()判断变量是不是某类型
    • type() 不会认为子类是一种父类类型,不考虑继承关系。
    • isinstance() 会认为子类是一种父类类型,考虑继承关系。
  4. python包是对象吗?
  5. decimal包与Decimal对象
    1. 使用Decimal构造函数构造固定精度的小数
    2. 使用decimal.getcontext()查看Decimal对象的信息,decimal.getcontext().prec存储了Decimal小数当前的精度
  6. 布尔型
    1. 除了直接给变量赋值 TrueFalse,还可以用 bool(X) 来创建变量,其中 X 可以是
      • 基本类型:整型、浮点型、布尔型
      • 容器类型:字符串、元组、列表、字典和集合
    2. bool 作用在基本类型变量:X 只要不是整型 0、浮点型 0.0bool(X) 就是 True,其余就是 Falsebool 作用在容器类型变量:X 只要不是空的变量,bool(X) 就是 True,其余就是 False
  7. 类型转换
    • 转换为整型 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则降序

位运算

  1. >>快速除以2适用于负奇数吗?
  2. 如何用位运算^快速交换2个整数?
  3. 如何快速获取最后为1位置的整数?
  4. 如何利用位运算实现整数集合?
  5. 如何输出整数在计算机内的存储编码?比如如何输出-3的补码?

简单语句

assert关键词

  • assert这个关键词我们称之为“断言”,当这个关键词后边的条件为 False 时,程序自动崩溃并抛出AssertionError的异常。

pass语句

循环语句

  1. while-else循环
  2. 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.

异常处理

  1. 如果异常不与任何except匹配,程序会如何处理?
  2. 如果异常与多个except匹配,程序会如何执行?
  3. 父类与子类异常谁应该先except?
  4. try - except - finally语句如果没有任何except能截获异常,finally语句会执行吗?
  5. try - except - else语句可不可以没有except?
  6. 为什么不建议except后不带具体的异常类型?
  7. 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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值