zoukankan      html  css  js  c++  java
  • python3

    1、装饰器。

    now = log(now)
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    import functools
    
    def log(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            print('{0} is running'.format(func.__name__))
            print("args ---> ", *args)
            print("kwargs ---> ", kwargs)
            func(*args, **kwargs)
            print("after")
        return wrapper
    
    
    @log
    def request(a, b, **kwargs):
        print(a, b, kwargs['city'])
    
    if __name__ == '__main__':
        request(1, 2111, city="name", vimi="vimi")
    View Code

    需要带参数的装饰器,相当于 now = log('ages')(now)

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    import functools
    
    def log(requierd = False):
        def wrapper(func):
            @functools.wraps(func)
            def wrapper_func(*args, **kwargs):
                print('{0} is running'.format(func.__name__))
    
                if (requierd):
                    func(*args, **kwargs)
    
                print("after")
    
            return wrapper_func
        return wrapper
    
    @log(requierd = True)
    @log(requierd = False)
    def request(a, b):
        print(a, b)
    
    if __name__ == '__main__':
        request(1, 2111)
    
    
    # request is running
    # request is running
    # after
    # after
    View Code
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    import functools
    
    def log(requierd = False):
        def wrapper(func):
            @functools.wraps(func)
            def wrapper_func(*args, **kwargs):
                print('{0} is running'.format(func.__name__))
    
                if (requierd):
                    func(*args, **kwargs)
    
                print("after")
    
            return wrapper_func
        return wrapper
    
    @log(requierd = False)
    @log(requierd = True)
    def request(a, b):
        print(a, b)
    
    if __name__ == '__main__':
        request(1, 2111)
    
    # request is running
    # after
    所以适配器从下到上

    完整版decorator:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    from flask import g, session, make_response, request
    import functools
    from logger.logger import log
    from errors.expection import ArgsError
    
    """
        load user from cookies
    """
    def parse_user():
        def decorator(func):
            @functools.wraps(func)
            def wrapper_func(*args, **kwargs):
                user_id = session.get('user_id')
                if user_id:
                    g.user_id = user_id
                else:
                    raise ArgsError('Require login')
                return func(*args, **kwargs)
            return wrapper_func
        return decorator
    
    """
        set Access-Control-Allow
    """
    def parse_access(allow_origin = "*", allow_methods = "PUT,GET,POST,DELETE,OPTIONS", allow_headers = "Referer,Accept,Origin,User-Agent,Content-Type"):
        def decorator(func):
            @functools.wraps(func)
            def wrapper_func(*args, **kwargs):
                resp = make_response(func(*args, **kwargs))
                resp.headers['Access-Control-Allow-Origin'] = request.headers.get('Origin')
                resp.headers['Access-Control-Allow-Methods'] = allow_methods
                resp.headers['Access-Control-Allow-Headers'] = allow_headers
                resp.headers['Access-Control-Allow-Credentials'] = "true" # allow send cookies
                return resp
            return wrapper_func
        return decorator
    
    """
        parse args from request
    """
    def parse_args(args_name=[]):
        def decorator(func):
            @functools.wraps(func)
            def wrapper_func(*args, **kwargs):
                g.args = {}
                for value in args_name:
                    if request.form.get(value) and request.args.get(value):
                        raise ArgsError('Require diff args name from post and get, args: {}'.format(value))
                    g.args[value] = request.args.get(value) or request.form.get(value)
                    if not g.args[value]:
                        raise ArgsError('Require args {}'.format(value))
                return func(*args, **kwargs)
            return wrapper_func
        return decorator
    View Code

    logging:

     

    2、*args 和 **kwargs

      *args就是用来传入可变参数的,转化为一个list或者一个tuple,所以如果一个函数是 def calc(*args)

      可以这样调用  calc(1, 2, 3),就会帮你自动转化为一个list。。如果你本身就是一个list,需要 calc(*list)

      **kwargs就是一个关键字参数,他就是一个dict,所以如果一个函数是def calc(**kwargs)

      你可以这样调用,calc(city="guangzhou", name="vimi"),如果本身是一个dict,需要calc(**dict)

    3、python中的is比较的是id(也就是地址),== 比较的是value。

    4、python中的ORM   sqlalchemy

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    
    from sqlalchemy import create_engine,Table,Column,Integer,String,MetaData,ForeignKey
    engine=create_engine("mysql+pymysql://root:vimi@127.0.0.1:3305/homework",echo=True)
    
    metadata=MetaData(engine)
    
    address_table = Table('user', metadata,
        Column('id', Integer, primary_key=True),
        Column('name', String(128)),
        )
    
    metadata.create_all()
    创建table方法一
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    from sqlalchemy import Column, String, create_engine, Integer  #导入包
    from sqlalchemy.orm import sessionmaker
    from sqlalchemy.ext.declarative import declarative_base
    
    # 创建对象的基类:
    Base = declarative_base()
    #定义一个类
    class User(Base):# 表的名字:
        __tablename__ = 'user'# 表的结构:
        id = Column(Integer, primary_key=True)
        name = Column(String(20))
    
    # 初始化数据库连接:
    engine=create_engine("mysql+pymysql://root:vimi@127.0.0.1:3305/homework",echo=True)
    
    # 创建DBSession类型:
    DBSession = sessionmaker(bind=engine)
    
    # 创建表
    Base.metadata.create_all(engine)
    创建table方法二
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    from sqlalchemy import Column, String, create_engine  #导入包
    from sqlalchemy.orm import sessionmaker
    from sqlalchemy.ext.declarative import declarative_base
    
    # 创建对象的基类:
    Base = declarative_base()
    #定义一个类
    class User(Base):# 表的名字:
        __tablename__ = 'user'# 表的结构:
        id = Column(String(20), primary_key=True)
        name = Column(String(20))
    
    # 初始化数据库连接:
    engine=create_engine("mysql+pymysql://root:vimi@127.0.0.1:3305/homework",echo=True)
    
    # 创建DBSession类型:
    DBSession = sessionmaker(bind=engine)
    
    # 创建session对象:
    session = DBSession()
    # 创建新User对象:
    new_user = User(id='5', name='Bob')
    # 添加到session:
    session.add(new_user)
    # 提交即保存到数据库:
    session.commit()
    # 关闭session:
    session.close()
    插入table方法一

    5、python中的jsonify的作用是可以加缩进啊,加content/type之类的。

    6、lambda x, y, z : x + 1

  • 相关阅读:
    PS图层中如何快速找到想要的图层
    知识点手记二
    IE6兼容
    Hack、自适应、针对浏览器写样式随手笔记
    汇编语言实验三
    汇编语言实验二
    汇编语言实验一
    寄存器与代码段
    java.nio.Buffer源码阅读
    汇编语言初探
  • 原文地址:https://www.cnblogs.com/liuweimingcprogram/p/10059312.html
Copyright © 2011-2022 走看看