标签:默认参数 共享 inter 数列 -- 声明变量 是什么 存在 嵌套
Python面试重点(基础篇)
第一部分 必答题(每题2分)
简述列举了解的编程语言及语言间的区别?
python 解释型 相对于简单易学
java 混合型 学习成本高,java做web
c 编译型 底层语言
c++ 编译型 c的基础上加了面向对象
go 编译型 高并发,区块链
语言特点: 灵活简洁,语言优美 可读性强,
语言类型:
解释型:逐行转化,运行效率低,性能差,开发效率高。兼容性好,跨平台
编译型 :一次性编译成二进制文件,执行效率高,兼容性差,
动态语言:不用声明变量的数据类型(脚本类语言)
静态语言:需要声明变量的数据类型
第三方库:python定位是任其发展,开源库很多,应用领域广
列举Python2和Python3的区别?
Python 2只支持到2020年
print函数 Python2不加括号 Python3加括号 从语句变为函数
input函数 Python2用户输入解析为int类型,raw_input为字符串类型 Python3为字符串类型
整除/ 2 根据除数小数点位得到结果,整形 3是真除
默认编码 2是ascll码 3 utf-8
不等!= <> python3取消了<>
int类型 2有long类型 3只有int
range 2 是列表 xrange 可迭代对象 3是可迭代对象
2新式类,经典类 3 新式类
看代码写结果
v1 = 1 or 2
#v1 = 1
v2 = 3 and 7 or 9 and 0
#v2 = 7 or 0
#v2 = 7
在没有()的情况下not 优先级高于 and,and优先级高于or
x or y , x为真,值就是x,x为假,值是y;
x and y, x为真,值是y,x为假,值是x。
两边都不是0的情况下
and 直接取后面的值 or 直接取前面的值
如果存在0的情况
and 直接取0 or 直接取非0
false是 0 。。
用一行代码实现数值交换。
a = 1
b = 2
#a,b = b,a
is和==的区别?
对象的基本三要素:type(数据类型) id(身份标识) 和 value(值)
==比较两个对象的值是否相等
is判断id值是否相同
python里如何实现tuple和list的转化?
tuple(list) #可以用循环添加
list(tuple) #tuple不可变,不能循环添加
如何实现字符串 name=‘老男孩‘的反转?
1.切片
name = name[::-1]
2.列表的reverse方法
name = list(name)
name.reverse()
name = ‘‘.join(name)
#name = ‘‘.join(name[::-1])
3.for 循环
#各种切片insert都可以
4.reduce函数
new_name = reduce(lambda x,y:y+x,name)
print(new_name)
5.递归
def func(s):
if len(s) < 1:
return s
return func(s[1:]) +s[0]
6.使用栈
s = "hello"
l = list(s)
result = ""
while(len(l)>0):
result += l.pop()
print(result)
两个set如何获取交集、并集、差集?
交集 list(set(a).intersection(set(b)))
&
并集 list(set(a).union(set(b)))
|
差集 list(set(b).difference(set(a)))
-
Python中如何拷贝一个对象?
为了在修改数据时不改变原数据所产生了拷贝
copy模块 copy.copy() copy.deepcopy()
[:]
可变对象:所谓可变是指可变对象的值可变,身份(id)是不变的。如:列表、字典、集合
不可变对象:就是对象的身份和值都不可变。如:数字(数字也是不可变,切记)、字符串、元组
简述 赋值、浅拷贝、深拷贝的区别?
原则上是分离数据,修改数据互不影响
赋值:让多个变量同时指向一个对象的内存地址。不可变对象在赋值时会开辟新空间。可变对象在赋值时,修改一个的值,另一个也会发生改变。
浅拷贝:(copy模块的copy.copy()函数) 拷贝父对象,不会拷贝对象的内部的子对象。不可变对象和赋值没区别。可变对象,浅拷贝在拷贝时,只拷贝第一层中的引用,如果元素是可变对象,并且被修改,那么拷贝的对象也会发生变化。####拷贝第一层元素内存地址
深拷贝:完全拷贝了父对象及其子对象。深拷贝就是将顶级对象以及子对象的值同时复制给新对象,此时修改任何一个都不会影响另一个。{copy模块的 copy.deepcopy()函数}####不管多少层,不可变共有,可变开辟新空间
但由于小数据池的概念,python中 -5~~256 20字符串 bool完全共享内存地址
阅读代码写结果。
import copy
a = [1,2,4,5,[‘b‘,‘c‘]]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[4].append('d')
print(b)
print(c)
print(a)
用Python实现9 * 9 乘法表。
用Python显示一个斐波那契数列。
lst = [1,1]
for i in range(10):
lst.append()
如何删除列表中重复的值?
list(set(list))
一个大小为100G的文件etl_log.txt, 要读取文件中的内容, 写出具体过程代码?
for i in 文件句柄
a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 请问a是什么?
字典的创建方式
lambda关键字的作用?
定义一个匿名函数
*arg和kwarg作用?
* arg 接受多余位置参数
kwarg 接受多余关键字参数
如何在函数中设置一个全局变量 ?
global name
filter、map、reduce的作用?
filter 过滤
map 映射
reduce 累计算
什么是匿名函数?匿名函数有什么作用?
lambda 函数就是匿名函数,一句话函数
配合高阶函数进行使用
高阶函数:能写方法的
Python递归的最大层数?
官方1000 实际994-998
import sys
sys.setrecursionlimit(10000)修改递归最大深度
什么是迭代器?什么是可迭代对象?
具有__iter__()和__next__()方法的就是迭代器
具有__iter__()方法的就是可迭代对象
.dir()查看某个对象的所有属性和方法
什么是生成器? 什么是装饰器及应用场景?
生成器的本质就是迭代器,具有yield关键字就是生成器
装饰器本质闭包,不修改源代码及调用方式下,额外增加功能
登陆验证
类
flask
django
什么是反射及应用场景?
通过字符串操作对象的方法和属性
应用场景:
用户输入,判断选择,cbv
写一个普通的装饰器。
写一个带参数的装饰器。
求结果
def num():
return [lambda x:i*x for i in range(4)]
print([m(2) for m in num()])
[6,6,6,6]
def(a, b=[])这种写法有什么陷阱?
默认参数是可变数据类型 闭包
看代码写结果
def func(a,b=[]):
b.append(a)
return b
v1 = func(1)
v2 = func(2,[10,20])
v3 = func(3)
print(v1,v2,v3)
看代码写结果
def func(a,b=[]):
b.append(a)
return b
v1 = func(1)
print(v1) 1
v2 = func(2,[10,20])
print(v2) 10 20 2
v3 = func(3)
print(v3) 1 3
请编写一个函数实现--换成一个整数。
如 10.3.9.12 转换规则为:
10 00001010
3 00000011
9 00001001
12 00001100
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
请查找一个目录下的所有文件(可能存在文件嵌套)。
os.walk() 本质递归
求结果
import math
print (math.floor(5.5))
地板除 5
是否使用过functools中的函数?其作用是什么?
reduce wraps
re的match和search区别?
match 从开头进行匹配,匹配一个就停止
search 从任意位置进行匹配 匹配一个就停止
用Python匹配HTML tag的时候,<.>和<.?>有什么区别?
. 贪婪匹配 匹配多个任意字符
.*? 非贪婪 只匹配一次
如何生成一个随机数?
random
random.random()
super的作用?
按照mro的顺序进行继承
双下划线和单下划线的区别?
__a = 10 强制私有
_b = 15 程序员约定俗成这是一个私有方法
@staticmethod和@classmethod的区别?
一个是静态方法 普通函数
一个是类方法
实现一个单例模式(加锁)。
多线程不再是单例了,为了保证所以加锁
栈和队列的区别?
栈 先进后出
队列 先进先出
以下代码输出是什么? 请给出答案并解释。
class Parent(object):
x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
print Parent.x, Child1.x, Child2.x
Child1.x = 2
print Parent.x, Child1.x, Child2.x
Parent.x = 3
print Parent.x, Child1.x, Child2.x
参考下面代码片段
class Context:
pass
with Content() as ctx:
ctx.do_something()
请在Context类下添加代码完成该类的实现
第二部分 可选题
标签:默认参数 共享 inter 数列 -- 声明变量 是什么 存在 嵌套
原文地址:https://www.cnblogs.com/yly123/p/11910656.html