1、1.Python 是如何进行内存管理的?答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制, 三内存池机制一、对象的引用计数机制Python 内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。引用计数增加的情况:1,一个对象分配一个新名称2,将其放入一个容器中(如列表、元组或字典)引用计数减少的情况:1,使用 del 语句对对象别名显示的销毁2,引用超出作用域或被重新赋值sys.getrefcount( )函数可以获得对象的当前引用计数多数情况下,引用计数比你猜测得要大得多。对于不可变数据(如数字和字符串),解释器会在程序的不同部分共享内存,以便节约内存。二、垃圾回收1,当
2、一个对象的引用计数归零时,它将被垃圾收集机制处理掉。2,当两个对象 a 和 b 相互引用时,del 语句可以减少 a 和 b 的引用计数,并销毁用于引用底层对象的名称。然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对象也不会销毁。(从而导致内存泄露)。为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。三、内存池机制Python 提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。1,Pymalloc 机制。为了加速 Python 的执行效率,Python 引入了一个内存池机制,用于管理对小块内存的申请和释放。2,Py
3、thon 中所有小于 256 个字节的对象都使用 pymalloc 实现的分配器,而大的对象则使用系统的 malloc。3,对于 Python 对象,如整数,浮点数和 List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。2.什么是 lambda 函数?它有什么好处 ?答:lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数lambda 函数:首要用途是指点短小的回调函数lambda arguments:expressiona=lambdax,y:x+ya(
4、3,11)3.Python 里面如何实现 tuple 和 list 的转换?答:直接使用 tuple 和 list 函数就行了,type()可以判断对象的类型4.请写出一段 Python 代码实现删除一个 list 里面的重复元素答:1,使用 set 函数,set(list)2,使用字典函数,a=1,2,4,2,4,5,6,5,7,8,9,0b=b=b.fromkeys(a)c=list(b.keys()c5.编程用 sort 进行排序,然后从最后一个元素开始判断a=1,2,4,2,4,5,7,10,5,5,7,8,9,0,3a.sort()last=a-1for i inrange(len(
5、a)-2,-1,-1):if last=ai:del aielse:last=aiprint(a)6.Python 里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别)答:赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变)1,完全切片方法;2,工厂函数,如 list();3,copy 模块的 copy()函数深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变)copy 模块的 deep.deepcopy()函数
6、7.介绍一下 except 的用法和作用?答:tryexceptexceptelsefinally执行 try 下的语句,如果引发异常,则执行过程会跳到 except 语句。对每个 except 分支顺序尝试执行,如果引发的异常与 except 中的异常组匹配,执行相应的语句。如果所有的 except 都不匹配,则异常会传递到下一个调用本代码的最高层 try 代码中。try 下的语句正常执行,则执行 else 块代码。如果发生异常,就不会执行如果存在 finally 语句,最后总是会执行。8.Python 中 pass 语句的作用是什么?答:pass 语句不会执行任何操作,一般作为占位符或者创
7、建占位程序,whileFalse:pass9.介绍一下 Python 下 range()函数的用法?答:列出一组数据,经常用在 for in range()循环中10.如何用 Python 来进行查询和替换一个文本字符串?答:可以使用 re 模块中的 sub()函数或者 subn()函数来进行查询和替换,格式:sub(replacement, string,count=0)(replacement 是被替换成的文本,string 是需要被替换的文本,count 是一个可选参数,指最大被替换的数量)import rep=pile(blue|white|red)print(p.sub(colour
8、,blue socks and red shoes)colour socks and colourshoesprint(p.sub(colour,blue socks and red shoes,count=1)colour socks and redshoessubn()方法执行的效果跟 sub()一样,不过它会返回一个二维数组,包括替换后的新的字符串和总共替换的数量11.Python 里面 match()和 search()的区别?答:re 模块中 match(pattern,string,flags),检查 string 的开头是否与 pattern 匹配。re 模块中 research
9、(pattern,string,flags),在 string 搜索 pattern 的第一个匹配值。print(re.match(super, superstition).span()(0, 5)print(re.match(super, insuperable)Noneprint(re.search(super, superstition).span()(0, 5)print(re.search(super, insuperable).span()(2, 7)12.用 Python 匹配 HTML tag 的时候, 和 有什么区别?答:术语叫贪婪匹配( )和非贪婪匹配 ( )例如:test
10、:test:13.Python 里面如何生成随机数?答:random 模块随机整数:random.randint(a,b):返回随机整数 x,a=x=brandom.randrange(start,stop,step):返回一个范围在(start,stop,step)之间的随机整数,不包括结束值。随机实数:random.random( ):返回 0 到 1 之间的浮点数random.uniform(a,b):返回指定范围内的浮点数。14.有没有一个工具可以帮助查找 python 的 bug 和进行静态的代码分析?答:PyChecker 是一个 python 代码的静态分析工具,它可以帮助查找
11、python代码的 bug, 会对代码的复杂度和格式提出警告Pylint 是另外一个工具可以进行 codingstandard 检查15.如何在一个 function 里面设置一个全局的变量?答:解决方法是在 function 的开始插入一个 global 声明:def f()global x16.单引号,双引号,三引号的区别答:单引号和双引号是等效的,如果要换行,需要符号(),三引号则可以直接换行,并且可以包含注释如果要表示 Lets go 这个字符串单引号:s4 = Lets go双引号:s5 = “Lets go”s6 = I realy like“python”!这就是单引号和双引号都
12、可以表示字符串的原因了2.49 判 断 对 错 : 已 知 x = 3, 那 么 赋 值 语 句 x = abcedfg是 无 法正 常 执 行 的 。2.50 判 断 对 错 : Python 变 量 使 用 前 必 须 先 声 明 , 并 且 一 旦 声 明 就不 能 在 当 前 作 用 域 内 改 变 其 类 型 了 。2.51 判 断 对 错 : Python 不 允 许 使 用 关 键 字 作 为 变 量 名 , 但 是 允 许使 用 内 置 函 数 名 作 为 变 量 名 , 不 过 这 会 改 变 函 数 名 的 含 义 , 所 以 不建 议 这 样 做 。2.52 判 断 对
13、错 : 在 Python 中 可 以 使 用 if 作 为 变 量 名 。2.53 判 断 对 错 : 在 Python 3.x 中 可 以 使 用 中 文 作 为 变 量 名 。2.54 判 断 对 错 : Python 变 量 名 必 须 以 字 母 或 下 划 线 开 头 , 并 且 区分 字 母 大 小 写 。2.55 判 断 对 错 : 加 法 运 算 符 可 以 用 来 连 接 字 符 串 并 生 成 新 字 符 串 。2.56 判 断 对 错 : x = 9999*9999 这 样 的 语 句 在 Python 中 无 法运 行 , 因 为 数 字 太 大 了 超 出 了 整 型
14、 变 量 的 表 示 范 围 。2.57 判 断 对 错 : 3+4j 不 是 合 法 的 Python 表 达 式 。2.58 判 断 对 错 : 0o12f 是 合 法 的 八 进 制 数 字 。2.59 判 断 对 错 : 只 有 Python 扩 展 库 才 需 要 导 入 以 后 才 能 使 用 其中 的 对 象 , Python 标 准 库 不 需 要 导 入 即 可 使 用 其 中 的 所 有 对 象 。2.60 判 断 对 错 : 在 Python 中 0xad 是 合 法 的 十 六 进 制 数 字 表 示 形式 。2.61 判 断 对 错 : 4j 是 合 法 Python
15、 数 字 类 型 。2.62 判 断 对 错 : Python 使 用 缩 进 来 体 现 代 码 之 间 的 逻 辑 关 系 , 对缩 进 的 要 求 非 常 严 格 。2.63 判 断 对 错 : Python 代 码 的 注 释 只 有 一 种 方 式 , 那 就 是 使 用 #符 号 。2.64 判 断 对 错 : 放 在 一 对 三 引 号 之 间 的 任 何 内 容 将 被 认 为 是 注 释 。2.65 判 断 对 错 : 尽 管 可 以 使 用 import 语 句 一 次 导 入 任 意 多 个 标准 库 或 扩 展 库 , 但 是 仍 建 议 每 次 只 导 入 一 个 标
16、 准 库 或 扩 展 库 。2.66 判 断 对 错 : 为 了 让 代 码 更 加 紧 凑 , 编 写 Python 程 序 时 应 尽量 避 免 加 入 空 格 和 空 行 。2.67 判 断 对 错 : 在 Python 3.5 中 运 算 符 +不 仅 可 以 实 现 数 值 的 相加 、 字 符 串 连 接 , 还 可 以 实 现 列 表 、 元 组 的 连 接 和 集 合 的 并 集 运 算 。2.68 判 断 对 错 : 在 Python 中 可 以 使 用 for 作 为 变 量 名 。2.69 判 断 对 错 : 在 Python 中 可 以 使 用 id 作 为 变 量 名
17、 , 但 是 不建 议 这 样 做 。2.70 判 断 对 错 : 一 个 数 字 5 也 是 合 法 的 Python 表 达 式 。2.71 判 断 对 错 : 执 行 语 句 from math import sin 之 后 , 可 以 直接 使 用 sin()函 数 , 例 如 sin(3)。2.72 判 断 对 错 : 一 般 来 说 , Python 扩 展 库 没 有 通 用 于 所 有 版 本Python 的 , 安 装 时 应 选 择 与 已 安 装 Python 的 版 本 对 应 的 扩 展 库 。2.73 判 断 对 错 : Python 变 量 名 区 分 大 小 写
18、 , 所 以 student 和Student 不 是 同 一 个 变 量 。2.74 判 断 对 错 : 在 Python 3.x 中 reduce()是 内 置 函 数 。2.75 判 断 对 错 : 如 果 只 需 要 math 模 块 中 的 sin()函 数 , 建 议 使 用from math import sin 来 导 入 , 而 不 要 使 用 import math 导 入 整个 模 块 。2.76 判 断 对 错 : 表 达 式 pow(3, 2) = 3 * 2 的 值 为 True。2.77 判 断 对 错 : 已 知 x = 3, 那 么 执 行 语 句 x+=6 之 后 , x 的 内 存地 址 不 变 。2.78 判 断 对 错 : 安 装 Python 扩 展 库 时 只 能 使 用 pip 工 具 在 线 安装 , 如 果 安 装 不 成 功 就 没 有 别 的 办 法 了 。2.49 错2.50 错2.51 对2.52 错2.53 对2.54 对2.55 对2.56 错2.57 错2.58 错2.59 错2.60 对2.61 对2.62 对2.63 错2.64 错2.65 对2.66 错2.67 错2.68 错2.69 对2.70 对2.71 对2.72 对2.73 对2.74 错2.75 对2.76 对2.77 错2.78 错