flask里面的request,session是什么时候创建的?是什么时候销毁的
当请求刚进来的时候回将他两个封装成requestContext()对象,封装之后通过localstack放入local对象中,ctx的session是空的,下一步执行open_session,把cookie重新赋值到ctx里面去,最后返回执行save_session将ctx的session做修改,最后移除save_session
flask中有几个local对象:永远只有两个
自己写一个类+列表的技术栈
技术栈应用:flask里面的LocalStack就是基于栈实现的
Python基础部分那些比较重要?
- 反射
- cbv
- django配置文件
- wtform中
- 装饰器
- flask路由\装饰器
- 认证
- csrf
- 生成器、迭代器
- 面向对象
- 封装继承多态(简单,一两句概括)
- 特殊功能
- 双下划线方法
__mro__
:找到当前类,寻找属性的顺序__dict__
:执行dict、是拿里面的全部__new__
:实例化但没有给当前类对象__call__
:flask请求入口__iter__
:循环所有字段
- metaclass:指定类由那个类创建,默认type
- 场景:在类创建之前定制操作
- 示例:wtform中,对字段进行排序
- 双下划线方法
为什么要学python?
- 学长建议
- 自己了解:
- 简单易学,生态圈强大(不局限应用面),发展趋势好(人工智能,数据分析)
谈谈你对python和其他语言的区别?
- 解释性
- python/php
- 编译型
- java/c#
- Python弱类型
数据类型:
字符串、列表、元组、字典每个常用的5个方法?
- 字符串:
- 1,find通过元素找索引,可切片,找不到返回-1
- 2,index,找不到报错。
- *3,split 由字符串分割成列表,默认按空格。
- 4,captalize 首字母大写,其他字母小写。
- ,upper 全大写。
- ,lower 全小写。
- title,每个单词的首字母大写。
- startswith 判断以什么为开头,可以切片,整体概念。
- endswith 判断以什么为结尾,可以切片,整体概念。
- format格式化输出
- 字典:
- key: 输出所有的键
clear:清空
dic:删除的键如果没有则报错
pop:键值对删,有返回,没有原来的键会报错(自行设置返回键就不会报错)
popitem:随机删键值对
del:删除的键如果没有则报错
改 update
- key: 输出所有的键
- 列表:
- append:在后面添加。
Insert按照索引添加,
expend:迭代着添加。
list.extend(seq) - 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
pop 删除 (pop 有返回值)
remove 可以按照元素去删
clear 清空列表
- append:在后面添加。
- 元组
- 1、cmp(tuple1, tuple2):比较两个元组元素。
2、len(tuple):计算元组元素个数。
3、max(tuple):返回元组中元素最大值。
4、min(tuple):返回元组中元素最小值。
5、tuple(seq):将列表转换为元组。、
- 1、cmp(tuple1, tuple2):比较两个元组元素。
函数(必问)
- 字符串:
函数参数传递的是什么? ——————引用
def func(a,b=[]):pass
- 函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,第三次执行还是用第一次执行的时候实例化的地址存储,所以第一和第三次执行的结果就是相同的,想每次执行只输出当前传入参数 ,默认参数应该设置为None。
lambda 表达式
列表生成式 [i for i in range(1)]
生成器表达式 (for i in range(1))
迭代器、生成器、装饰器、可迭代对象(必问)
迭代器:内部实现
__next__
方法,帮助我们向后一个一个取值。一步一步往前迭代,到相应位置停止,for循环底层依赖迭代器生成器:一个函数内部存在yield关键字;v = 函数(),v是生成器,不会一次创建,而是一次一次创建
- 一种特殊的迭代器,底层依赖迭代器
- 应用场景:range、xrange
- py2:range(1000)立即创建;xrange(1000)生成器
- py3:range(1000)生成器
可迭代对象:内部实现
__iter__
方法且返回一个迭代器class Xx(): def __iter__(self): return iter([11,22,33]) obj = Xx()
- 应用场景:
- wtform中对form对象进行循环时,显示里面的所有字段
- 列表,元组、字典
- 总结:如果想要让一个对象可以被for循环,那么就需要在当前类中定义
__iter__
方法
- 应用场景:
装饰器:在不改变原函数的代码的基础上,在执行前后进行定制操作
手写:
def wapper(func): def inner(*args,**kwargs): return func(*args,**kwargs) return inner @wapper def index(s): return s+100 print(index(10))
应用场景:
- flask路由系统
- flask before_request
- csrf
- django内置认证
- django缓存
方法函数区别
class Foo(object):
def fench(self):
pass
Foo.fench() #函数
obj = Foo() #实例化
obj.fench() #方法
通过类直接调用的是函数
通过实例化对象调用的是方法
对于一个类里面的东西到底是函数还是方法取决于谁调用