python笔试常考题目(二)

  1. 列出5个python标准库

    os:提供了不少与操作系统相关联的函数

    sys:通常用于命令行参数

    re: 正则匹配

    math: 数学运算

    datetime:处理日期时间

    json: 处理字典和Json格式

    urllib,types,cmath,,

  2. python实现列表去重的方法

    先通过集合去重,在转列表

  3. fun(args,**kwargs)中的args,**kwargs什么意思?

    可选参数,关键字参数。

  4. python2和python3的range(100)的区别

    python2返回列表,python3返回迭代器,节约内存

  5. 简述with方法打开处理文件帮我我们做了什么?

    打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的f.open

    写法,我们需要try,except,finally,做异常判断,并且文件最终不管遇到什么情况,都要执行finally f.close()关闭文件,with方法帮我们实现了finally中f.close

  6. python中断言方法举例

    assert()方法,断言成功,则程序继续执行,断言失败,则程序报错

  7. 10个Linux常用命令

    ls pwd cd touch rm mkdir tree cp mv cat more grep echo

  8. python2和python3区别?列举5个

    1、Python3 使用 print 必须要以小括号包裹打印内容,比如 print(‘hi’)

    Python2 既可以使用带小括号的方式,也可以使用一个空格来分隔打印内容,比如 print ‘hi’

    2、python2 range(1,10)返回列表,python3中返回迭代器,节约内存

    3、python2中使用ascii编码,python中使用utf-8编码

    4、python2中unicode表示字符串序列,str表示字节序列

       python3中str表示字符串序列,byte表示字节序列
    

    5、python2中为正常显示中文,引入coding声明,python3中不需要

    6、python2中是raw_input()函数,python3中是input()函数

  9. 列出python中可变数据类型和不可变数据类型,并简述原理

    不可变数据类型:数值型、字符串型string和元组tuple

    可变数据类型:列表list和字典dict;

    允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。

  10. 用lambda函数实现两个数相乘

    def mul(data, fuc):
        one_data = data[0]
        two_data = data[1]
        res = fuc(one_data, two_data)
        return res
    
    list=[2,3]
    print(mul(list,lambda x,y:x*y))
    
  11. 利用collections库的Counter方法统计字符串每个单词出现的次数"kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"

    a="kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
    from collections import Counter
    c=Counter(a)
    print(c)
    #Counter({'l': 9, ';': 6, 'h': 6, 'f': 5, 'a': 4, 'j': 3, 'd': 3, 's': 2, 'k': 1, 'g': 1, 'b': 1})
    
  12. 字符串a = “not 404 found 张三 99 深圳”,每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳"

    import re
    a = "not 404 found 张三 99 深圳"
    l1 = a.split(" ")
    res = re.findall('\d+|[a-zA-Z]+',a)
    for i in res:
        if i in l1:
            l1.remove(i)
    new_str = " ".join(l1)
    print(new_str)
    
  13. 正则re.complie作用

    re.compile是将正则表达式编译成一个对象,加快速度,并重复使用

  14. 用python删除文件和用linux命令删除文件方法

    python:os.remove(文件名)

    linux: rm 文件名

  15. 写一段自定义异常代码

    自定义异常用raise抛出异常

  16. 正则表达式匹配中,(.)和(.?)匹配区别?

    (.*)是贪婪匹配,会把满足正则的尽可能多的往后匹配

    (.*?)是非贪婪匹配,会把满足正则的尽可能少匹配

  17. 举例说明异常模块中try except else finally的相关意义

    try…except…else没有捕获到异常,执行else语句

    try…except…finally不管是否捕获到异常,都执行finally语句

  18. a=“张明 98分”,用re.sub,将98替换为100

    import re
    a=“张明 98分”
    ret = re.sub(r’\d+’,‘100’,a)
    print(ret)

  19. 遇到bug如何处理

    1、细节上的错误,通过print()打印,能执行到print()说明一般上面的代码没有问题,分段检测程序是否有问题,如果是js的话可以alert或console.log

    2、如果涉及一些第三方框架,会去查官方文档或者一些技术博客。

    3、对于bug的管理与归类总结,一般测试将测试出的bug用teambin等bug管理工具进行记录,然后我们会一条一条进行修改,修改的过程也是理解业务逻辑和提高自己编程逻辑缜密性的方法,我也都会收藏做一些笔记记录。

    4、导包问题、城市定位多音字造成的显示错误问题

  20. 正则匹配,匹配日期2018-03-20

    url=‘https://sycm.taobao.com/bda/tradinganaly/overview/get_summary.json?dateRange=2018-03-20%7C2018-03-20&dateType=recent1&device=1&token=ff25b109b&_=1521595613462’

    import re
    reg = r’.(\d±\d±\d+).’
    res = re.findall(reg,url)
    print(res)

  21. python中copy和deepcopy区别

    1、复制不可变数据类型,不管copy还是deepcopy,都是同一个地址当浅复制的值是不可变对象(数值,字符串,元组)时和=“赋值”的情况一样,对象的id值与浅复制原来的值相同。
    2、复制的值是可变对象(列表和字典)

    浅拷贝copy有两种情况:

    第一种情况:复制的 对象中无 复杂 子对象,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。

    第二种情况:复制的对象中有 复杂 子对象 (例如列表中的一个子元素是一个列表), 改变原来的值 中的复杂子对象的值 ,会影响浅复制的值。
    深拷贝deepcopy:完全复制独立,包括内层列表和字典

  22. 列出几种魔法方法并简要介绍用途

    __init__:对象初始化方法
    
    __new__:创建对象时候执行的方法,单列模式会用到
    
    __str__:当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据
    
    __del__:删除对象执行的方法
    
  23. C:\Users\ry-wu.junya\Desktop>python 1.py 22 33命令行启动程序并传参,print(sys.argv)会输出什么数据?

    ['1.py','22','33']
    
  24. 请将[i for i in range(3)]改成生成器

    (i for i in range(3))
    
  25. 对list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],使用lambda函数从小到大排序

    res = sorted(foo,key=lambda x:x)
    print(res)
    
  26. 使用lambda函数对list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],输出结果为
    [0,2,4,8,8,9,-2,-4,-4,-5,-20],正数从小到大,负数从大到小

    res = sorted(foo,key=lambda x:(x<0,abs(x)))
    print(res)
    
  27. s=“info:xiaoZhang 33 shandong”,用正则切分字符串输出[‘info’, ‘xiaoZhang’, ‘33’, ‘shandong’]

    s = "info:xiaoZhang 33 shandong"
    import re
    
    pattern = re.compile(r'\d+|[a-zA-Z]+')
    res = re.findall(pattern, s)
    print(res)
    for i in res:
        if not i:
            res.remove(i)
    print(res)
    
  28. 正则匹配以163.com结尾的邮箱

  29. 列举3条以上PEP8编码规范

    1、顶级定义之间空两行,比如函数或者类定义。

    2、方法定义、类定义与第一个方法之间,都应该空一行

    3、三引号进行注释

    4、使用Pycharm、Eclipse一般使用4个空格来缩进代码

  30. r、r+、rb、rb+文件打开模式区别

    r:只读模式
    r+:读写,可以写,内容在文件最开头
    rb:二进制读取非文本。
    rb+:读取打开一个二进制文件,允许读写数据,文件必须存在

  31. python传参数是传值还是传址?

  32. 不可变参数传递:像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变不可改变的对象。

  33. 可变对象的传参:比如像列表,字典这样的对象是通过引用传递,和C语言里面的指针传递数组很相似,可能对象能再函数内部改变。

  34. find和grep(linux)

grep命令是一种强大的文本搜索工具,grep搜索内容串可以是正则表达式,允许对文本文件进行模式查找。如果找到匹配模式,grep打印包含模式的所有行。

find通常用来再特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。
  1. 如何提高python的运行效率?

    1. 使用生成器;
    2. 关键代码使用外部功能包(Cython,pylnlne,pypy,pyrex);
    3. 针对循环的优化–尽量避免在循环中访问变量的属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值