zoukankan      html  css  js  c++  java
  • 【归纳】面试中常见的python基础知识

    在这篇文章中,我们将归纳一些面试中常见的python基础知识:

    python中的深浅拷贝

    浅拷贝:数据半共享(复制其数据独立内存存放,但只针对第一层数据)

    l1 = [1,2,3,[11,22,33]]
    l2 = l1.copy()  # 浅拷贝,只拷贝第一层
    print(l2) #[1,2,3,[11,22,33]]
    l2[3][2]='aaa'  # 数据中的第二层是共享内存的
    print(l1) #[1, 2, 3, [11, 22, 'aaa']]
    print(l2) #[1, 2, 3, [11, 22, 'aaa']]
    l1[0]= 0  # 数据中的第一层是相互独立的,修改时互不影响
    print(l1) #[0, 2, 3, [11, 22, 'aaa']]
    print(l2) #[1, 2, 3, [11, 22, 'aaa']]
    print(id(l1)==id(l2)) #Flase
    

    深拷贝:数据完全不共享(复制其数据完完全全放独立的一个内存,完全拷贝,数据不共享)

    import copy
    l1 = [1, 2, 3, [11, 22, 33]]
    l2 = copy.deepcopy(l1)  # 深拷贝
    print(l1,'>>>',l2)
    l2[3][0] = 1111
    print(l1,">>>",l2)  #  深拷贝就是彻底地复制了一份全新的变量,它们数据不会互相影响,因为内存不共享
    

    获取变量地址:

    id(object)
    

    切片及切片赋值

    a = [1, 2, 3]
    b = a[:]  # 切片
    a[1:] = []  # 切片赋值
    
    • 切片是浅拷贝,不影响原序列;
    • 切片赋值是针对原序列进行操作,改变切片区域的序列。

    交换变量,要求不使用临时变量

    # 方法1:
    x,y = y,x
    
    # 方法2:
    x = x + y
    y = x - y
    x = x - y
    

    python装饰器中,@property一般用来做啥?

    • 使用场景:
      • 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,存在安全性隐患。
      • 如果用set和get方法,虽然可以检查参数,但用起来比较麻烦。
    • 功能:@property装饰器可以把一个方法变成属性,使它既能像属性一样操作,同时又具备set和get的安全性保护:
    class Student(object):
    
        @property
        def score(self):
            return self._score
    
        @score.setter
        def score(self, value):
            if not isinstance(value, int):
                raise ValueError('score must be an integer!')
            if value < 0 or value > 100:
                raise ValueError('score must between 0 ~ 100!')
            self._score = value
    

    @property修饰的变量可以通过只定义getter方法,不定义setter方法,实现只读属性

    python中的with语句

    • 有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄

    • with的工作方式:

      • with所求值的对象必须有一个__enter__()方法,一个__exit__()方法
      • 紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法
    • with真正强大之处是它可以处理异常:注意到__exit__方法有三个参数- val, type 和 trace。当异常抛出时,与之关联的type,value和stack trace传给__exit__()方法

    Python 中复数的表示方法

    • 表示复数的语法是real + image j
    • Python中复数的实部与虚部均为浮点数
    • 虚部的后缀可以是 “j” 或者 “J”
    • 复数的 conjugate 方法可以返回该复数的共轭复数
    • 官方文档:Python3 Numeric Types
  • 相关阅读:
    内存使用过高点检checklist
    Ubuntu linux系统下 su:出现: authentication failure的解决办法
    static完全解析
    C语言开发规范
    单片机、ARM、PC程序执行介质区别
    2021来了,一份小菜鸡的2020总结!
    Linux命令进阶篇-文件查看与查找
    LINUX常用命令(二)
    Linux常用命令(一)
    百钱百鸡
  • 原文地址:https://www.cnblogs.com/lokvahkoor/p/11056361.html
Copyright © 2011-2022 走看看