列表使用append添加 和 列表推导式的区别?
使用列表推导式比列表快,列表推导式被编译后的字节执行速度更快。python当然不是一门编译型语言,但是他还是要被解析成二进制的字节码才能被执行,执行他的正是python解释器。
两种方法最大的区别就是在添加元素的部分。
第一种,先要LOAD_ATTR,将append方法加载进来,然后CALL_FUNCTION,也就是执行。
第二种,直接调用了LAST_APPPEND命令添加元素,就是这一个小小的区别,使得列表推导式的速度会更快,因为第一种方法比第二种方法多了一个LOAD_ATTR的过程,要明白,这条命令在每次循环中都会执行,一旦循环的次数多起来,就必然拖慢速度。
django的多表联查
一对一方式
正向查询: 通过子表查询母表:字表对象.母表表名小写.母表字段名
方向从子表查询:子表.objects,get(一对一的字表__母表字段=‘xxx’).子表字段
反向查找:通过母表查询子表:母表对象.子表表名的小写.子表字段名
从母表自身直接获取字段:母表.objects.get(子表名小写__子表字段=‘xxx’).母表字段
一对多(外键)
正向查找: 可通过.属性,访问外键对象
反向查找:主表对象.子表的小写名称_set.查询方法
外键表联合查询:子表对象.母表表名的小写,母表字段名
母表.objects.get(子表名__子表字段=‘xxx’).母表字段名
注意:若一个模型有ForeignKey,那么该ForeignKey所指向的外键模型实例可通过一个管理器进行反向查询,返回模型所有的实例。默认情况下,管理器名为xxx_set,xxx是源模型的小写名称。若FK字段设置related_name,则不可以使用xxx_set的方式
多对多:
子表查询母表(正向)
子表查询母表:子表对象.子表多对多字段.过滤条件
反向查找:
母表查询子表:母表对象.filter(子表表名小写__子表字段名='过滤条件')