Python

列举布尔值为 False 的常见值
1 | 0,[],(),{},'',False,None |
is 和 == 的区别
is 比较的是两个对象的内存地址,== 比较的是两个对象的值
现有字典 dict 请按字典中的 value 值进行排序
1 | sorted(dict.items(), key=lambda x:x[1]) |
请反转字符串 aStr
1 | print('aStr'[::-1]) |
请按 list1 中元素的 age 由大到小排序
1 | list1 = [{'name': 'a', 'age': 20}, {'name': 'b', 'age': 13}] |
常用的字符串格式化哪几种
1 | s1 = "%s dadada"%name # 占位符 |
下面代码的输出结果将是什么
1 | list = ['a', 'b', 'c'] |
写一个列表生成式,产生一个公差为11的等差数列
1 | [x*11 for x in range(10)] |
给定两个列表,怎么找出他们相同的元素和不同的元素
1 | list1 = [1,2,3] |
请写出一段 Python 代码实现删除一个 list 里面的重复元素
1 | li = ['b', 'a', 'f', 'f', 'k', 'b'] |
列举字符串,列表,元组,字典每个常用的五种方法
字符串:replace,strip,split,reverse,upper,lower,join …..
列表:append,remove,pop,insert,index,sort,count …..
元组:index,count,len(),dir()
字典:get,key,values,pop,popitems,clear,update,items …..
什么是反射?以及应用场景
反射是指在程序运行时动态的获取一个对象的信息以及操作对象的能力。在python中,反射可以通过内置函数 getattr(),hasattr(),setattr() 和 delattr() 来实现。这些函数可以让我们在运行时获取对象的属性和方法,或者动态的设置对象的属性和方法。它使得我们可以更加灵活的编写代码,动态的创建和操作对象,提高了代码的可扩展性和可维护性
简述 Python 的深浅拷贝
copy():浅拷贝,指创建一个新的对象,但是这个新对象只是原始对象的一个副本,其中包含了原始对象中的所有元素的引用。这意味着,如果你修改了原始对象的一个元素,那么这个元素也会被修改,因为它们共享同一个引用
deepcopy():深拷贝,指创建一个新的对象,这个新对象包含了原始对象中所有元素的副本。这意味着,如果你修改了原始对象中的元素,新对象并不会被修改,因为它们不再共享一个引用
Python 垃圾回收机制
引用计数
- 每个对象都有一个引用计数器,当对象被引用时,计数器+1,当对象不再被引用时,计数器-1。当计数器为0时,对象被认为是垃圾,将自动回收这些垃圾对象的内存
优点:简单直观,实时
缺点:维护引用计数需要消耗一定的资源。循环引用时,无法回收。
标记-清除
- 不改动真实的引用计数,而是将集合中对象的引用计数复制一份副本,改动该对象引用的副本。对于副本做的任何改动都不会影响到对象生命周期的维护
分代回收
- 将系统中的所有内存块根据其存活时间划分为不同的集合。没一个集合就成为一个’代’,垃圾收集的频率随着’代’的存活时间的增大而减小。也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。
如何打乱一个排好序的 list 对象 alist
1 | import random |
从 0-99 这 100 个数中随机取出 10 个,要求不能重复,可以自己设计数据结构
1 | print([x*x for x in range(1,11)]) |
介绍一下 try except 的用法和作用
try except 是 python 中的异常处理机制,用于在程序运行时捕获并处理异常。当程序运行时遇到错误或异常时,如果没有进行异常处理,程序将会崩溃并抛出错误信息。使用 try except 可以使程序在遇到异常时不会崩溃,而是执行指定的异常处理代码
1 | try: |
在 python 中如何抛出,捕获,处理异常
1 | raise Exception # 抛出异常 |
python 递归的最大层数
最大层数为 998
列表推导式和生成器表达式的区别
列表推导式和生成器表达式都可以用来生成一个新的列表,但是他们的输出结果不同。
列表推导式会立即生成一个新的列表,而生成器表达式则是在需要时才生成一个新的元素。这意味着生成器表达式可以更高效的处理大量数据,因为它不需要一次性生成整个列表。
1 | print([i % 2 for i in range(10)]) # 列表推导式直接输出 |
什么是闭包
闭包是指一个函数可以访问并操作其外部函数作用域中的变量,即使该外部函数已经返回。这是通过在内部函数中创建对外部函数作用域中变量的引用来实现的。这种引用使得外部函数的变量在内部函数中仍然可用,即使外部函数已经完成执行并且其作用域已经销毁。
在 python 中,闭包通常用于创建函数工厂,即返回另一个函数的函数。这种函数可以访问其外部函数的变量,并且每次调用该函数时,它都会创建一个新的闭包,其中包含对外部函数作用域的新引用
1 | # 函数内参数不会因为外部变量值发生改变而改变 |
请实现一个装饰器,限制该函数被调用的频率,如 10 秒一次
1 | import time |
python 函数调用的时候参数的传递方式是值传递还是引用传递
python 的参数传递有:位置参数,可变参数,关键字参数
函数的传值是值传递还是引用传递,要分情况
不可变参数用值传递
- 像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因此在函数内部修改这个值并不会影响到原来的值
可变参数用引用传递
- 可变参数在传递至只是传递了一个指向元对象的引用,因此在函数内部修改这个对象会影响到原来的值
递归函数停止的条件
一般是定义在递归函数内部,在递归调用前要做一个条件判断,根据条件判断的结果选择是否继续调用自身,还是终止
MRO 是什么
MRO 是 python 中的方法解析顺序,它决定了在多重继承中的方法调用顺序。python 使用 C3 线性化算法来计算 MRO
C3 算法是什么
C3 算法是为了解决原来基于深度优先搜索算法不满足本地优先级,和单调性问题。它是一种启发式搜索算法,可以用于解决许多优化问题,如路劲规划和调度问题。C3 算法的核心是将搜索空间分解为多个子空间,并在每个子空间中使用深度优先搜索算法。在搜索过程中,C3 算法会根据当前搜索状态的本地优先级和单调性来选择下一个搜索状态,以尽可能快的找到最优解
本地优先级:指声明时父类的顺序,比如 C(A, B),如果访问 C 类对象属性时,应该根据声明顺序,优先查找 A 类,然后再查找 B 类
单调性:如果在 C 的解析顺序中,A 排在 B 的前面,那么在 C 的所有子类里,也必须满足这个顺序
- 标题: Python
- 作者: IntYou
- 创建于: 2023-04-28 21:49:29
- 更新于: 2023-04-29 13:03:50
- 链接: https://intyou.netlify.app/2023/04/28/Python/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。