161.当代码执行到一个函数的装饰器那行代码时,此时被装饰的函数的指向已经指向了装饰器内部的函数。说白了就是:装饰器在在Python解释器解释时就已经进行装饰了,与被装饰函数调用不调用无关。这一点要特别注意。
162.同一个装饰可对多个函数进行装饰,每一次装饰,相当于创建了一个闭包。
163.装饰器是对函数进行装饰的。多个装饰器对同一个函数进行装饰时,装饰顺序是从下到上,执行顺序是从上到下。
@log
@time
@check
def test():
pass
装饰顺序是从下到上,即check--time--log
,执行顺序是从上到下log--time--check
。
164.用类名作为装饰器,实际上会调用类的__call__
方法。
165.带参数的装饰器,实际上是分为了2步:一、先调用这个带参数的装饰器函数,并传入实参。二、用上一步骤的返回值作为真正的装饰器进行装饰。
166.假如Person类中有一个国籍属性nationality="中国"
,则用Person类创建的对象p.nationality="美国"
直接去修改类属性的值,是修改不成功的。这么做的结果是动态地为对象p新增了一个临时实例属性nationality="美国"
。要想修改类属性,则可以通过对象.__class__.类属性
。这一点要特别注意。
167.数据库:char(20)表示长度固定为20个字符,不足的后面补空格。
varchar(20)表示有几个字符存几个,但最大可存20个字符。小于此最大限度的原样存储,不会补充空格。大于此最大限度的,将无法存储。
168.数据库: primary key主键:用来唯一标记一条记录的字段。说白了就是,主键是该条记录的"身份证"。
foreign key外键:一个表中某字段的值是另一张表的主键。
169.数据库:当为关系型字段写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,否则会填写失败并抛出异常。
170.数据库:虽然外键约束可以保证数据的有效性,但是在进行数据的增删改查时,会到关联的表中查询此值是否存在,会降低数据库的性能,所以不推荐使用。那么数据库的性能如何保证呢?答:可以在逻辑层进行控制。
171.数据库:进入数据库:-uroot -p;
退出数据库:exit/quit/ctrl + d;
172.数据库:显示所有的数据库:show databases;
173.数据库:显示数据库当前时间:select now();
174.数据库:显示数据库版本:select version();
175.创建数据库:create database 数据库名;
或者create database 数据库名 charset=utf8;
特别注意:这里是utf8不是utf-8,写成utf-8会报错。
176.查看如何创建的数据库:show create database 数据库名;
这里show时数据库名后面不需要编码,加上会报错!
177.删除数据库:drop database 数据库名;
如果数据库名中因含有特殊字符,无法被识别,则可以通过一对``来括住数据库名,就能被当成一个整体被识别了。
178.使用数据库:use 数据库名;
利用此语句可以在数据库之间任意切换。
179.查看当前用的哪个数据库:select database();
180.只有在使用某个数据库的前提下,才创建数据表。