Tips_one

作者: 222AblackA | 来源:发表于2019-08-09 21:54 被阅读0次

    二十九: MVC / MVT / MVP / MVVM

    1. MVC -- Model Views Controller -- 模型层、模板层、视图函数

    2. MVT -- Model Views Templates -- 模型层、视图函数、模板层

    3. MVP -- Model Views Presenter -- 模型层、模板层、视图函数(contrller/Presenter)

    4. MVVM -- Model Views ViewsModel -- 模型层、模板层、视图函数

      将views和状态和抽象化,视图UI和业务逻辑分开,viewsmodel可以取出 Model 的数据同时帮忙处
      理 View 中由于需要展示内容而涉及的业务逻辑。
    

    二十六:数据库删除操作(谨慎使用):

        -- 删除数据库: drop database if exists 数据库名;
        -- 删除表:drop table 表名字 (完全删除去掉整张表);
        -- 删除表:delete from 表名 (删除表里面的数据,一行一行的删除,表明后面可以跟where 字段名= 值,
                  删除指定的某条或者多条记录,该命令可以回滚)
        -- 删除表:truncate table 表名称 (删除表中的数据,并且新增加记录的计数标识会重置,
                  比如主键id原来是50,用该命令删除后,新增加的数据主键id会从1开始,而不是51开始)
    
       一般来说:执行速度-->drop>truncate>delete
       使用foreign key约束的表,不能用truncate,应使用不带where的delete
    

    二十 : 操作系统的五大管理功能 :

    1.设备管路:主要是负责内核与外围设备的数据交互,实质是对硬件设备的管理,包括对输出输入设备的分配,初始化,维护与回收等,比如管理音频的输入输出;
    2.作业管理:这部分功能主要是负责人机交互,图形界面或者系统任务的管理;
    3.文件管理:这部分功能设计文件的逻辑组织和物理知识,目录结构和管理等;
    4.进程管理:说明一个进程存在的唯一标志是pcd(进程控制块),负责维护进程的信息和状态;
    5.存储管理:数据的存储方式和组织结构。
    

    十八 : SQL注入攻击

    --> 用户在客户端输入特定的字符串提交服务器,在服务器执行sql语句时,将用户输入的特定字符串误以为是sql语句并且执行语句

    如何防御sql注入攻击:

    1.项目上线时,将网页错误提示返回信息关闭,或者重写(python中配置:debug=False),这种方法只是简单的掩盖代码缺陷,并不能防御;
    2.检查变量数据类型和格式;
    3.过过滤字符串;
    4.绑定变量,使用预编译语句;
    5.数据库信息加密;
    6.使用数据库存储过程;
    

    十四: python容器类型(即数据类型)

    1. 列表(list) -- 可变,有序 -- 中括号[]

          a.获取元素 -  通过下标获取元素
          b.增删改
             增 : append ,insert , extend
             删除:remove , del ,pop ,clear
             改 : 列表[下标] =  新值
          c. 相关运算 :+ ,* ,in /not in ,len() ,list() ,max() ,min()
    

    列表1.append(a) 和列表1.extend(a)的区别:

          append: 添加对象到列表1(将添加的对象作为列表1的一个元素)
          extend: 添加元素到列表1(将添加的对象中的元素添加到列表1)
                    a =  [1,2,3,4]      
                    b =  [5,6,7,8]
                    a.append(b)   # a: [1,2,3,4,[5,6,7,8]]
                    a =  [1,2,3,4] 
                    a.extend(b)  # a: [1,2,3,4,5,6,7,8]         
    

    将[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]

            a= [[1, 2], [3, 4], [5, 6]]
            b= [j for i in a for j in i]
    

    2. 元祖(tuple) -- 不可变,有序 -- 小括号()

             注意: 当元祖只有一个元素时,要加逗号
                   a = (1)  ---   a变量类型是int类型
                   b = (1,)  ---  b变量类型是tuple类型
    
              获取元素 -  通过下标获取元素
                          变量1,变量2 = (元素1,元素2)
                          变量1,*变量2 = (元素1,元素2,元素3......)
              相关运算 :+ ,* ,in /not in ,len() ,tuple() ,max() ,min()
    

    3. 字典 (dict) -- 可变,有序 -- 大括号{}

               a.获取元素  -- 通过键获取元素
               b.增删改
               增  : 字典[key] = 值 , 字典1.update(字典2), 字典1.setdefault(key,值)
               删  :  del  字典[key],字典.pop(key) ,clear
               改  :字典[key]  = 值
               c. 相关运算 :in /not in ,len() ,dict() ,
                      max() : 取的是字典的key的最小值 ,key类型需要一样
                      min() :取的是字典的key的最小值 ,key类型需要一样
    

    4. 集合 (set) -- 可变、无序 --大括号{}

              a. 查--获取集合元素 : 不能单独获取某个元素,只能遍历
              b. 增 (添加元素): 集合.add(元素) --  将制定元素添加到集合中
                              集合.update(序列) --  将序列中的元素添加到集合中(序列中的元素必须是不可变的)
              c. 删 (删除元素):  集合.remove(元素)   --  删除集合中指定的元素
              d.   in / not in  ,max ,min, len ,set
              e.数学运算:包含(>=,<=),并集(|),交集(&),补集(^),差集(-)
    

    5. 字符串(str)-- 不可变、 有序--两个单引号''或者双引号

          a.获取元素  -- 通过下标获取元素
          b. 字符串切片:字符串1[:] 
          c. 相关运算 :+ ,* ,in /not in ,len() ,str() ,max() ,min()
          d.转义字符:\n,\t,\',\
          e.阻止转义:r/R
    

    八: 闭包问题 (变量作用域)

    1. python属性查找规则:LEGB

        1. (Local)局部作用域,每当调用一个函数的时候就创建了一个局部作用域,它最先被搜索。 
        2. (Enclosing)嵌套的父级函数的局部作用域 
        3. (global)全局作用域 
        4. (built-in)内建作用域,这个是内建函数和类的作用域。
    

    2. 实列:

        1)   def func(x):
                a = []
                for i in range(5):
                    a.append(i*x)
                return a
             b = func(2)
             print(b)
       
    
        输出结果为:[0, 2, 4, 6, 8]
    
      2)
        def func():
           return [lambda x : i * x for i in range(4)]
        
        print([m(2) for m in func()])
        
        输出结果为: [6, 6, 6, 6]
        如果想得到[0,2,4,6]可以用生成器或者创建闭包或者偏函数
    
        生成器
        def multipliers():
              for i in range(4): yield lambda x : i * x
        print([m(2) for m in multipliers()])
    
        将闭包作用域变为局部作用域
        def multipliers():
              return [lambda x,i=i : i * x for i in range(4)]
        print([m(2) for m in multipliers()])
    
        偏函数
        from functools import partial
        from operator import mul
        
        def multipliers():
          return [partial(mul, i) for i in range(4)]
        print([m(2) for m in multipliers()])
    

    七: 映射(map()) -- 归纳(reduce()) -- 过滤(filter()) --

    解析式生成可迭代对象:列表解析式,元祖解析式,字典解析式等(任何可迭代对象)

    1) map(函数,可迭代序列对象) -- 对可迭代对象的每个元素执行函数,返回一个序列对象(需要指定保存类型则:list(map())) <--> (数据处理)
    
    2) reduce(函数,可迭代对象) -- 通常map和reduce都是在列表里结合使用,map对数据进行一一映射处理,reduce对数据进行整合计算 <-->(数据整合)
    
    3) filter(函数,可迭代对象) --  将可迭代对象的元素中满足函数的保留下来,不满足的剔除掉 <-->(数据筛选)
    
    4) 解析式是python生成列表的一种高效方式(也可以生成其他类型,通常生成list) : 列表解析式 -- [ function for item in iterable] 
    
       比如 : [ x * x for x in range(1,5)]
              [ num * num for num in range(-8,5) if num < 0]
    
    字典解析式:
    # Taken from page 70 chapter 3 of Fluent Python by Luciano Ramalho
    
    DIAL_CODES = [
        (86, 'China'),
        (91, 'India'),
        (1, 'United States'),
        (62, 'Indonesia'),
        (55, 'Brazil'),
        (92, 'Pakistan'),
        (880, 'Bangladesh'),
        (234, 'Nigeria'),
        (7, 'Russia'),
        (81, 'Japan'),
        ]
    
    >>> country_code = {country: code for code, country in DIAL_CODES}
    >>> country_code
    {'Brazil': 55, 'Indonesia': 62, 'Pakistan': 92, 'Russia': 7, 'China': 86, 'United States': 1, 'Japan': 81, 'India': 91, 'Nigeria': 234, 'Bangladesh': 880}
    >>> {code: country.upper() for country, code in country_code.items() if code < 66}
    {1: 'UNITED STATES', 7: 'RUSSIA', 62: 'INDONESIA', 55: 'BRAZIL'}
    
    集合解析式:
    
    # taken from page 87, chapter 3 of Fluent Python by Luciano Ramalho
    
    >>> from unicodedata import name
    >>> {chr(i) for i in range(32, 256) if 'SIGN' in name(chr(i), '')}
    {'×', '¥', '°', '£', '', '#', '¬', '%', 'µ', '>', '¤', '±', '¶', '§', '<', '=', '', '$', '÷', '¢', '+'}
    

    五: 字符串格式化-- format函数 (菜鸟教程)

    功能: a.代替占位符: f'{a}任意字符{b}' -- 等同于--> '%s任意字符%s' %(a,b)
    b.格式化字符串:'{a}{b}'.format(a='内容',b='内容')

    实列:

    1.传入参数:
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
     
    # 通过字典设置参数
    site = {"name": "菜鸟教程", "url": "www.runoob.com"}
    print("网站名:{name}, 地址 {url}".format(**site))
     
    # 通过列表索引设置参数
    my_list = ['菜鸟教程', 'www.runoob.com']
    print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必须的
    
    2.传入对象
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    class AssignValue(object):
        def __init__(self, value):
            self.value = value
    my_value = AssignValue(6)
    print('value 为: {0.value}'.format(my_value))  # "0" 是可选的
    3.格式化数字:
    >>> print("{:.2f}".format(3.1415926));
    3.14
    

    三: 装饰器:一个闭包,把一个函数当做参数返回 一个替代版的函数,本质上就是一个返回函数的函数 (被装饰的函数名会变成装饰器的名字,不在是原来的名字)

        装饰器的三个要素():
         
        1. 外层函数嵌套内层函数
        2. 外层函数返回内层函数
        3. 内层函数调用外层函数参数
        
        #  对要装饰的函数添加新的代码
        def outer(func):
            def inner(*args, **kwargs):
                    # 需要装饰的代码(在func基础上添加的新代码)
                    return func(*args, **kwargs)
            return inner
    

    二: 偏函数:把一个函数的某些参数固定住(设默认值),返回一个新的函数

    列子:
    
    int('234') -- 将'234'字符串变成int类型 --int('234', base=10)将字符串引号去掉后,当成10进制的数,然后转换成10进制数返回
    int('1010',base=2) -- 将字符串去掉引号后当成一个2进制数来算,转成10进制数返回
    
    自定义偏函数:
    
    导入偏函数模块:from functools import partial
    int2 = partial(int, base=2)
    int2就是一个偏函数 
       -- int2('101011')--将101011当2进制,转换成10进制数
    

    相关文章

      网友评论

          本文标题:Tips_one

          本文链接:https://www.haomeiwen.com/subject/rimkjctx.html