1. 面试题准备
a. 谈谈你对Python和其他语言的区别?
使用:Python的类库齐全并且使用简洁,如果要实现同样的功能,Python几行代码可以解决,其他可能就需要很多行.
速度:Python的运行速度与其他语言相比比较慢
-
1. 简单
Python是一种代表简单思想的语言。
2. 易学
Python有极其简单的语法。
3. 免费、开源
Python是FLOSS(自由/开放源码软件)之一。
4. 高层语言
使用Python编写程序时无需考虑如何管理程序使用的内存一类的底层细节。
5. 可移植性
Python已被移植到很多平台,这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC。
6. 解释性
可以直接从源代码运行。在计算机内部,python解释器把源代码转换为字节码的中间形式,然后再把它翻译成计算机使用的机器语言。
7. 面向对象
python既支持面向过程编程也支持面向对象编程。
8. 可扩展性
部分程序可以使用其他语言编写,如c/c++。
9. 可嵌入型
可以把Python嵌入到c/c++程序中,从而提供脚本功能。
10. 丰富的库
Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。
缺点:
运行速度慢
b. 为什么要学python?
简单易学:Python 语言相对于其他编程语言来说,属于比较容易学习的一门编程语言。
语法优美:Python 语言力求代码简洁、优美。
丰富强大的库: Python 语言的类库非常的全面,包含了解决各种问题的类库。
开发效率高:Python 语言因为有了丰富强大的类库,所以,Python 的开发效率能够显著提高。
应用领域广泛:例如,Web 开发、网络编程、自动化运维、Linux 系统管理、数据分析、科学计算、人工智能、机器学习等等。
c. 数据类型:
- 字符串
join
split
strip
index
find
len
str[]
count
- 字典
.get
.pop
.fromkeys():
.has_key():
.items():
.keys():
.setdefault(
):
.update():
.values():
- 元组
1.连接——'+'连接2个元组形成一个新的元组
2.重复——'*'重复一个元组加在末尾
3.删除——元组不能删除其中的元素,但是元组可以整个删除,del tup
4.元组索引和截取——与字符串类似tup[index]/tup[1:3]
5.len(tup)——返回元组的长度
6.max(tup)——返回元组最大值
7.min(tup)——返回元组最小值
8.tuple(seq)——将列表转换为元组
9.tuple.index(obj):从元组中找出某个值第一个匹配项的索引值
10.tuple.count(obj): 统计某个元素在元组中出现的次数
- 列表
1.list.append(obj)——在列表末尾添加新元素,返回值:无。
2.list.count(obj)——统计某个元素(列表中的值)在列表中出现的次数,返回值:返回该次数。
3.list.extend(seq)——在列表后面一次性添加多个值(类似append直接改变该列表),seq必须是列表或者range(),返回值:无。
4.list.index(obj)——找出第一个匹配到参数obj(值)的索引,返回值:返回索引值。
5.list.insert(index,obj)——将值(obj)插入到指定索引(index),返回值:无。
6.list.pop(obj=list[-1])——删除列表中的元素(默认删除最后项),返回值:返回该删除项的值。
7.list.remove(obj)——删除第一个值为obj的匹配项,返回值:无。
8.list.reverse()——列表反向排序,无参数,无返回值。
9.list.sort([func])——对列表进行排序,根据字母和数字由小到大,列表数据类型要一致(同数字或同字符串),func为指定方法(可选参数)
10.list.clear()——清空列表,类似于del a[:],返回值:无。
11.list.copy()——复制列表并返回,返回值:被复制的列表。
- 集合
add,remove,update,pop,union()并集,issubset()如果另一个集合包含这个集合,返回 True,intersection()交集,difference()差集
- collections
namedtuple用属性来引用字典的某个元素,deque双向列表,defaultdict键不存在取默认,OrderedDict有序key字典,Counter计数器
d. 函数
- 函数参数传递的是什么?
Python中函数参数的传递是变量指向的对象的地址
1. 不可变对象作为函数参数,相当于值传递。
2. 可变对象作为函数参数,相当于引用传递
- def func(a,b=[]):pass
- lambda 表达式
简单函数的简洁表示--匿名函数,主体是表达式,返回函数对象本身,
- 列表生成式 []
运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁
- 生成器表达式 (for i in range(1))
生成器表达式返回的不是一个列表类型对象,而是一个生成器对象,节省空间
- 题:
val = [lambda :i+1 for i in range(10)]
val[0] ##<function <listcomp>.<lambda> at 0x00000290D02C1E18>
data = val[0]()
print(data) ##10
- 常见内置函数:
- map
遍历序列,对序列中每个元素进行操作,最终获取新的序列。
- reduce
对于序列内所有元素进行累计操作
- filter
对于序列中的元素进行筛选,最终获取符合条件的序列
- zip
zip可接受一系列可迭代对象作为参数,将对象中对应的元素打包成一个个tuple,然后返回zip类型的对象
- instance
isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()
- type
type() 函数如果你只有第一个参数则返回对象的类型,三个参数返回新的类型对象
-
- 生成器、迭代器、装饰器
含有yield关键字的函数就是生成器
含有iter和next方法的可迭代对象就叫迭代器
在函数的前后添加功能,不影响函数本身的语法糖
2. 回顾
- wtforms
- SQLALchemy
问题:
a. wtforms作用?
--表单验证,渲染标签
b. wtforms涉及到的知识点?哪里用了?
- metaclass
用于指定使用哪个类来创建当前类--wtforms对字段进行排序
metaclass--->类--->实例
- 封装:
wtforms--UnboundField
restframework--request
- __new__
wtforms--实例化流程-字段实例化时返回:不是StringField,而是UnboundField
restframework--many=true
单例模式--类方法
- __mro__
类的继承顺序
- setattr
cbv,django配置文件,wtforms实例化:setattr(self, name, field)
- type(...)
type创建类
c. ORM和原生SQL比较?
ORM操作简单,开发效率快
原生SQL操作复杂,数据库执行效率快
d. 你用过的ORM框架有哪些?
djangoORM
SQLAlchemy
e. SQLAlchemy
- 数据库连接池
- 原生SQL
- ORM
- 表操作
- 默认值
- 索引(联合索引,想要命中必须遵循“最左前缀”的规则)
- sqlalchemy中设置表:
- 引擎
- 编码
- 记录操作
- 增删改查