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

原文地址:https://www.cnblogs.com/liuweimingcprogram/p/10059312.html