python相关知识点

1. enumerate用于将可迭代对象拆包成元组

比如list、dic、range

复制代码
list = [0,1,2,3]  
dic = {'a':1,'b':2,'c':3} for a in enumerate(list):   print(a) # 输出为 (0,0) (1,1) (2,2) (3,3)
for a in enumerate(dic):
  print(a)
# 输出为 (0,'a') (1,'c') (2,'f') 这就与键值无关了
复制代码

2.  is 表示两个对象之间地址是否相同,==表示两个对象里的数据是否相同

3.  赋值 =   浅拷贝 copy   深拷贝 deepcopy

  • 赋值相当于把对象的地址赋给变量,没有生成新的对象     id不变
  • 浅拷贝相当于对原对象打上新标签,仅拷贝对象本身,不会对对象中的子对象进行拷贝,浅拷贝没有生成新的对象  id改变
  • 深拷贝是真正意义上的复制,会新开辟一块空间,生成新的对象  id改变

对于不可变类型,如元组、数值、字符串等,怎么拷贝id都不变,且修改原对象,拷贝的对象内容不改变,因为原对象修改后地址变了,但拷贝对象地址还是原先的

 4. python的内存管理机制

python不需要像c、c++语言需要手动释放内存,会自动进行垃圾回收

这样的优点是不需要手动释放、不会出现内存泄漏、空指针等问题

     缺点是垃圾回收机制是作为一个线程存在的,需要占用资源,且不具有实时性,什么时候调用是不确定的,需要垃圾回收线程获得CPU资源时再回收

python的垃圾回收机制以计数法为主,分代回收为辅

其中计数法就是对于一个对象,有一个计数器,建立时计数器+1,具体操作时对计数器进行+-,当计数器归0了就回收

5. python的 *args 和 **kwargs

*args 和 **kwargs是python中的可变参数,当参数不确定的时候,可以使用

*args (arguments)表示位置参数,是一个元组,可以表示任意多个参数    相当于把输入的多个位置参数打包成元组

*kwargs  (keywords arguments)表示关键字参数,是一个字典,同时使用args和kwargs时,保证args在kwargs前  相当于把输入的多个关键词参数打包成字典

这里说一下* 和 ** 的作用,*可以把元组拆分,**可以把字典拆分

6. python平行赋值的原理

a,b = b,a

将等号左侧打包成元组,再赋给右边

7. python中pop的时间复杂度

pop()的时间复杂度是O(1)

pop(i)的时间复杂度是O(n)

对于双端队列collections.deque()的popleft(),时间复杂度为O(1)
8. 调用函数加不加括号的区别
加括号表示函数调用,执行函数
不加括号表示绑定事件,把函数的地址赋给变量, 事件触发才执行函数

9. python中的魔法函数

魔法函数是python中的一种高级语法,允许在类中自定义函数,并绑定到类的特殊方法中;python中以双下划线开头和结尾的函数为魔法函数。

魔法函数可以帮助类增强一些功能,这样在特定情况下可以被python直接调用,不需要直接调用。

魔法函数可以写到任意一个类中,与继承无关

常用的魔法函数:

(1)构造函数 __init__(self)

  用于对象初始化,不能return,写了也没用

(2)字符串表示  __str__和__repr__

  二者都是用于输出实例对象的,都可以使用print调用,其中__str__是面向用户的,__repr__是面向程序员的?  实际上不是print调用了__str__,而是print调用了str,str调用了__str__

  当类中同时有__str__和__repr__时,print输出的是__str__中返回的

  在命令行中,__repr__直接输出对象或print输出相同,都按类中定义的来,__str__直接输出对象输出的是类的地址,print输出的是类中定义的东西

(3)集合序列相关

  __len__:通过len()函数调用,获取实例对象的长度

  __getitem__: 让对象实现迭代功能,可以把他看作for i in range()

class aa():
    def __init__(self, *arg):
            self.list = arg
    
    def __getitem__(self, index):
            img = cv2.imread(self.list[index])
            return img

  __contains__:通过in来调用,判断数据是否在类中

class aa():
    def __init__(self, *arg):
            self.list = arg
    
    def __contains__(self, x):
            return x in self.list

  __setitem__(self, key, value): 将键值对存进类中指定的地方  aa['s'] = 1

  __deliten__(self, key):删除键值对 del调用

(4)可调用 __call__ 可以将类变成函数直接调用  即aa()直接调用__call__里的东西

 

10. python的异常处理

 

11. python抛出异常raise

在指定位置人为主动抛出异常,因为有些时候程序正常运行也有异常,就需要认为设置,通常与try一起用

python常见的异常:

  • AttributeError : 当试图访问的对象属性不存在时引发的异常
  • IndexError : 索引超出序列范围引发的异常
  • KeyError : 字典中不存在该关键字时的异常
  • NameError : 访问一个未声明变量时,引发的异常
  • TypeEError : 不同类型数据之间的无效操作
  • ZeroDivisionError : 除法中除数为0引发的异常
  • ValueError : 传入无效的参数

12. 上下文管理器with

with .. as 是简化版的try  finally

with语句中包含__enter__()和__exit__()两种方法

with后面的语句执行后,将进入__enter__,返回值被as后的值继承,with后面的代码块全部执行完或者出现错误时,进去__exit__

如在打开文件时,使用  f = open() 和 with open() as f,第一种方法需要自己关,f.close(),释放内存,而with as 可以帮你关

13. python的装饰器

函数里可以定义函数,函数也可以作为返回值

装饰器本质上是一个python的函数(其实就是闭包,可以访问其他函数的内部变量),它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

 

 使用装饰器的时候就在定义函数前 @装饰器的名称

 当使用多个装饰器的时候,装饰器按先后顺序来,内外部 外外部 内内部 外内部

 带参数的装饰器

 

类装饰器

类装饰器就是返回了一个具有函数功能的实例对象,类中必须实现__call__方法

参数会被传到__call__,再由__call__传给类内的其他函数

 

14. map的作用

map(function, iterable)

map函数会将指定的函数作用于指定的序列中的元素,并返回一个迭代器对象

可用的函数如 int、str等自带的,也可以自己定义,如

dic = {'a':1, 'b':2, 'c':3, 'd':4}

l1 = list( map( lambda x: x * x ,  dic.values()) )

print(l1)

>>> [1,4,9,16]

15. zip的作用

将可迭代的对象作为参数,将对象中的元素打包成一个个元组,然后返回对象(python2返回的是列表,python3返回的是对象,需要自己动手改成想要的格式)

复制代码
list1 = [1,2,3,4]
print(list(zip(list1)))
>>> [(1,),(2,),(3,),(4,)]


list1 = [1,2,3,4]
list2 = [5,6,7,8]
print(list(zip(list1,list2)))
>>> [(1,5),(2,6),(3,7),(4,8)]
print(dict(zip(list1,list2)))
>>> {1:5,2:6,3:7,4:8}
复制代码

16. 判断是否为指定类型

isinstance(object, type)

17. python中,所有异常类的父类是 BaseException

18. numpy.minimum的广播机制   

当两个矩阵维度不一致的时候,np会自动将矩阵进行广播,但是需要矩阵a能广播到矩阵b

posted @   Liang-ml  阅读(132)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示