1.可迭代对象,迭代器,生成器有啥区别
#可迭代对象含有__iter__方法的数据
#迭代器含有__iter__,__next__方法的数据 迭代器一定是可迭代对象
#生成器本质是迭代器,是程序员自己写的迭代器
2.手写装饰器
# def wrapper(f):
# def inner(*args,**kwargs):
# '''函数运行前操作'''
# ret=f(*args,**kwargs)
# '''函数运行后操作'''
# return ret
# return inner
# @wrapper
# def func():
# print(666666)
# func()
3.python 函数式编程是什么?
#函数式:functional,一种编程范式。函数式编程是一种抽象计算机的编程模式
4.面向对象有哪些内置方法?
# __init__
# __hash__
#__getitem__
#__setitem__
#__delitem__
# __format__
# __str__
# __repr__
# __eq__
# __dict__
# __len__
5.repr和str的区别
# __repr__和__str__这两个方法都是用于显示的,__str__是面向用户的,而__repr__面向程序员。
#打印操作时会先尝试__str__和str内置函数
6.手写递归函数裴波那契数列 1 1 2 3 5 8 13 21
# def fbl(n,a=0,b=1):
# if n==1:
# return a+b
# return fbl(n-1,a+b,a)
# print(fbl(8))
7.递归的两个准则
#递归需要有边界条件、递归前进段和递归返回段
#递归必须是有序的数列
8.类的属性和对象属性
# 对象是类的实例,类是相同结构的对象的抽象。同类的各个对象其实拥有相同的属性和方法,只是属性值不同而已
1.当n=5时,下列函数返回值是多少
int foo(int (n))
{if (n<2)return n;
return foo(n-1)+foo(n-2);}
答:
n=5带入
得出1.foo(4)+foo(3)=5
2.foo(4) =foo(3)+foo(2)=3
3.foo(3) = foo(2)+foo(1)=2
4.foo(2) = foo(1)+foo(0)=1
5.foo(1) = 1
2.下列程序输出的是什么
#define add(a,b) b+a
int main()
{printf("%d",5*add(3,4));
return 0;
}
答:
35 5*(4+3)
3.已知s="<html><head>test</head></html>"那么
print(re.match("<.*>",s).group())和
print(re.match("<.*?>",s).group())的结果是什么?
<.*>贪婪匹配 匹配尽量长的字符串
<.*?>非贪婪匹配 匹配尽量短的字符串
4.python里面的match()和search()的区别是什么?
match()优先返回找到的第一个结果的第一个值
search()优先会返回第一个匹配到的结果
ret = re.search('a', 'eva egon yuan').group()
print(ret) #结果 : 'a'
# 函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以
# 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
ret = re.match('a', 'abc').group() # 同search,不过尽在字符串开始处进行匹配
print(ret)
#结果 : 'a'
5.TCP/IP协议网络层体系分层?每层协议有哪些
应用层
表示层
会话层
传输层 TCP UDP
网络层 ip
数据链路层 rap
物理层
6.pthon2.x中,range和xrange的区别?哪个性能更高?
range返回一个列表
xrange是一个生成器
xrange会比range性能快很多因为不用开辟大量的内存空间
7.下面代码会输出什么?
def f(x,l=[]):
for i in range(x):
l.append(i*i)
print(l)
f(2)
f(3,[3,2,1])
f(3)
8.什么是lambda函数?他有什么好处?
匿名函数
1. lambda表达式让代码更加简洁,使用它可以省去函数定义的过程
2. 对于一些只需要使用一次的函数,用lambda来定义,可以省去函数命名问题
3. 同样是定义一个简单的函数,有时候lambda更加清晰明了