zoukankan      html  css  js  c++  java
  • Python面试总结复习(三)

    基本数据类型

    整型int              不可变
    字符串str            不可变
    列表list             有序,可变
    元组tuple 有序,不可变 字典dict:key是唯一的 无序,可变
    集合set 无序,可变 布尔:bool 单个等号是赋值,两个等号是比较值,is是比较两个变量的id

    基本运算符

    /      结果保留小数部分,正常运算结果
    //     取模,只保留整数部分
    %     取余数

    可变类型和不可变类型

    可变:列表,集合,字典
    不可变:整型,浮点型,字符串,元组
    可变类型:在值改变的情况下,id不改变,说明你是在原值的基础上进行修改 不可hash
    不可变类型:在值改变的情况下,id改变,说明产生了新值 可hash

    1.列表与元组区别

    1.相同点
    列表和元祖都是序列类型的容器对象,可以存放任何类型的数据
    2.不同点
    除了字面上的区别(括号与方括号),列表是可变的数据类型,元祖是不可变的数据类型
    元祖用于存储异构数据,就是一些没有什么关联的数据,比如用元祖记录一个人的身高,体重,年龄。
    列表一般用于存储同构数据,就是一些就有相同意义的数据,比如都是字符串类型。

    2.向列表内添加元素?两个列表使用“+”号的结果,与append区别?

    a=[1,2,3]
    b=[4,5,6]
    print(a+b)    #[1, 2, 3, 4, 5, 6]
    
    a.append(b)
    print(a)        #[1, 2, 3, [4, 5, 6]]

    使用"+"号把列表元素每个都拆开放进去,当成一个个元素

    使用append把加入的列表当成一个元素加入在最后

    3.Python全局变量与局部变量?__name__是局部还是全局,函数内变量局部与全局的判断?

    全局变量和局部变量的区别在于作用域,全局变量在整个py文件中声明,全局范围内可以使用;
    局部变量是在某个函数内部声明的,只能在函数内部使用,如果超出使用范围(函数外部),则会报错
    __name__是内置变量
    1.如果在函数中,变量前加了global,很显然该变量是全局变量     (global在局部修改成全局的不可变数据)
    
    2.如果函数中的一个变量和全局变量的名称相同,但是函数没有给这个变量赋值,那么这个变量是全局变量
    
    3.如果函数中的一个变量和全局变量的名称相同,但是函数给该变量赋值了,这个变量就是局部变量
    
    4.如果函数中的变量没有与之同名的全局变量,那么该变量显然是一个局部变量

    4.Python垃圾回收机制

    1.引用计数:当内存中的数据没有与任何变量名有绑定关系,就会被自动回收
    2.标记清除:当内存快要被某个应用程序占满的时候,会自动触发清除
    3.分代回收:根据值存活的时间不同,划分不同的等级,等级越高垃圾回收机制扫描的概率越低

    5.运算符重载   (简单来说就是自定义类,重写魔法方式实现运算符)

    https://blog.csdn.net/zhangshuaijun123/article/details/82149056

    什么是运算符重载:让自定义的类生成的对象(实例)能够使用运算符进行操作
    
    算术运算符的重载:(主要就是使用魔法方法实现运算)
                 方法名                  运算符和表达式      说明
                __add__(self,rhs)        self + rhs        加法
                __sub__(self,rhs)        self - rhs         减法
                __mul__(self,rhs)        self * rhs         乘法
                __truediv__(self,rhs)   self / rhs          除法
                __floordiv__(self,rhs)  self //rhs          地板除
                __mod__(self,rhs)       self % rhs       取模(求余)
                __pow__(self,rhs)       self **rhs         幂运算

    示例

    class Mynumber:
        def __init__(self,v):
            self.data=v
    
        def __add__(self, other):   #other是一个对象
            x=self.data+other.data
            return x
    
        def __sub__(self, other):
            x=self.data-other.data
            return x
    
    n1=Mynumber(100)
    n2=Mynumber(200)
    n3=n1+n2  #n3=n1.__add__(n2)   加号触发__add__魔法方法
    print(n3)  #300
    n4=n2-n1   #n4=n2.__sub__(n1)   减号触发__sub__魔法方法
    print(n4)   #100

    6.Django ORM 中F查询与Q查询

    F查询:本质就是从数据库中直接获取某个字段的值

    查询数据库大于卖出量的书籍

    from django.db.models import F
    
    res = models.Book.objects.filter(kucun__gt=F('maichu')) #kucun和maichu都是Book表的字段

    将书籍价格都增加10

    model.Book.objects.update(price=F('price')+10)   #所有书籍价格都增加10

    (注意修改char类型的字段不能按照上面那种方式,需要使用Concat,加上拼接值value)

    from django.db.models.functions import Concat
    from django.db.models import Value
    
    ret3 = models.Book.objects.update(title=Concat(F('title'), Value('新款')))
    models.Book.objects.update(title = F('title')+'新款')  # 不能这么写

    Q查询(filter查询条件都是与,Q支持与或非)

    查询书籍名称是三国演义或者价格是444

    from django.db.models import Q
    res = models.Book.objects.filter(title='三国演义',price=444.44)  # filter只支持and关系
    res1 = models.Book.objects.filter(Q(title='三国演义'),Q(price=444))  # 如果用逗号 那么还是and关系
    res2 = models.Book.objects.filter(Q(title='三国演义')|Q(price=444))   #或者关系
    res3 = models.Book.objects.filter(~Q(title='三国演义')|Q(price=444))  #查询除了title是三国演义,或者价格是444的书籍

    7.异常处理:try...except...else...,try...finally...执行的过程

    当try中的代码块没有检测到异常时候,就会走else代码,finally无论有没有错误最后都会走。

    常见错误类型
    NAMERROR     名字错误
    SyntaxError  语法错误
    KeyError     键不存在
    ValueError   值错误
    IndexError   索引错误
    try:
       需要检验的代码
    except Exception:  # 万能异常  所有的异常类型都被捕获
        print('老子天下无敌')
    else:
        print('被检测的代码没有任何的异常发生 才会走else')
    finally:
        print('无论被检测的代码有没有异常发生 都会在代码运行完毕之后执行我')

    8.Linux下文件操作:

    查看文件最后50行:
    tail -n 50 filename   
    
    vim操作命令:
    三种常见模式
    1.正常模式    (一打开文档就是这个模式)
    2.编辑模式   (按下i,o,a等键,会从正常模式到编辑模式,可以往文档中写内容)
    3.命令行模式   (编辑模式按ESC键,进入正常模式,输入:q代表退出,:wq代表保存退出,:q!代表强制退出)

    9.代码演示

    1.打印python中的False
    print(bool(0))
    print(bool(''))
    
    2.列表操作结果
    [1,2]*2         #[1, 2, 1, 2]
    
    3.==与is区别
    ==是比较值的大小
    is是比较id值是否一致
    
    4.变量赋值引用问题
    a = 2
    b = a
    a += 2
    print(a, b)     #4,2
    
    5.函数传参,解压缩
    def func(a, b, c=3, d=4):
        print(a, b, c, d)
    
    func(3, *(3, 4))            #3,3,4,4
    func(3, *(3, 4),  d=7)   #3,3,,4,7

    函数参数

    1.位置参数:位置实参,位置形参
    2.关键字参数:在函数调用的阶段,给变量名赋值
    3.默认值参数:在函数定义阶段,给变量名赋值
    4.不定长参数:*和**
    站在形参的角度看 *  :接收多余的位置实参,统一放在元组中,然后传递给后面的变量名
    站在实参的角度看 *  :将元组,列表,字符串等数据打散,然后一一传给形参
    
    站在形参的角度看**  :接收多余的关键字参数,统一放在字典中,然后传递给后面的变量名
    站在实参的角度看**  :将字典数据打散成key=value形式,然后传给形参
  • 相关阅读:
    vi命令
    linux pip国内镜像修改
    LDA数学八卦笔记(二)Beta/Dirichlet分布
    不经风雨不见彩虹(个人作业——软件工程实践总结&个人技术博客)
    Java FX前端开发与测试
    个人作业——软件评测
    福大周润发队——团队作业4:系统设计和数据库设计
    福大周润发队——团队作业3:需求分析
    福大周润发队——团队作业2:github编程实战
    结对作业二——顶会热词统计的实现
  • 原文地址:https://www.cnblogs.com/wangcuican/p/12697954.html
Copyright © 2011-2022 走看看