• python面试题


    9.
    通过代码实现如下转换:
    
    二进制转换成十进制:v = "0b1111011"
    				
    v = 0b1111011
    
    print(int(v))
    
    ====>123
    十进制转换成二进制:v = 18
    				
    v = 18
    
    print(bin(v))
    
    ===>0b10010
    
    八进制转换成十进制:v = "011"
    				
    v = 0o011
    
    print(int(v))
    
    =====>9
    十进制转换成八进制:v = 30
    				
    v = 30
    
    print(oct(v))
    
    ====>0o36
    
    十六进制转换成十进制:v = "0x12"
    				
    v = 0x12
    
    print(int(v))
    
    ====>18
    十进制转换成十六进制:v = 87
    v = 87
    
    print(hex(v))
    
    ====>0x57
    
    10.
    请编写一个函数实现将IP地址转换成一个整数。
    def transfer_ip(ip='10.3.9.12'):
    ip = '10.3.9.12'
    ip_list = ip.strip().split('.')
    ip_str =''.join(ip_list)
    return ip_str
    print(transfer_ip())

    如 10.3.9.12 转换规则为:
    10 00001010
    3 00000011
    9 00001001
    12 00001100
    再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?

     1
    				def stransfer_ip(ip='10.3.9.12'):
    
     2
    				'''
    			
     3
    				    :param ip: ip地址
    
     4
    				    :return: ip_to_int:IP地址转换成一个整数,
    
     5
    				             transfer_ip:IP元素转换成8位二进制在拼接成一个字符串再转换成的整数
    
     6
    				'''
    			
     7
    				# 将ip字符串按照'.'进行切割成列表
    			
     8     ip_list = ip.strip().split('.')
    
     9
    				# 拼接成字符串 ip_to_int ='103912'
    			
    10     ip_to_int = ''.join(ip_list)
    
    11     bin_ip_str = ''
    			
    12
    				for per_ip in ip_list:
    
    13
    				# 将列表的每一个元素进行10进制转换成二进制,形式是这样的per_ip1 =0b1010
    			
    14         per_ip1 = bin(int(per_ip))
    
    15
    				# 要转换成8位二进制,所以要将0b和缺省的位数用0补齐
    			
    16         per_len = len(per_ip1)
    
    17
    				# 计算每一个元素需要用多少0补齐
    			
    18         zero_count = (10 - per_len) * '0'
    			
    19
    				# 替换并补齐空位
    			
    20         per_ip2 = per_ip1.replace('0b', zero_count)
    
    21
    				# 字符串拼接
    			
    22         bin_ip_str += ''.join(per_ip2)
    
    23
    				# 拼接一个'0b'
    			
    24     bin_ip_str = '0b' + bin_ip_str
    
    25
    				# 二进制转换成10进制
    			
    26     transfer_ip = int(eval(bin_ip_str))
    
    27
    				return ip_to_int, transfer_ip
    

    10.IP转换11.

    11.
    python递归的最大层数?
    写一个简单的递归函数:
    
    def foo(n):
    
    
    					print(n)
    
        n +=1
        foo(n)
    
    foo(1)
    
    最大到998,之后就开始报错,所以python系统默认的应该是998
    
    当然,可以通过以下方法修改默认值
    
    import sys
    
    sys.setrecursionlimit(1500)   #修改成了1500
    			
    12.
    
    求结果:
    
        v1 = 1 or 3   =====>1
        v2 = 1 and 3  =====>3
        v3 = 0 and 2 and 1  ====>0
    
        v4 = 0 and 2 or 1   ====>1
        v5 = 0 and 2 or 1 or 4  ====>1
        v6 = 0 or False and 1  ====>0
    
        v7 = 1 and True ===>True       
    
        v8 = True and 1  ===>1
        V9 = 0 or False ====>False
    
        v10 = False or 1 ===>1
    
    and:判断是真则立即停止后面判断并打印后面一个为真的值,如果是假的继续判断直到为真,如果都为假就取0
    
    or:一个为真立即停止,打印最靠近的值,位假的继续判断直到为真,都为假就取字后一个假
    				

    13.

    ascii、unicode、utf-8、gbk 区别?
    
    ascii:不能表示中文,英文用一个字节表示
    
    unicode:中文和英文都用2个字节表示
    
    utf-8:英文用一个自己表示,中文用3个
    
    gbk:英文用1个字节表示,中文用2个字节表示
    			
    14.
    字节码和机器码的区别?
    字节码和机器码的区别?
    
    字节码:一种中间状态的二进制文件,是编码后的数值常量、引用、指令等构成的序列。
    
    机器码:通常说法为二级制代码,也就是转化成bytes形式的编程代码,是电脑CPU可以直接解读的数据
    			

    15.

    三元运算规则以及应用场景?
    
    满足条件得到前面的值或函数,否则得到后面的值或函数
    
    主要用在if....else
    				判断中,可以在结果中嵌套多个三元运算语句
    

    16.

    列举 Python2和Python3的区别?

    python2

    python3

    python2中有经典类
    python3中所有类都是默认继承object,都是新式类
    print语句,语句就意味着可以直接跟要打印的东西
    print函数,函数就以为这必须要加上括号才能调用

    Python2中使用 ASCII 码作为默认编码方式导致string有两种类型str和unicode

    Python3只支持unicode的string

      

      

    Python2中相对路径的import会导致标准库导入变得困难

    Python3采用的是绝对路径的方式进行import

    Python2中任意两个对象都可以比较

    Python3中只有同一数据类型的对象可以比较

       

       

       










    17.
    用一行代码实现数值交换:
          a = 1
          b = 2
    a,b=b,a
    

    18.

    Python3和Python2中 int 和 long的区别?

    python2中需要自己根据数值大小去判断该用int还是long
    
    python3中取消了long类型数据,会自动判断
    			

    19.

    xrange和range的区别?

    python中有xrange会打印出所有值
    
    python3中取消了xrange只有range,并且python回了保护内存不会立即打印出所有值
    			

    21.

    列举布尔值为False的常见值?

    0,None,' ',False,
    

    22.

    字符串、列表、元组、字典,集合每个常用的5个方法?

    字符串:title(),join(),replace(),strip(),split(),eval()
    
    元组:count(),index()
    
    列表:insert(),extend(),append(),pop(),remove(),sort()
    
    字典:get(),items(),values(),keys(),clear(),copy(),pop(),setdefault()
    
    集合:add(),deference(),discard(),remove(),pop(),symmetric_difference(),union(),intersection_update
    			

    23.

    lambda表达式格式以及应用场景?

    lambda表达式主要是对简单的函数进行简单的表达,
    lamda [
    参数][返回值]
    24.
    
    pass的作用?
    占用而已,不进行任何操作直接跳过
    25.
    
    *arg**kwarg作用
    *args:表示位置参数,**kwargs表示关键字参数,
    在函数定义的过程中一起使用表示可以传入任何参数,
    注意位置参数一定要在关键字参数的前面
    26.
    
    is==的区别?
    
    is :id相等
    ==
    :值相等
    27.
    
    简述Python的深浅拷贝以及应用场景?
    浅拷贝:python中的浅拷贝用copy.copy(),变量如果嵌套多个可变类型只拷贝变量的第一层,
    嵌套的可变类型改变会影响所有拷贝的变量

    深拷贝:python中的深拷贝用copy.deepcopy(),是一个迭代拷贝的过程一直拷贝到不能迭代为止,
    相当于重新建立了一个内存空间保存赋值的变量,变量任何改变都是独立的并不会影响到其它个体
    应用场景:数据备份,声明变量的属性

    注意:切片是浅拷贝
    28.
    
    Python垃圾回收机制?
    当一个变量被声明的时候会自带一个引用计数on_refcnt,每次被引用on_refcnt都会加1,每次引用被删除
    on_refcnt
    就会-1,当on_refcnt变为0的时候就会触发垃圾回收机制,变量被删除,相应的内存被释放
    python
    里面的垃圾回收方式主要有3个:引用计数为主,标记清除和分代收集为辅.
    {
    分代收集:将系统中的所有内存块根据其存活时间划分为不同的集合,每一个集合就成为一个"",
    垃圾收集的频率随着""的存活时间的增大而减小.也就是说,活得越长的对象,就越不可能是垃圾,
    就应该减少对它的垃圾收集频率.那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,
    如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长.

    标记-清除:不改动真实的引用计数,而是将集合中对象的引用计数复制一份副本,改动该对象引用的副本.
    对于副本做任何的改动,都不会影响到对象生命走起的维护
    }
    29.
    Python的可变类型和不可变类型?
    不可变类型(可hash):数值,字符串,元组
    可变类型有(不可hash):列表,字典,集合

    30.

    求结果:
    
   v = dict.fromkeys(['k1','k2'],[])
 
       v[‘k1’].append(666)
    
   print(v)

       v[‘k1’] = 777
    
   print(v)
    
    结果为:
    
    {'k1':[],'k2':[]}     #dict.fromkeys的value的内存空间是公用的
    {'k1':[666],'k2':[666]}
    {'k1':777,'k2':[666]}

    31.

    def num():
        return [lambda x:i*x for i in range(4)]
    print([m(2) for m in num()])
    
    
    结果为:
    [6,6,6,6]

    32.

    列举常见的内置函数?

    add,replace,join,remove,delete,update,divmode,eval,max....

    33.

    filter、map、reduce的作用?

    举几个例子就知道了
    from functools import reduce
    
    li = [4,2,7,5]
    ret = ['name','age','my']
    print(list(map(lambda x:x+'nb',ret)))
    print(reduce(lambda x,y:x+y,li))
    print(list(filter(lambda x:x%2 == 1,li)))
    结果为:

      ['namenb', 'agenb', 'mynb']
      18
      [7, 5]

    map:每一个元素迭代操作
    reduce:数值的运算操作
    filter:过滤结果

    34.

    一行代码实现9*9乘法表

    普通的方式:
    for i in range(1,10):
        print('')
        for j in range(1,i+1):
            print('{}x{}={}'.format(i,j,i*j),end=' ')

    一行代码实现:
    print('
    '.join(['
    '.join(['  '.join('{}X{}={}'.format(i, j, i * j) for j in range(1, i + 1))]) for i in range(1, 10)]))

    35.

    如何安装第三方模块?以及用过哪些第三方模块?

    如何安装第三方模块?以及用过哪些第三方模块?
    在pycharm中安装方法:file-->settings-->project--->projectinterpreter-->点右边的’+‘-->搜索模块-->点下面的installPackage
    在命令行中安装方法: 打开cmd --->输入 pip3 install 模块名
    用过的第三方模块有:json,django,logging,request,importlib,BeautifulSoup,Scrapy

    36.

    至少列举8个常用模块都有那些?

    用过的第三方模块有:json,django,logging,request,importlib,BeautifulSoup,Scrapy,os

    37.

    re的match和search区别?

    match()函数只检测RE是不是在string的开始位置匹配
    search()会扫描整个string查找匹配,会扫描整个字符串并返回第一个成功的匹配

    38.

    什么是正则的贪婪匹配?

    贪婪匹配(.*):匹配符合条件的最大长度
    非贪婪匹配(.*?):匹配符合条件的的最短长度

    39.

    求结果:
 a. [ i % 2 for i in range(10) ]


         b. ( i % 2 for i in range(10) )

    
    			
  • 相关阅读:
    通过TomCat获取html文件时中文乱码
    H5小细节
    jquery中自定义函数被事件调用
    CSS-规则声明
    CSS-继承、层叠、特指
    CSS-伪类
    CSS-属性选择器
    CSS-ID和类选择器
    CSS-上下文选择器
    JQ实现多图片预览和单图片预览
  • 原文地址:https://www.cnblogs.com/dingyutao/p/9231084.html
Copyright © 2020-2023  润新知