1-面试题:python

  1. 列表和元组的区别
    1. 列表是动态的长度可变可以对元素进行增、删、改操作;列表存储空间略大于元组,性能略逊于元组;
    2. 元组是静态的长度大小固定不可以对元素进行增、删、改操作;元组相对于列表更加轻量级,性能稍优;
  2. 字典和集合
    1. 字典是有序的数据结构,而集合是无序的,其内部的哈希表存储结构,保证了其查找、插入、删除操作的高效性;
    2. 所以,字典和集合常用于元素的高效查找、去重等场景
  3. 面向对象的封装、继承、多态
    1. 封装即类,一群有着相同属性和方法的对象的集合;
    2. init表示构造函数,即一个对象生成时会被自动调用的函数;
    3. 继承,一个类拥有另一个类的特征,也拥有不同于另一个类的独特特征特征就是属性和方法
    4. 多态,一类事物有多种形态,不同的子类对象调用相同的方法,产生不同的执行结果,以此增加代码的灵活度;
  4. 什么是装饰器和闭包
    1. 装饰器,通过装饰器函数,来修改原函数的一些功能,使得原函数不需要修改;常用于计算函数运行时间、计算函数运行次数、身份认证、日志记录、输入合理性检查以及缓存;
    2. 类别有:函数装饰器、类装饰器、装饰器可带参数、装饰器的嵌套
    3. 闭包:如果在一个内部函数里,对外部作用域的变量进行引用,那么内部函数就是闭包;满足闭包的条件,1、必须有一个内嵌函数2、内函数必须引用外函数的变量3、外函数必须返回内函数
    4. 复制代码
      //身份认证装饰器
      import functools
      
      def authenticate(func):
          @functools.wraps(func)
          def wrapper(*args,**kwargs):
              requests = args[0]
              if check_user_logged_in(request):
                  return func(*args,**kwargs)
              else:
                  raise Exception('Authentication failed')
          return wrapper
          
      @authenticate
      def post_comment(request,...):
          ...
      复制代码
    5. 复制代码
      //日志记录装饰器
      import time
      import functools
      
      def log_execution_time(func):
          @functools.wraps(func)
          def wrapper(*args,**kwargs):
              start = time.perf_counter()
              res = func(args,**kwargs)
              end = time.perf_counter()
              print('{} took {} ms'.format(func.__name__,(end-start)*1000))
              return res
          return wrapper
      
      @log_execution_time
      def decorators(items):
          print(1)
          time.sleep(2.0)
          print(2)
          print(items)
      
      decorators()
      复制代码

       

posted @   tester20183450  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示