Python 第一阶段面试题答案

承接上一篇文章
此答案不是标准答案

1、
break 用在条件满足即结束循环,跳出循环体,进行后面的程序
continue 结束本次循环,进行下次循环,需要把循环语句的每一个case都验证一下,符合条件的case跳过,执行后面的循环中
return 跳出循环体所在的方法,相当于结束该方法。
2、
python的作用域
作用域也叫名字空间,是访问变量时查找变量的名范围空间
python中的四个作用域 LEGB
作用域 英文解释 英文缩写
局部作用域 Local(function) L
外部嵌套函数作用域 Enclosing Fucntion local E
函数定义所在模块(文件)的作用域 Global(module) G
Python内建模块的作用域 Builtin(python) B
变量名的查找规则
L —> E —> G ----> B
global函数 说明:
1. 全局变量如果要在函数内部被赋值,则必须经过全局声明(否则会被认为是局部变量)
2. 全局变量在函数内部不经过声明就可以直接访问(取值)
3. 不能先创建局部变量,再用global声明为全局变量,此种做法不符合规则
4. global变量列表里的变量名不能出现在函数的形参列表里
3、
闭包是指引用了此函数外部变量的函数
(外部变量指:外部嵌套函数作用域内的变量)
闭包必须满足三个条件:
1. 必须有一个内嵌函数
2. 内嵌函数必须引用外部函数中的变量
3. 外部函数返回值必须是内嵌函数

注意点:
由于闭包会使得函数中的变量都被保留在内存中,内存消耗比较大,所以不能滥用闭包
4、
拷贝概念的引入就是针对:可变对象的共享引用潜在的副作用而提出的
深浅拷贝都是对源对象的复制,占用不同的内存空间
如果源对象只有一级目录的话,源做任何改动,不影响深浅拷贝对象
如果源对象不止一级目录的话,如果是可变对象做任何改动,都要影响浅拷贝,如果是不可变对象做了改变,深浅拷贝都不影响
序列对象的切片其实是浅拷贝,即只拷贝顶级的对象
5、
Python垃圾回收主要以引用计数为主,分代回收为辅。引用计数法的原理是每个对象维护一个ob_ref,用来记录当前对象被引用的次数,也就是来追踪到底有多少引用指向了这个对象,详解见这篇文章https://blog.csdn.net/xiongchengluo1129/article/details/80462651
6、
lambda 表达式(又称匿名函数)
作用:
创建一个匿名函数对象
同def 类似,但不提供函数名
语法:
lambda [函数形参列表]: 表达式
说明:
1. lambda 表达式创建的函数只能包含一条表达式
2. lambda 比函数简单,且可以随时创建和销毁,有利于降低程序的偶合度
9、
try-except语句的语法
try:
可能触发异常的语句
except 错误类型1 [as 变量1]:
异常处理语句1
except 错误类型2 [as 变量2]:
异常处理语句2
except (错误类型3, 错误类型4) [as 变量3]:
异常处理语句3

except:
异常处理语句other
else:
末发生异常的语句
finally:
最终语句
作用:
偿试捕获错误,得到异常通知,将程序由异常状态转换为正常状态并
继续执行
说明:
as 子句是用于绑定错误对象的变量,可以省略
except 子句可以有一个或多个,但至少要有一个
else 子句最多只能有一个.也可以省略
finally子句最多只能有一个.也可以省略
10、
随机模块 random
R.random() 返回一个[0, 1) 之间的随机实数
R.uniform(a,b) 返回[a,b] 区间内的随机实数
R.randin(a, b) 返回在[a, b] 范围内的整数(包含a,b)
R.randrange([start,] stop[, step]) 返回range(start,stop,step)中的随机数
R.choice(seq) 从序列中返回随意元素
R.shuffle(seq[, random]) 随机指定序列的顺序(乱序序列)
R.sample(seq,n) 从序列中选择n个随机且不重复的元素
12、
单引号与双引号是作用是一样的,都是字符串定界符
如果字符串里面包含的与边界一样的符号,需要转义符来将该符号转成普通字符,不然编译器会将字符串中的那个单引号或双引号当成字符串的边界。
三引号
三个双引号的作用是可以直接写多行的字符串 。
三重引号的内容,如果未赋值给变量,其在Python中相当于多行注释!在函数中还相当于doc作用。
三重引号还有一个好处,三重引号在多行引号方便且是所见即所得的方式,直观!
14、
python 函数的参数传递
位置传参:
实际参数(实参) 的对应关系与形式参数(形参)的对应关系是按位置来依次对应的.
序列传参
序列传参是指在函数调用过程中,用*(星号) 将序列拆解后按位置进行传递的传参方式
关键字传参:
关键字传参是指传参时,按着形参名称给形参赋值实参和形参按名称进行匹配 字典关键字传参: 是指实参为字典,将字典用** 拆解后进行关键字传参的传递方式
16、
“函数式编程”, 又称泛函编程, 是一种”编程范式”(programming paradigm),也就是如何编写程序的方法论。
21、
什么是装饰器
装饰器是一个函数,主要作用是用来包装另一个函数或类
包装的目的是在不改变原函数名(或类名) 的情况下改变或添加被包装对象的行为
函数装饰器
是指装饰器是一个函数,传入的是一个函数,返回的也是一个函数
语法:

  def 装饰器函数名(参数):
       语句块
       return 函数对象

  @装饰器函数名<换行>
  def 函数名(形参列表):
       语句块

25、
迭代器:
迭代器是访问可迭代对象的工具
迭代器是指iter(obj) 函数返回的对象(实例)
迭代器可以用next(it) 函数获取可迭代对象的数据
迭代器函数iter和next
iter(iterable) 从可迭代对象中获取一个迭代器,iterable
必须是能提供一个迭代器的可迭代对象
next(Iterator) 从迭代器iterator中获取下一个记录,如
果无法获取下一条记录,则触发StopIteration异常
说明:
迭代器只能往前取值,不会后退
用iter函数可以返回一个可迭代对象的迭代器

迭代器(高级)
什么是迭代器
可以能过next(it) 函数取值的对象就是迭代器
迭代器协议:
迭代器协议是指对象能够使用next函数获取下一
项数据,在没有下一项数据时触发一个StopIteration
异常来终止迭代的约定
迭代器协议的实现方法:
next(self) 方法来实现迭代器协议

什么是可迭代对象:
是指能用iter(obj) 函数返回迭代器的对象(实例)
可迭代对象的内部要定义 iter(self) 方法来返回
迭代器对象(实例)

生成器 Generator
什么是生成器:
生成器是能够动态提供数据的可迭代对象
生成器在程序运行时生成数据,与容器类不同,它通常不会在
内存中保存大量的数据,而是现用现生成

好处:
不占用计算机的内存

生成器有两种:
生成器函数
生成器表达式

生成器函数的定义
含有yield语句的函数是生成器函数,此函数被调用将返回
一个生成器对象
yield 翻译为(产生或生成)
yield 语句
语法:
yield 表达式
说明:
yield 只能用于def 函数中,目地是将此函数作为生成器
函数使用
yield 用来生成数据,供迭代器的next(it) 函数使用
说明:

  1. 生成器函数的调用将返回一个生成器对象,生成器对象是
    一个可迭代对象
  2. 生成器函数用return会触发一个StopIteration异常
    (即生成结束)

26、
1、对象的引用计数机制
2、垃圾回收
3、内存池机制
python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0时,它被垃圾回收。所有这些都是自动完成,不需要像C一样,人工干预,从而提高了程序员的效率和程序的健壮性

猜你喜欢

转载自blog.csdn.net/weixin_43473360/article/details/84169403