| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> python 面试 -> 正文阅读 |
|
[Python知识库]python 面试 |
编译性语言与解释性语言 编译:一次运行,无限次使用,不能跨平台 解释:运行时解释,可以跨平台 python中的数据类型 常见的int float 字符串 bool 列表 集合 元组 字典 不可变类型: int float 字符串? bool 元组 可变类型: 列表 字典 集合(其元素是唯一的、不可变的(可哈希的)对象)。不能作为key,字典本质还是hash,key变化了 val就会变化 元组得优势: 1. 某些数据不会改变,减少编写代码时发生错误 ? ? ? ? ? ? ? ? ? ? ? ? 2. 对于某些特殊得字典,需要列表形式得元素作为key 集合的优势: 1.一些集合运算比列表方便 & |? ? ? ? ? ? ? ? ? ? ? ? ? 2.set无序排序且不重复,是可变的,消除重复元素,frozenset是冻结的集合,它是不? ? ? ? ? ? ? ? ? ? ? ? ? ? ?可变的,存在哈希值,好处是它可以作为字典的key,也可以作为其它集合的元? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?素。缺点是一旦创建便不能更改,没有add,remove方法 Python参数传递采用的肯定是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。 python中is和==的区别
?lamba 匿名函数,简化代码,一般用于高阶函数sort, filter
L.sort() 函数排序会改变原有的待排序列表,而sorted()函数则不会改变(稳定排序)。所以在使用列表进行排序时,需要考虑是否需要保存原列表,如果无需保存原列表,则优先使用L.sort() 节省内存空间,提高效率 ?函数式编程 函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! 高阶函数:?编写高阶函数,就是让函数的参数能够接收别的函数。 map filter sorted? 闭包:?内层函数引用了外层函数的局部变量? 外函数返回值是内函数的引用 装饰器: 给函数添加额外得功能,高效简洁,利用闭包,将被装饰的函数作为参数传递到装饰器函数中 def my_login(func): def wrapper(*args, **kargs): kargs['val'] = 5 print (args) print (kargs) return func(*args, **kargs) return wrapper @my_login def login_test(*args, **kargs): print (args) print (kargs) if __name__ == '__main__': login_test(1,3,a=4,b=5) 装饰器类: 可以使用类的一些特性(继承,重载,不用每个功能都重写)定义__call__函数实现 class decorate(object): def __init__(self, logfile): self.logfile = logfile def __call__(self, *args, **kwargs): # 装饰器实现 省略 print self.logfile self.work() pass def work(self): pass @decorate() def myfunc1(): pass 迭代器、生成器 迭代器:可以记录遍历位置的对象,通过next函数来访问下一个元素 ?生成器:也属于迭代器,但是它的下一个元素是通过计算获取的,可以节约内存,需要的时候才会生成,通过yield关键字实现。 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行 内存管理机制 python的内存管理主要通过内存池+垃圾回收实现 Python中有分为大内存和小内存:(256K为界限分大小内存) 1、大内存使用malloc进行分配? 2、小内存使用内存池进行分配 内存池的好处:1.创建大量消耗小内存的对象时,频繁调用new/malloc会导致大量的内存碎片;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2. malloc?和free是用户态和核心态直接的切换,频繁的切换会影响python的执行? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 效率 垃圾回收采用引用计数机制,另外采用标记清除机制来解决循环引用的问题,分代回收机制是为了提升垃圾回收的效率 对象被引用的时候计数加一,不被变量引用减一,计数为0表明对象可以被删除,标记清除是为了解决对象间循环引用问题,当一个对象被清理很多次依然存在,可以认为这个对象不需要经常去判断是否需要被清理,可以把它们划分为不同的集合,为了提高效率,这些集合的回收时间间隔不一样 pythpn ORM Python SQLalchemy的学习与使用 - 战争热诚 - 博客园 orm:对象关系映射模式,主要实现程序对象到关系数据库数据的映射。一张表对应了一个类,表中的字段对象类中的属性, orm模型就是实现这种映射。对数据库中的操作通过session(会话)来实现数据库的操作。好处就是 数据库更加的可视化,提供了通用的数据库交互,并且完全不用考虑SQL语句,从而快速开发。 GIL python GIL 全局锁_bitcarmanlee的博客-CSDN博客_python 全局锁 当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状态。这种方式我们称之为并发(Concurrent)。当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。 gil:全局解释器锁,为了解决多 线程之间数据同步问题,cpython设定每个线程执行的时候都需要获取这个gil,保证同一时刻只有一个线程在执行这是cpython(官方默认解释器) 解释器的问题,不是python的问题, jpython 解释器就没这个问题(是一个将python代码编译成java字节码的实现,运行在JVM(将java编译成机器码)) gil得释放: 遇到IO必释放,时间片到期释放 ?gil只是限制了线程的并行,并发仍然存在,类似时间片轮转 适合IO密集任务 元类: python?__new__和__init__的区别
match和search: match()函数只检测字符串开头位置是否匹配,匹配成功才会返回结果,否则返回None search()函数会在整个字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。 classmethod?修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。 assert:后面跟合法的表达式,当表达式为True是,不做任何操作,为False时回抛出异常,assert可以快速定位代码中的错误 def foo(s): n = int(s) assert n != 0, 'n is zero!' return 10 / n foo('0') # 代码执行结果 # AssertionError: n is zero! 单例模式: 采用new
<__main__.base_test object at 0x00000000033A40F0> <__main__.base_test object at 0x00000000033A40F0> 考虑线程安全问题?
?python实现的常用算法(排序、树的遍历)
树的遍历:python实现二叉树的遍历以及基本操作 - pandaWaKaKa - 博客园
python线程池
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 1:36:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |