• 那些刁钻的名企面试题你会做吗——python100面试题


    python 基础题(文末有惊喜哦,面试题领取

    1.进制间的转换

    进制的转换可以采用内置函数的方式进行数据的转换,也可以使用int来转换,是将所需转换的数字按照某个进制的规则进行转换,最后转换的结果均为int类型

    number = 20
    
    # 方式一
    # 二进制
    print(bin(number))
    # 八进制
    print(oct(number))
    # 十六进制
    print(hex(number))
    # 十进制
    print(int(number))
    
    # 方式二,只能转换为最后的int类型
    # 将数字转按照八进制转换为int类型
    print(int(str(number), base=8))
    # 将数字转按照十六进制转换为int类型
    print(int(str(number), base=16))
    # 将0b二进制字符串按照二进制转换为int类型数字
    print(int(str(bin(number)), base=2))
    0b10100
    0o24
    0x14
    20
    16
    32
    20

    需要注意的是,在python中,二进制、八进制、十六进制在输出显示时都会以十进制进行显示,但无需过多关注

    b_number = 0b10100
    print(b_number)
    o_number = 0o24
    print(o_number)
    h_number = 0x14
    print(h_number)

    2.最大递归数

    通过以下简易的函数可以看出最大递归数

    def recursion(n):
        print(n)
        n += 1
        recursion(n)
    
    
    recursion(1)

    受python版本不同,最大递归数也存在不同

    python2.7: 1000, 在第1000次调用此函数时会出现异常
    python3.6: 998, 在998次调用此函数时会出现异常

    可以手动设置最大递归数的数量

    import sys
    sys.setrecursionlimit(1200)

    目前发现,当全部设置最大递归数为1200时,python2.7会在1200次报错,但python3.6会在1198次报错,相较少2次,依次可推出,默认的最大递归数应该是1000(第一次函数调用也算进去的话)。

    3.and、not、or运算符优先级

    对象返回结果优先顺序
    not xif x is false,then True,else False1
    x and yif x is false,then x,else y2
    x or yif x is false,then y,else x3
    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 # False
    1
    3
    0
    1
    1
    False

    需要注意的是在python中,0也是代表False

    4.三元运算符,三目运算符

    在python中不存在如下注释的三元运算符,但是由三目运算符代替,可以将简单的条件分支语句写成一行,适用于需要将代码简化的场景,且相比较多行分支效率快一点。

    a = 10
    # print(a > 2 ? a : 0)
    
    print(a if a > 2 else 0)

    5.python2与python3区别

    1.python2 True、False可以作为一个变量,可以对其进行赋值及取值,python3则不可以, True、False作为关键字无法修改

    True = 1
    print(True)
    
    False = 0
    print(False)

    python2

    python3

    True = 1
        ^
    SyntaxError: can't assign to keyword

    2.python2默认使用ASCII编码,对中文需要手动添加文档头注释, python3则不需要

    print('你好')

    python2

    File "/home/ts/flask_study/interview/05python2和python3的区别.py", line 12
    SyntaxError: Non-ASCII character '\xe4' in file /home/ts/flask_study/interview/05python2和python3的区别.py on line 12, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

    需在py文件最上方添加如下注释

    # -*- coding:utf-8 -*-

    python3:则没有影响

    你好

    3.python2的range返回一个list,资源消耗较大,python3返回一个可迭代对象,资源消耗较小,可使用for循环进行结果的迭代输出,python3的range取代了xrange。

    data = range(10)
    print(data)
    print(type(data))
    
    from typing import Iterable, Iterator, Generator
    print(isinstance(data, Iterable))
    print(isinstance(data, Iterator))
    print(isinstance(data, Generator))

    python2

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    python3

    range(0, 10)
    
    True
    False
    False

    4.python3引入nonlocal关键字,方便内部函数读取和修改外部函数的值,当内部函数读取和修改外部函数的值时,则外部函数和内部函数形成了闭包

    def outter():
        number = 10
        def inner():
            nonlocal number
            number += 1
            print(number)
        return inner
    
    
    outter()()

    python2

    UnboundLocalError: local variable 'number' referenced before assignment

    python3

    5.xreadlines、readlines读取文件,python2存在xreadlines,返回的是文件对象,资源消耗少,python3无xreadlines, python2、python3返回的readlines都是一个list, 建议可以直接迭代遍历open获得的对象

    import os
    
    file_path = os.path.join(os.path.dirname(__file__), "01进制转换.py")
    print(file_path)
    with open(str(file_path), mode="r") as f:
        print(f)
        print(type(f))
        # print(isinstance(f, Iterable))
        for line in f:
            print(line)
        # lines = f.xreadlines()
        lines = f.readlines()
        print(lines)
        print(type(lines))

    更多待更新中

    6.布尔值为False的值

    print(bool(0))
    print(bool(None))
    print(bool([]))
    print(bool({}))
    print(bool(""))
    print(bool(0j))

    7.字符串、列表、元组、字典每个常用的5个方法?

    字符串

    str_data = 'adminasdasd asdasd'
    # 计算字符串中的元素出现次数
    print(str_data.count('a'))
    # 全部转为大写
    print(str_data.upper())
    # 以什么开头,可以指定开始的位置
    print(str_data.startswith('a'))
    # 截取字符串,使用较多
    print(str_data.split('a'))
    # 只在字符串首部将首字母大写
    print(str_data.capitalize())
    # 在字符串中的每个单词首字母大写
    print(str_data.title())
    # 字符串居中 前后补空格
    print(str_data.center(22))
    # 字符串前面补0
    print(str_data.zfill(22))
    5
    ADMINASDASD ASDASD
    True
    ['', 'dmin', 'sd', 'sd ', 'sd', 'sd']
    Adminasdasd asdasd
    Adminasdasd Asdasd
      adminasdasd asdasd  
    0000adminasdasd asdasd

    列表

    list_data = [1,2,3,4, [5,6]]
    # 添加元素
    list_data.append(11)
    print(list_data)
    # 浅拷贝列表数据, 当修改其中的可变对象时,原有对象会发生改变
    copy_list_data = list_data.copy()
    print(copy_list_data)
    copy_list_data[4].append(4)
    print(list_data)
    print(copy_list_data)
    # 删除对应值的元素
    list_data.remove(3)
    print(list_data)
    # 统计某个元素出现的次数
    print(list_data.count(1))
    # 两个列表合并
    list_data.extend(copy_list_data)
    print(list_data)
    # 列表排序,元素需要是同类型, 默认是升序
    # list_data.sort()
    print(list_data)
    # 在指定下标插入元素
    list_data.insert(0, -1)
    print(list_data)
    # 删除对应下标的元素
    list_data.pop(4)
    print(list_data)
    [1, 2, 3, 4, [5, 6], 11]
    [1, 2, 3, 4, [5, 6], 11]
    [1, 2, 3, 4, [5, 6, 4], 11]
    [1, 2, 3, 4, [5, 6, 4], 11]
    [1, 2, 4, [5, 6, 4], 11]
    1
    [1, 2, 4, [5, 6, 4], 11, 1, 2, 3, 4, [5, 6, 4], 11]
    [1, 2, 4, [5, 6, 4], 11, 1, 2, 3, 4, [5, 6, 4], 11]
    [-1, 1, 2, 4, [5, 6, 4], 11, 1, 2, 3, 4, [5, 6, 4], 11]
    [-1, 1, 2, 4, 11, 1, 2, 3, 4, [5, 6, 4], 11]

    元组

    tuple_data = (1,2,3,4,5,1,5)
    # 统计元素出现的次数
    print(tuple_data.count(1))
    # 获取某个下标的元素
    print(tuple_data.index(1))

    字典

    dict_data = {"name":"tom", "age":10, "gender":"man"}
    dict_data2 = {"city":"nanjing"}
    # 获取字典的所有keys
    print(dict_data.keys())
    # 获取字典的所有values
    print(dict_data.values())
    # 获取字典的所有键值对,元组形式展示
    print(dict_data.items())
    # 合并两个字典
    dict_data.update(dict_data2)
    print(dict_data)
    # 获取字典中的元素,可以设置默认值
    print(dict_data.get('name', None))
    # 删除字典中的元素
    dict_data.pop('age')
    print(dict_data)
    # 生成新字典,取出字典的key, 设置默认的value值,默认value为None
    print(dict_data.fromkeys(dict_data.copy(), "no data"))
    # 删除字典中的元素,默认删除最后一个元素
    dict_data.popitem()
    print(dict_data)
    # 获取字典中元素的值,当对应key不存在时会主动设置对应的key及返回设置的值, 当key存在时,此函数与get使用一致
    print(dict_data.setdefault('age', 10))
    print(dict_data)
    # 清空字典
    dict_data.clear()
    print(dict_data)
    dict_keys(['name', 'age', 'gender'])
    dict_values(['tom', 10, 'man'])
    dict_items([('name', 'tom'), ('age', 10), ('gender', 'man')])
    {'name': 'tom', 'age': 10, 'gender': 'man', 'city': 'nanjing'}
    tom
    {'name': 'tom', 'gender': 'man', 'city': 'nanjing'}
    {'name': 'no data', 'gender': 'no data', 'city': 'no data'}
    {'name': 'tom', 'gender': 'man'}
    10
    {'name': 'tom', 'gender': 'man', 'age': 10}
    {}

    8.lambda使用方法及使用场景

    def sum(m,n):
        return m+n
    
    print(sum(1,2))
    sum2 = lambda m,n:m+n
    print(sum2(1,2))

    lambda主要是针对于函数进行简化代码操作,但只能进行简单代码的简化,复杂代码不建议使用lambda,

    使用场景

    1.map、reduce、filter等进行序列处理时使用

    l = list(range(1, 10))
    data = map(lambda n:n*n, l)
    print(list(data))
    
    from functools import reduce
    data = reduce(lambda m,n:m*n, l)
    print(data)
    [1, 4, 9, 16, 25, 36, 49, 64, 81]
    362880

    2.lambda与list相结合, 注意lambda只会记录最后一次的状态,不会记录中间过程的状态

    l2 = [lambda:i for i in range(10)]
    print(l2[0]())
    print(l2[3]())

    9.pass的作用

    pass主要就是在代码实现过程中,暂时没有想好怎么实现的时候,一般在函数、方法中使用较多,避免因为函数或方法中没有内容导致报错

    10.*arg和**kwarg作用

    在函数或方法中, *args会将元素转换为元组, **kwargs会将x=y类似的元素转换为字典

    def run(*args, **kwargs):
        print(args)
        print(kwargs)
    
    run(1,2,a=1,b=2)
    (1, 2)
    {'a': 1, 'b': 2}

    点击 面试题 领取腾讯文档-在线文档https://docs.qq.com/doc/DT09DZ1hSYkJORURY

  • 相关阅读:
    有趣的statement stack
    终于拿到了阿里P8架构师分享的JCF和JUC源码分析与实现笔记java岗
    灰鸽子木马特征值免杀
    【Spring Cloud系列】Feign详解与实战
    【数学】【位运算】Divan and bitwise operations—CF1614C
    零号培训平台课程-1、SQL注入基础
    8、【办公自动化】Python实现PDF文件的批量操作
    ServletConfig 和 ServletContext
    UnityShader(六)透明效果
    java高级用法之:JNA类型映射应该注意的问题
  • 原文地址:https://blog.csdn.net/m0_59485658/article/details/126043934