30-0-毕业串讲

  • 语言对比

    • C vs Python
      • C 语言是python的底层实现,解释器解释的内容是由python编写的
      • C 语言开发的程序执行效率高,开发的效率低,python开发的效率高
      • C 语言是没有面向对象的,Python有函数编程,面向对象编程
    • Java vs Python
      • 同一个级别,都需要解释器来解释代码.
      • python编写起来简洁方便
      • Java编程写起来比较繁琐
      • Python对于机器学习等强大的类库(模块),Java模块比较少
      • Java在执行的效率比Python高,对于大型的企业及应用,很少用Python, 因为当代码量比较多饿时候pyhton的可识别性比较低.java就直接可以查看前面声明的定义
  • 解释型和编译型

    • 解释型:边解释边执行 代表:Python,php,shell,javascript
    • 编译型:将所有代码编译成指定文件,如:.dll 然后去执行 代表:C,C++,Go,C#
  • python2 和 python3 的区别

    • 编码 p2 ascii p3utf-8
    • 字节 p2 str p3 bytes
    • print
    • range p2 range是可迭代对象 p3 xrange是可迭代对象
    • readlines
    • input
  • 字节和位的关系

    • 位 : 00000001 计算机能顾识别的0和1组成的
    • 字节: 8个位就是1个字节
  • 进制转换

    • 二进制,八进制,十六进制 转换成十进制
      • int(‘要转换的内容’,base=‘要从什么机制数转换成10进制’)
    • 十进制转二进制
      • bin(‘10进制’)
    • 十进制转八进制
      • oct(‘10进制’)
    • 十进制转十六进制
      • hex(‘10进制’)
    • 进制转换的面试题 ip转成进制然后转成十进制
  • 字节码和机器码的区别

    • .pyc文件就是字节码,python中只有导入的时候才会生成.pyc
    • 字节码是这门语言能够识别的,字节码能够让程序运行的效率提高一点
    • 机器码是汇编的结果,给操作系统直接读取使用
  • 执行脚本

    • #!/usr/bin/env python 脚本的头文件 linux下存在才有意义 执行命令./a.py 执行时没有执行python解释器,就是读取文件的头部来执行
    • python a.py 这样的是咱们指定了解释器去执行一个文件
    • # -_coding:utf:8 -_- 指定文件中,中文以什么编码显示
    • 公司使用python2的时候头部必须要加上文件头 #-_-coding:utf-8-_-
  • 运算符

    • () > not > and > or
    • or 运算有一个为真就是真,都是真的时候就选择or前面的内容,or运算都为假的时候选取or运算的后边内容
    • and 运算都为真才是真, 都为真的时候选择and后边的内容,and运算都为假的时候选择and前面的内容
    • 类似三元运算符
      • a = 1
      • b = 2
      • c = a or b
  • 三元表达式/三元运算/三目运算

    • a = if a else b
    • 应用场景:
      • 再不能准确的知道赋值的值时, 判断满足条件的时候
  • 常见数据类型

    • str : split. join. strip. upper.replace

    • list: append insert pop remove extend reverse

    • tuple: index count

    • dict: get setdefault items keys values

    • 练习题

      • 查看用户输入的键是否在字典中 (低效率)

        img

      • 查看用户输入的键是否在字典中 (高效率)

        img

      • 找出列表中第二大元素

        img

      • 字典的创建方式

        • dict(k=1,v=2)
        • dic = {} dic.setdefault(‘key’,‘value’)
        • dict.fromkeys(‘abc’,‘66’)
  • 函数

    • 参数 不出意外面试笔试题肯定会出现

      img

      • 因为他们用的是默认列表
  • 闭包

    • 应用场景
      • 闭包和反射配合使用 Stark组件
      • SQLAlchemy 源码
      • 装饰器
    • 在一个嵌套函数中,内部函数使用外部非全局的变量就是闭包
  • 装饰器

    • 特别重要,不出意外笔试题肯定会出现

    • 面试题

      • 编写一个记录运行时间的装饰器

        img

      • 编写一个装饰器,来控制运行次数 有参装饰器

        img

      • 编写一个装饰器,来控制多久执行一次

        img

    • 装饰器应用场景

      • flask路由系统
      • django auth认证
      • 自定义登录
  • 列表推导式 + lambda

    • 看代码输出结果

      img

    • 看代码输出结果

      img

    • 看代码输出结果

      img

    • 看代码输出结果

      img

    • 看代码输出结果

      img

    • 看代码输出结果

      img

    • 看代码输出结果

      img

    • 看代码输出结果

      img

  • 生成器

    • 自己定义一个range功能

      img

  • 内置函数

    • 重要内置函数
      • map
      • filter 过滤
      • reduce python3需要从functools中导入, python2 中直接import 就可以使用了
      • sorted 排序
    • 内置函数
      • max 最大值
      • min 最小值
      • len 获取长度
      • bin 二进制
      • oct 八进制
      • hex 十六进制
      • zip 拉链
  • 内置模块

    • os
    • sys
    • re
    • json
    • time
    • random
    • uuid
    • logging
    • hashlib
  • 第三方模块

    • pandas
    • numpy
    • requests
    • django
    • flask
    • bs4
    • xpath
    • scrapy
    • pymysql
    • pymongo
    • redis
  • re模块

    • match/search的区别?
      • match 是从头匹配 只有内容存在头部位置才匹配
      • search 是全部匹配 出现就匹配不在乎位置
    • 贪婪匹配和非贪婪匹配
      • ?匹配0次或1次
      • +匹配1次或多次
        • 匹配0次或多次
  • 面向对象

    • 基础类

      • 面向对象编程和函数编程区别在哪?
      • 封装
        • 将一些数值封装在对象中,将一些方法封装到类里
        • 你在哪里用到过面向对象的封装
          • 分页组件,stark组件,
        • 你在哪里用过继承
          • Django rest 视图
      • 继承
        • Python支持多继承
        • 继承顺序
          • mro - c3算法
          • super 按照mro的执行顺序找
          • python2 经典类 深度优先 先从左边查找,查找到头后返回起始点然后向右边查找
          • python3 新式类 广度优先 不管有多少层,都是一层一层的向下执行
      • 多态
        • Python天生支持多态变量可以是多种类型
    • 成员

      • 实例变量

        • 官方叫做 实例变量 java叫字段 – 对象属性也没有问题是因为这些都是它的属性

          img

        • 类变量

          img

      • 方法

        • 类方法

          img

        • 当我们将相同的函数放到一个类中,但是没有使用对象中的内容时,我们就可以让其变成类方法或者静态方法 省却开辟对象的空间

        • 实例方法

          img

        • 实现方法是我们一般书写的格式,实例方法是使用了对象的内容

        • 静态方法

          img

      • 属性

        img

      • 这样是将我们写的方法伪装成属性,属性在类中调用的时候不需要加括号

    • 特殊成员

      • init 在是实例化的时候执行
      • new 在实例化的时候执行,为对象创建一个新的空间
        • 手写一个单例模式
          • class A:
            • __name = None
            • def new(cls,*args,**kwargs):
              • if cls.__name is None:
                • obj = object.new(cls)
                • cls.__name = obj
              • return cls.__name
      • call 实例化的对象加括号就是触发__call__方法
      • setattr 在类中写了__setattr__方法然后通过对象点设置一个变量触发这个函数
      • getattr 在类中写了__getattr__方法然后通过对象点获取变量触发这个函数
      • delattr 在类中写了__delattr__方法然后通过del 对象点变量触发这个函数
      • add 对象和对象进行相加触发__add__
      • iter 可迭代对象协议
      • next 获取下一个
      • dict 查看类中或者对象中所有的属性和方法
      • getitem 在类中写了__getitem__方法然后通过对象像字典一样获取值触发这个函数
      • setitem 在类中写了__setitem__方法然后通过对象像字典一样设置一个变量触发这个函数
      • delitem 在类中写了__delitem__方法然后通过对象像字典一样删除一个变量触发这个函数
  • 上下文管理

    • 在类中定义__enter__和__exit__
    • 就是上下文 enter 里边写的return 后的值就可以使用as接受参数
    • 应用场景: 我们在进行数据库操作的时候,需要连接和关闭,我们就可以使用with语句来操作
  • 反射

    • hasattr
      • 判断这个字符串的方法是否存在
    • getattr
      • 获取这个字符串的方法
    • setattr
      • 给一个类(对象)设置一个变量
    • delattr
      • 删除一个类(对象)的变量或方法
    • 应用场景:
      • 前端返回给后端的数据都是字符串,我们就可以使用反射来判断是不是我们定义好的方法,如果是就获取到并执行