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异常

  • 相关阅读:
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 Cowboys
    Java实现 蓝桥杯 算法训练 Cowboys
    55. Jump Game
    54. Spiral Matrix
    50. Pow(x, n)
  • 原文地址:https://www.cnblogs.com/jabbok/p/10317846.html
Copyright © 2011-2022 走看看