zoukankan      html  css  js  c++  java
  • python面试题

     

    1.一行代码实现1-100的和

    print(sum(range(1,101)))
    #range中的参数是1<=i<101
    #sum是计算参数的和
    

      

    2.在函数内部改变全局变量

    a = 5
    def foo1():
        global a
        a = 4
    foo1()
    print(a)
    

      

    3.列出5个python标准库

    time,获取时间戳,时间等。

    os获取系统信息,如目录,pid。

    subprocess,与linux shell交互

    re,正则表达式,如match,findall,search

    sys,获取程序的参数,路径,退出消息等

    psutil,获取系统运行状态,如cpu,mem,disk,net。

    4.如何删除字典中的元素,如何更新元素的值,如何合并两个字典

    dictA = {'age':18,'name':'jab'}
    del dictA['age']    #删除一个键值对
    dictA['name'] = 'eric'  #改变一个key的value
    tel = {'tel':'131111111'}
    dictA.update(tel)   #将tel字典合并到dictA字典
    print(dictA)
    

      

    5 如何删除列表中的元素,如何将删除的元素赋值给变量,如何在列表头部插入元素,如何在列表尾部插入元素

    listA = [1,2,3]
    del listA[0]    #删除index=0的元素
    num = listA.pop(-1) #将index为-1的元素弹出,赋值给num
    listA.insert(0,1)   #在index为0的位置插入元素1
    listA.append(3)     #在尾部追加元素3
    

      

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

    *args 传递多个值时使用

    **kwargs 传递多组关键字时使用,比如django中的model定义,可能会有多组关键字,后面的函数就会用它作为形参

        appid = models.IntegerField(primary_key=True)
    

      

    7 什么样的语言能使用装饰器?

    函数能作为参数传递的语言

    8 面向对象中__new__和__init__的区别

    init是初始化方法,对象创建后,就被调用,并且可以接受参数。

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

    f = open('admin.py','r')
    try:
        str = f.read()
        print(str)
    except:
        pass 
    finally:
        f.close()
    #这样打开文件,需要处理异常,还要在finally里关闭文件
    #with中会自己close,也可以处理异常
    

      

    10.列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]

    listA = [1,2,3,4,5]
    
    def fn(i):
        return i*i
    
    listB = map(fn,listA)
    listC = [i for i in listB if i > 10]
    print(listC)
    #map()是 python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的object并返回。(python2返回列表,Python3返回迭代对象)
    #[i for i in listB if i > 10]为列表推导式,把listB中大于10的元素给listC
    

      

     11 解释 Python 中的三元表达式

    根据一个表达式判断,x的值是什么。

    a = 1
    b = 2
    x = a if a > b else b
    

      

    12 python如何实现多线程

    13 join()和split的区别

    join是把一个字符串的字典组成成一个字符串,用确定的分隔符。

    split是把一个字符串按特定分隔符转化成一个列表

    13 如何删除字符串中的前置空格,或者最后的/字符。

    前置 lstrip(' ') 后置 rstrip('/')

    14 改字母大小写,查字母大小写

    str.lower 改小写

    str.upper 改大写

    str.islower 判断是否小写,字符串需要全部小写

    str.ipupper  判断是否大写,字符串需要全部大写

    答:要把bytes类型解码为str类型的时候,ascii码不能解码,因为这个bytes不是由ascii码编码的,可以换一个试试,像utf-8,gbk。

    正则表达式

    python里match()和search()的区别

    import re
    
    sql = 'select * from table'
    
    match_sql =  re.match('from',sql)
    print(match_sql)
    
    search_sql  = re.search('from',sql)
    print(search_sql.span())
    -->
    None
    (9, 13)
    
    #match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配;
    #span()用于给出匹配字符范围
    

    写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。

    #输入文件名和匹配字符串,返回出现次数
    def countof(file_name,str):
    
        with open(file_name,'r') as file_obj:
            parse = file_obj.read()
            count = len(re.findall(str,parse))
            return count
    

      

    列表字典字符处理

    python如何实现tuple和list的转换

    t = (1,2,3)
    l = [2,3,4]
    print(list(t))
    print(tuple(l))
    

    写一段python代码,删除列表里的重复元素(删除字符串里的重复字符)

    list1 = [1,2,3,4,2,3,4]
    s1 = set(list1)
    print(s1)
    
    str1 = 'google'
    s2 = set(str1)
    print(s2)
    -->
    {1, 2, 3, 4}
    {'g', 'l', 'o', 'e'}
    #set函数将list或str里的重复项删除,并返回一个无序字典
    

    上下文管理

    设计一个类Foo,使其满足以下代码输出

    with Foo() as a:
      print("2")
    输出为:123 (每个整数数字为一行)
    class Foo():
        def __enter__(self):
            print('1')
        def __exit__(self, exc_type, exc_val, exc_tb):
            print('3')
    
    with Foo() as a:
        print('2')
    #将Foo()这个类赋值给a
    #在执行with下面的语句之前,会调用__enter__方法
    #执行完之后,会执行__exit__方法。
    
    
    #扩展
    class foo():
        def __enter__(self):
            return self
    
        def __exit__(self, exc_type, exc_val, exc_tb):
            print('type',exc_type)
            print('value',exc_val)
            print('trace',exc_tb)
    
        def func1(self):
            pass
    
    with foo() as foo:
        foo.func1()
    #将foo()赋值给foo,可知返回一个实例
    #然后执行这个实例下的func1函数
    #如果with下面的代码有异常,__exit__就被执行
    #开发库时,清理资源,关闭文件等等操作,都可以放在__exit__方法当中。
    #Python的with语句是提供一个有效的机制,让代码更简练,同时在异常产生时,清理工作更简单。
    

      

    装饰器

    设计一个装饰器"addhttp",使其满足以下代码输出
    @addhttp
    def test():
        return www.changyou.com
    print(test()) #输出为http://www.changyou.com
    def addhttp(func):
        def wrapper(*args,**kwargs):
            return  "http://%s" %func()
        return wrapper
    

      

    设计一个装饰器,在函数执行前先执行附加功能

    def add_func(func):
        def wrapper():
            print('[DEBUG]:func {}() start'.format(func.__name__))
            func()
        return wrapper()
    

      

    迭代器&生成器

    1)迭代器是一个更抽象的概念,任何对象,如果它的类有next方法和iter方法返回自己本身。对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数,iter()是python的内置函数。iter()会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()也是python的内置函数。在没有后续元素时,next()会抛出一个StopIteration异常

    2)生成器(Generator)是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,只是在需要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)

    区别:生成器能做到迭代器能做的所有事,而且因为自动创建了__iter__()和next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。除了创建和保存程序状态的自动方法,当发生器终结时,还会自动抛出StopIteration异常

  • 相关阅读:
    图像滤镜艺术---乐高像素拼图特效滤镜的代码实现
    假设你也23
    seajs载入流程图
    android 怎样将主菜单图标改成按安装时间排序
    热力学第一定律的社会学思考
    Django创建数据表
    KeyPress 和KeyDown 、KeyPress之间的区别
    Delphi 制作自定义数据感知控件并装入包(dpk文件)中(与DBText类似的数据感知控件)
    Delphi中的窗体创建与销毁
    Delphi ADOQuery连接数据库的查询、插入、删除、修改
  • 原文地址:https://www.cnblogs.com/jabbok/p/10317846.html
Copyright © 2011-2022 走看看