zoukankan      html  css  js  c++  java
  • 题目测试

    1. 一行代码实现求和

    sum(range(begin,end+1))
    

    2. 如何在一个函数内部修改全局变量

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

    3. 字典如何删除键和合并两个字典

    del 和 update方法

    dic = {'name':'Alan','age':'18'}
    del dic['name']
    print(dic) # {'age': '18'}
    
    dic2 = {'name':'Klan'}
    dic.update(dic2)
    print(dic) # {'age': '18', 'name': 'Klan'}
    

    4. 谈下Python的GIL

    GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。
    多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大

    5. Python实现列表去重的方法

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

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

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

    args 和**kwargs主要用于函数定义,你可以将不定数量的参数传递给一个函数.这里的不定的意思是:预先并不知道,函数使用者会传递多少个参数给你,
    所以在这个场景下使用这两个关键字.
    args是用来发送一个非关键值对的可变数量的参数列表给一个函数.

    def demo(args_f, *args_v):
          print (args_f)
          for x in args_v:
          print (x)
    
    demo('a','b','c','d')
    a
    b
    c
    d
    

    kwargs允许你将不定长度的键值对,作为参数传递给一个函数.如果你想要在一个函数里处理带名字的参数,你应该使用kwargs.

    def demo(**args_v):
          for k,v in args_v.items():
                print(k, v)
    
    demo(name = 'Alan')  # name Alan
    

    7.简述面向对象中__new__和__init__区别

    __init__是初始化方法,创建对象后,就立刻被默认调用了,可接收参数.

    class Bike:
          def __init__(self, newWheelNum, newColor):
                self.wheelNum = newWheelNum
                self.color = newColor
          
          def move(self):
                print('车会跑')
    # 创建对象
    BM = Bike(2, 'green')
    
    print('车的颜色为:%s' % BM.color)  # 车的颜色为:green
    print('车轮数量为:%s' % BM.wheelNum)  # 车轮数量为:2
    

    1、__new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别
    2、__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例
    3、__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值
    4、如果__new__创建的是当前类的实例,会自动调用__init__函数,通过return语句里面调用的__new__函数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,;那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__函数,也不会调用其他类的__init__函数。

    class A(object):
          def __init__(self):
                print('这是 init 方法', self)
          def __new__(cls):
                print('这是cls的ID', id(cls))
                print('这是new方法',object.__new__(cls))
                return object.__new__(cls)
    A()
    print('这是类A的ID', id(A))
    '''
    这是cls的ID 42010392
    这是new方法 <__main__.A object at 0x7f65d7093a58>
    这是 init 方法 <__main__.A object at 0x7f65d7093a58>(init方法中的self和new方法返回值地址一样说明返回值是对象)
    这是类A的ID 42010392
    (cls和类ID一样,说明指向同一个类,也就是cls就是创建的实例类)
    '''
    

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

    f = open("./1.txt", "wb")
    try:
          f.write("hello world")
    except:
          pass
    finally:
          f.close()  # 生成一个1.txt文件
    '''
    打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的f.open
    写法,我们需要try,except,finally,做异常判断,并且文件最终不管遇到什么情况,
    都要执行finally f.close()关闭文件,with方法帮我们实现了finally中f.close
    '''
    with open( '/path/to/file', 'r' ) as f:  # with的作用就是调用close()方法
    	print( f.read() ) 
    '''
    调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了。
    要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。例如,read(1024) 每次读取1024个字节的数据内容
    调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。
    如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:
    '''
    

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

    map()函数第一个参数是fun,第二个参数一般是list,第三个参数可以写list,也可以不写,根据需求

    list = [1, 2, 3, 4, 5]
    def fn(x):
          return x**2
    
    res = map(fn, list)
    print(res)  # <map object at 0x7f776605ffd0>
    res = [i for i in res if i > 10]
    print(res)  # [16, 25]
    

    10. python中生成随机整数、随机小数、0~1之间小数方法

    import numpy
    import random
    
    # print(numpy.random.randn(5))
    result = random.randint(10, 20)
    result1 = numpy.random.randn(5)
    result2 = random.random()
    print(result)  # 12 正整数
    print(result1)  # [0.81075497 0.78092836 0.06221569 0.51125404 0.91506187] 五个随机小数
    print(result2)  # 0.4374961761162436 0~1之间随机小数
    

    11.

    题目: <div class="nam">中国</div>,用正则匹配出标签里面的内容(“中国”),其中class的类名是不确定的

    import re
    str = '<div class="nam">中国</div>'
    res = re.findall(r'<div class=".*">(.*?)</div>', str)
    print(res)  # ['中国']
    '''
    .代表可有可无
    *代表任意字符
    (.*?)提取文本
    '''
    

    12. 数据表student有id,name,score,city字段,其中name中的名字可有重复,需要消除重复行,请写sql语句

    select distinct name from student;
    

    13. s = "ajldjlajfdljfddd",去重并从小到大排序输出"adfjl"

    方法:set去重,去重转成list,利用sort方法排序,reeverse=False是从小到大排
    list是不变数据类型,是s.sort时候没有返回值,所以注释的代码写法不正确

    s = "ajldjlajfdljfddd"
    s = set(s)
    s = list(s)
    s.sort(reverse=False)
    # s = s.sort(reverse=False)
    res = "".join(s)
    print(res)  # adfjl
    

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

    sum = lambda a,b:a*b
    print(sum(5,4))  # 20
    
    Live what we love, do what we do, follow the heart, and do not hesitate.
  • 相关阅读:
    关于C的一些理解
    Linux下/proc目录简介
    python学习链接
    “段寄存器”的故事[转](彻底搞清内存段/elf段/实模式保护模式以及段寄存器)
    内核态与用户态
    bzoj1087: [SCOI2005]互不侵犯King 状压dp
    bzoj1007: [HNOI2008]水平可见直线 单调栈维护凸壳
    bzoj1015: [JSOI2008]星球大战starwar
    bzoj1002: [FJOI2007]轮状病毒 生成树计数
    bzoj1013: [JSOI2008]球形空间产生器sphere
  • 原文地址:https://www.cnblogs.com/failan/p/14027014.html
Copyright © 2011-2022 走看看