Python 面试题(持续更新)

1.python实现列表去重的方法
实现方法:set集合元素唯一,无序;list集合元素可以重复,有序
所以可以先把列表转换为集合,然后再转换为列表

list = [11,12,13,12,11,15,16,13]
a = set(list)
[x for x in a]
print(a)

最后打印出的结果为

[11, 12, 13, 15, 16]

2.python GIL全局锁
GIL全称(Gloable Interpreter Lock),同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。python 的多线程实际上还是启动的一个线程运行,通过线程的切换实现多线程的调度。所以python的多线程实现并发测试 并不具有参考性。
3.Python2 python3 rang(100)的区别
python2 返回列表,python3 返回迭代器,更节约内存
4.__new__和__init__的区别
__init__是初始化方法,创建对象后默认被立刻调用,可以接受参数的传递。
1、__new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别
2、__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例
3、__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值
5.列表和字典那个有序哪个无序
python2中字典无序,Python3中字典有序。
默认情况下Python的字典输出顺序是按照键的创建顺序。
字典的无序是指,不能人为重新排序。
比如说你按键值1,2,3,4的顺序创建的字典,只能由解析器按创建顺序,还是1,2,3,4的输出。
你无法控制它按照4,3,2,1的顺序输出,你也无法做到1,3,2,4的顺序。
而且这个输出顺序是也不是能真正按照创建顺序可以控的。
这里面有两个影响因素:
1)键值的哈希碰撞,hash(key1) == hash(key2)时,向字典里连续添加的这个两个键的顺序是不可以控制的,也是无法做到连续的,后来的键会按算法调整到其它位置。
列表是任意对象的有序集合
元祖任意对象的有序集合
字典任意对象的无序集合
所以列表是有序的,字典是无序的
6.uWSGI 和WSGI有什么区别
WSGI只是一种规范,一个约定,不是python的模块,全称 Web Server Gateway
uWSGI是实现了WSGI,uwsgi,http协议等的一个web服务器,即接收客户端的请求,转发响应程序
7.遍历一个文件路径,并打印所有文件名:

import os

def get_log_path_dict():
    log_path = "/home/logs"
    for root, dirs, files in os.walk(log_path):
        log_path_dict = dict()
        for dir_name in dirs:
            dir_path = os.path.join(root, dir_name)
            log_path = dir_path + "/public.log"
            log_path_dict[dir_name] = log_path
        return log_path_dict
print(get_log_path_dict())

8.在接口返回值值中遍历取出指定key 的value:

j = 0
    for i in range(0, len(assert_keys)):
        for key, value in responseJson.items():         #遍历key值
            if key == assert_keys[i]:
                if str(value) == assert_values[i]:              #判断返回值中key的value和断言的value是否一致
                    print("PASS")
                    j+=1
                else:
                    print("断言参数不在返回值中")
            else:
                if type(value) is dict:
                    re = assert_result(value,assert_keys)
                    if re is not default:
                        print(re)
    return j

python嵌套字典取值

allGuests = {'Alice': {'apples': 5, 'pretzels': {'12':{'beijing':456}}},
             'Bob': {'ham sandwiches': 3, 'apple': 2},
             'Carol': {'cups': 3, 'apple pies': 1}}
def dictget(dict1,obj,default=None):
    for k,v in dict1.items():
        if k == obj:
            print(v)
        else:
            if type(v) is dict:
                re=dictget(v,obj)
                if re is not default:
                    print(re)
dictget(allGuests,'beijing')

9.列表和字典有什么区别?
答: 一般都是问列表和元组有什么不同。
(1)获取元素的方式不同。列表通过索引值获取,字典通过键获取。
(2)数据结构和算法不同。字典是hash算法,搜索的速度特别快。
(3)占用的内存不同。
10.进程、线程有什么区别?什么情况下用进程?什么情况下用线程?
答:(1)区别:

① 地址空间和其它资源(如打开文件):进程之间相互独立,同一进程的各线程之间共享。某进程内的线程在其它进程不可见。
② 通信:进程间通信 IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
③ 调度和切换:线程上下文切换比进程上下文切换要快得多。
④ 在多线程操作系统中,进程不是一个可执行的实体。
(2)使用场景:同时操作一个对象的时候,比如操作的是一个全局变量,我用线程,因为全局变量是所有线程共享的。
11.什么是ORM?为什么要用ORM?不用ORM会带来什么影响?
答:

ORM框架可以将类和数据表进行对应,只需要通过类和对象就可以对数据表进行操作。
通过类和对象操作对应的数据表,类的静态属性名和数据表的字段名一一对应,不需要写 SQL 语句。
ORM另外一个作用,是根据设计的类生成数据库中的表。
11.说说接口测试的流程,介绍一下 request 有哪些内容。
答:
(1)流程:获取接口文档,依据文档设计接口参数,获取响应,解析响应,校验结果,判断测试是否通过。
(2)request 内容:

① 封装了各种请求类型,get、post 等;
② 以关键字参数的方式,封装了各种请求参数,params、data、headers、token 等;
③ 封装了响应内容,status_code、json()、cookies、url 等;
④ session 会话对象,可以跨请求。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值