为函数写一个装饰器,在函数执行之后输出 after def start(f): def new_f(*args, **kwargs): re = f(*args, **kwargs) print('after') return re return new_f @start def func1(): print('hello world') func1() 为函数写一个装饰
# -*- Coding = utf-8 -*- # @time: 2020/12/22 17:33 # Author: YKL # 1.为函数写一个装饰器,在函数执行之后输出 after from functools import reduce def after(f): def new_f(*args, **kwargs): re = f(*args, **kwargs) print('after') r
在DRF官方教程的学习过程中,一个很明显的感受是框架在不断地进行封装,我们自己写框架/工具/脚本/平台也可以模仿模仿,先完成底层代码,再做多层封装,让使用者很容易就上手操作。本文是教程的最后一篇,介绍ViewSets和Routers。 ViewSets 先看看之前在给User模型创建Endpoint时,我们新增的2
一、通过模块调用的方式实现 在python3中,首次导入模块文件时,会在程序目录下的__pycache__目录下生成pyc文件,再次导入时,将直接加载pyc文件。 因此,只需要把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。 二、使用__new__方法(饿汉式) # 饿汉式 class HungrySingleton(o
刚开始写views.py模块的代码,一般都是用def定义的函数视图,不过DRF更推荐使用class定义的类视图,这能让我们的代码更符合DRY(Don't Repeat Yourself)设计原则: 使用APIView rest_framework.views.APIView是DRF封装的API视图,继承了django.views.generic.base.View: 我们用它把函数视图改
我们通过一个简单的事例来展示一下函数的万能参数,我们先写一个最简单的函数 def test(*args,**kwargs): print(args,kwargs) 然后定义两个变量 l = [1,2,3,4] d = {"a":1,"b":2} 下面我们分别看下两种传参的方式有什么不同 第一种方式 test(l,d) 如果是使用上面的方式传参,
参考链接: torch.meshgrid(*tensors, **kwargs) 代码实验举例: Python 3.7.4 (default, Aug 9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32 Type "help", "copyright", "credits" or "license" for more inform
13. tornado.httputil.HTTPFile对象 tornado.httputil.HTTPFile对象作用: 它是接收到的文件的对象属性 filename:文件的实际名字 body: 文件的数据实体 content_type:文件的类型在templates中新建upload.html templates/upload.html中简单的上传页面 <!DOCTYPE html> <html lang="e
装饰器 装饰器的本质就是一个闭包函数 装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展 # def wrapper(func): # def inner(*args,**kwargs):''' 在函数执行前执行的操作 ''' # ret = func(*args,**kwargs)''' 在函数执行后执行的操作 ''' #
不限定传入的值 **kwargs:必须以字典方式传入 def a(name,**kwargs): print(f'name:{name},kwargs = {kwargs}') print(type(kwargs)) a(name = 'zhang',p ='f') name:zhang,kwargs ={‘p’: ‘f’} <class ‘dict’> 2.*args : 元组 def a(name,*arg
工具代码-timeout 完成timeout,对于一个自动化用例实现超时后自动停止 1 import time 2 #from threading import Thread 3 import threading 4 import sys 5 6 class KThread(threading.Thread): 7 """A subclass of threading.Thread, with a kill() 8 method.
__new__()是新式类中新出现的方法 ,它作用在构造方法建造实例之前,可以这么理解,在python 中存在于类里面的构造方法__init__()负责将类的实例化,而在__init__()启动之前, __new__()决定是否要使该__init__()方法,因为__new__()可以调用其他类的构造方法或者直接返回别的对象来作为
1.模型对象复制 产生原因:项目增加某部分表数据的复制功能,但是很难受由于项目是初始阶段,表中字段一直变化,通过对象复制操作 每次增加一些字段我就需要改代码,特别烦人,所以产生了这个东西. 代码如下很简单: from django.db.models import AutoField, DateTimeField from Publi
函数基础 定义函数/声明函数 def f(): print('hello') 调用函数 f() 参数 def f2(x, y): 函数的作用 封装一个功能(一段代码) 标准函数 return 1.返回结果 2.立刻退出函数 3.默认返回None return如果不接返回值,可以用来中止函数 函数参数 实参/形参 实参:函
3. 默认参数 3-1-1 def test(x,y=2): print(x) print(y) # 在写形参的时候,提前赋值,等于 2 了 test(1) ---> 1 2 没有赋值给y,因为 y 是默认等于 2 3-1-2 可以赋值吗? def test(x,y=2): print(x) print(y) test(1
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能 关键代码: 1、Component 类充
一 形参与实参介绍 函数的参数分为形式参数和实际参数,简称形参和实参: 形参即在定义函数时,括号内声明的参数。形参本质就是一个变量名,用来接收外部传来的值。 实参即在调用函数时,括号内传入的值,值可以是常量、变量、表达式或三者的组合: #1:实参是常量 res=my_min(1,2) #2:实参是变
1 2个视图基类 2 5个视图扩展类 3 9个子类视图 4 视图集 5 action的使用 6 路由的使用 ## 1 2个视图基类 ```python # Django REST framwork 提供的视图的主要作用: 控制序列化器的执行(检验、保存、转换数据) 控制数据库查询的执行 # APIView:继承了原生Django的View # G
def print_msg(fun): def innfun_(self,msg,*args,**kwargs): print(msg) return fun(self,msg,*args,**kwargs) class Logger(Filterer): def __init__(self, name, level=NOTSET): """ Initialize the
FBV和CBV区别 CBV 内部dispatch 做了分发 FBV没办法用类的继承,多态 # DJango的View只做了CBV的分发 def dispatch(self, request, *args, **kwargs): # GET POST # BookView().get if request.method.lower() in self
# 定义函数的时候: # 位置参数 : 直接定义参数 # 默认参数,关键字参数 :参数名 = '默认的值' # 动态参数 : 可以接受任意多个参数 # 参数名之前加*,习惯参数名args, # 参数名之前加**,习惯参数名kwargs # 顺序:位置参数,*args,默认参数,*
1.参数命名规则经验 绝大多数函数接收一定数量的参数,然后根据实际调用时提供的参数的值的不同,输出不同的结果。前面我们说过,将函数内部的参数名字,定义得和外部变量的名字一样是一种不好的习惯,它容易混淆思维,甚至发生错误。 2.位置参数(必传参数/位置参数) 必须在调用函数时明确
*args和**kwargs的使用方法 *args 用来将参数打包成tuple给函数体调用 **kwargs 打包关键字参数成dict给函数体调用 def test_args(first, *args, **kwargs): print('Required argument: ', first) print('Optional argument: ', args) print('Optional argument: '
目录django中的View源码解析drf中APIView源码解析 django中的View源码解析 FBV: path('admin/', admin.site.urls), CBV: path('books/', views.BookView.as_view()), 在路由层使用CBV时需要执行 CBV.as_view()方法,使该位置的实参变为一个FBV(函数地址) as_view方法的返回值
1.drf的安装 安装:pip install djangorestframework==3.10.3 使用: 1 在setting.py 的app中注册 INSTALLED_APPS = [ 'rest_framework' ] 2 在models.py中写表模型 class Book(models.Model): nid=models.AutoField(primary_k