第三套面试题

1、如何在Python中拷贝一个对象?并说明他们之间的区别

-  copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
-  copy.deepcopy 深拷贝 拷贝对象及其子对象
举例说明
    import copy
    l1 = [1,2,3,4,['a','b']]
    a = l1  #赋值,传对象的引用
    b = copy.copy(l1)  #对象拷贝,浅拷贝
    c = copy.deepcopy(l1) #对象拷贝,深拷贝
    a.append(5)  #修改对象a
    a[4].append('c')  #修改a列表里面列表
    print('a=',a)  #a= [1, 2, 3, 4, ['a', 'b', 'c'], 5]
    print('b=',b)  #b= [1, 2, 3, 4, ['a', 'b', 'c']]
    print('c=',c)  #c= [1, 2, 3, 4, ['a', 'b']]

    明显的可以看出:
        浅拷贝:只拷贝父对象,不会拷贝对象的内部的子对象
        深拷贝:拷贝对象及其子对象

2、谈谈你对Python装饰器的理解

在不修改原函数及其调用方式的情况下对原函数的功能进行扩展
当我们写登录认证的时候,好多页面都得判断带没带cookie,如果带了就可以访问,这时候如果函数
不多的时候我们就可以用加装饰器的方法来判断,而不用一个一个的判断。当然,如果页面太多的话,
我们还可以考虑中间件的方式来进行判断。

3、Python里面match()和search()的区别

match:只从字符串的开头进行匹配,也就是说只有在索引0的位置匹配成功的话才有返回值,如果不是开始位置匹配成功的话,返回none
search:会把整个字符串扫描一遍,并返回第一个成功匹配的

4、如何判断一个变量是不是字符串?

s = 'aaaa'
print(type(s) ==str)  #True
print(isinstance(s,str)) #True

5、xrange和range的不同?

xrange和range的用法相同
不同的是:
    range(5)  #[0,1,2,3,4] 生成的是一个列表
    xrange(5)  #xrange(5)  生成的是一个生成器,通过list(xrange(5)) 就能看到结果了
xrange做循环的性能比range好,尤其是返回很大的时候。

6、如何生成[1,4,9,16,25,36,49,64,81,100]?尽量用一行实现

#方式一
print([i*i for i in range(1,11)])
#方式二
print(list(map(lambda x:x*x,range(1,11))))

7、生成器是什么?有什么作用?请写一个生成器

含有yield的就是生成器,也有__next__方法,具有迭代特性
作用:就是一下子不会在内存中生成太多的数据,生成器的本质就是一个迭代器。
Python有两种不同的方式提供生成器
    生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。
                yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,
                以便下次重它离开的地方继续执行
    生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,
                  而不是一次构建一个结果列表    
生成器示例:
    def aaa():
        for i in range(0,10):
            yield i
    s = aaa()

    print(next(s))  #0
    print(next(s)) #1
    print(next(s))#2
    for i in s:
        print(i)  0 1 2 3 4 5 6 7 8 9 

8、map(str,[1,2,3,4,5,6,7,8,9])  #输出什么

<map object at 0x00000000025B3550>  输出的是map对象

9、如何在一个函数里面设置一个全局的变量

    用global强转一下

10、介绍一下except的用法和作用

作用:try,except主要用作异常处理,吧有可能出异常的代码放在try里面,except里面放处理的机制
用法:
def tryexcept():
   
try:
     int(
'aaa')
   except ValueError as e:
     
print(e)
tryexcept()

11、def f(a,b=[])这种写法中有什么陷阱?

举例说明:
def f(a,b=[]):
   b.append(a)
   print(b)
f('hiayn')  #['hiayn']
f('zzz')   #['hiayn', 'zzz']
f('rrrr')  #['hiayn', 'zzz', 'rrrr']
明显的看出:每次传入参数的时候,都是在以前的基础上添加了

12、用Python实现九九乘法表(用两种不同的方式实现)

#方式一
for i in range(1,10):
    for j in range(1,i+1):
        print('%s*%s=%s'%(i,j,i*j),end=" ")
    print()
#方式二:左上三角形
for i in range(1,10):
    for j in range(i,10):
        print("%d*%d=%d"%(i,j,i*j),end=" ")
    print("")
https://www.cnblogs.com/suiy-160428/p/5594389.html

第四套面试题

1、输入一个字符串,返回倒序排序的结果,:如:‘abcdef’ 返回:'fedcba'

#方式一:将字符串翻转,步长设为-1
def re_sort():
    s = input('请输入一串字符串:>>')
    return s[::-1] #从开头到结尾步长为-1
# obj = re_sort()
# print(obj)

#方式二:借助列表进行翻转
def re_sort2():
    s = input('请输入一串字符串:>>')
    li = []
    for i in s:
        li.append(i)
    li.reverse()  #将列表反转
    return ''.join(li)  #将列表转化成字符串
obj2 = re_sort2()
print(obj2)

2、django中如何在model保存前做一定的固定操作,比如写一句日志

可以写装饰器或者是中间件,还是推荐用中间件的方式

3、获取Python解释器版本的方法是?

    Python --version  #获取解释器的版本信息
    在环境变量里面设置版本,在cmd里面运行,输入Python3 或者Python2 

4、Python中,什么语句能直接显示释放内存资源?

del 可以删除多个变量,del a,b,c,d
办法:
    a = [1,2,3,4]
    import gc
    del a 
    gc.collect()

5、有一个数组[3,4,1,2,5,6,6,5,4,3,3],请写一个函数,找出该数组中没有重复的数的总和?结果:1+2 = 3

from collections import Counter
li = [3,4,1,2,5,6,6,5,4,3,3]
def func():
    new_li = []
    sum = 0
    number_count = Counter(li)  #统计出现的个数的,打印的结果是一个字典
    for i in number_count.items():
        # print(i)  #打印的i是一个元组的形式,一个是key,一个是value
        if i[1]==1:  #i[1]代表的是个数
            new_li.append(i[0]) #i[0]代表的是取出的列表中没有重复的数
    for i in new_li:
        sum = sum+i
    return sum

ret = func()
print(ret)

6、从0-99这100个数中随机取出10个,要求不能有重复,可以自己设计数据结构

import random
print(random.sample(range(0,99),10))
1 )、random().randint() 返回0<=n<1之间的随机实数n;
2 )、choice(seq) 从序列seq中返回随机的元素;
3 )、getrandbits(n) 以长整型形式返回n个随机位;
4 )、shuffle(seq[, random]) 原地指定seq序列;
5 )、sample(seq, n) 从序列seq中选择n个随机且独立的元素;

7、cookie和session有什么区别?

cookie和session都可以存储用户信息,cookie存在浏览器端,session存在服务器端

8、Http协议是有状态协议还是无状态协议,如何从两次请求中判断是同一个用户

由于http协议是无状态的,每次请求进来都不知道是谁,是不会保存状态的,
这就有了cookie和session。我们可以根据每次请求带的cookie的值做判断

10、以下代码输出什么?

li = ['a','b','c','d','e']
print(li[10:])  #会报错,因为列表里面就没有第10个元素

 

posted on 2018-02-17 21:38  海燕。  阅读(213)  评论(0)    收藏  举报