30-0-毕业串讲
2020年12月14日大约 7 分钟
语言对比
- C vs Python
- C 语言是python的底层实现,解释器解释的内容是由python编写的
- C 语言开发的程序执行效率高,开发的效率低,python开发的效率高
- C 语言是没有面向对象的,Python有函数编程,面向对象编程
- Java vs Python
- 同一个级别,都需要解释器来解释代码.
- python编写起来简洁方便
- Java编程写起来比较繁琐
- Python对于机器学习等强大的类库(模块),Java模块比较少
- Java在执行的效率比Python高,对于大型的企业及应用,很少用Python, 因为当代码量比较多饿时候pyhton的可识别性比较低.java就直接可以查看前面声明的定义
- C vs Python
解释型和编译型
- 解释型:边解释边执行 代表:Python,php,shell,javascript
- 编译型:将所有代码编译成指定文件,如:.dll 然后去执行 代表:C,C++,Go,C#
python2 和 python3 的区别
- 编码 p2 ascii p3utf-8
- 字节 p2 str p3 bytes
- 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
练习题
查看用户输入的键是否在字典中 (低效率)
查看用户输入的键是否在字典中 (高效率)
找出列表中第二大元素
字典的创建方式
- dict(k=1,v=2)
- dic = {} dic.setdefault('key','value')
- dict.fromkeys('abc','66')
函数
参数 不出意外面试笔试题肯定会出现
- 因为他们用的是默认列表
闭包
- 应用场景
- 闭包和反射配合使用 Stark组件
- SQLAlchemy 源码
- 装饰器
- 在一个嵌套函数中,内部函数使用外部非全局的变量就是闭包
- 应用场景
装饰器
特别重要,不出意外笔试题肯定会出现
面试题
编写一个记录运行时间的装饰器
编写一个装饰器,来控制运行次数 有参装饰器
编写一个装饰器,来控制多久执行一次
装饰器应用场景
- flask路由系统
- django auth认证
- 自定义登录
列表推导式 + lambda
看代码输出结果
看代码输出结果
看代码输出结果
看代码输出结果
看代码输出结果
看代码输出结果
看代码输出结果
看代码输出结果
生成器
自己定义一个range功能
内置函数
- 重要内置函数
- 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次或多次
- match/search的区别?
面向对象
基础类
- 面向对象编程和函数编程区别在哪?
- 封装
- 将一些数值封装在对象中,将一些方法封装到类里
- 你在哪里用到过面向对象的封装
- 分页组件,stark组件,
- 你在哪里用过继承
- Django rest 视图
- 继承
- Python支持多继承
- 继承顺序
- mro - c3算法
- super 按照mro的执行顺序找
- python2 经典类 深度优先 先从左边查找,查找到头后返回起始点然后向右边查找
- python3 新式类 广度优先 不管有多少层,都是一层一层的向下执行
- 多态
- Python天生支持多态变量可以是多种类型
成员
实例变量
官方叫做 实例变量 java叫字段 -- 对象属性也没有问题是因为这些都是它的属性
类变量
方法
类方法
当我们将相同的函数放到一个类中,但是没有使用对象中的内容时,我们就可以让其变成类方法或者静态方法 省却开辟对象的空间
实例方法
实现方法是我们一般书写的格式,实例方法是使用了对象的内容
静态方法
属性
这样是将我们写的方法伪装成属性,属性在类中调用的时候不需要加括号
特殊成员
- 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
- if cls.__name is None:
- class A:
- 手写一个单例模式
- 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
- 删除一个类(对象)的变量或方法
- 应用场景:
- 前端返回给后端的数据都是字符串,我们就可以使用反射来判断是不是我们定义好的方法,如果是就获取到并执行
- hasattr