动态

type的高级用法 :动态创建类

一笑奈何 提交于 2019-11-30 19:32:59
参考链接: https://blog.csdn.net/TuZiFaDai/article/details/93738047 定义: 要创建一个class对象,type()函数依次传入3个参数: 1.class的名称; 2.继承的父类集合,注意Python支持多重继承,如果只有一个父类,别忘了tuple的单元素写法; 3.class的方法名称与函数绑定,这里我们把函数fn绑定到方法名hello上。 通过type()函数创建的类和直接写class是完全一样的,因为Python解释器遇到class定义时,仅仅是扫描一下class定义的语法,然后调用type()函数创建出class。正常情况下,我们都用class Xxx...来定义类,但是,type()函数也允许我们动态创建出类来,也就是说,动态语言本身支持运行期动态创建类,这和静态语言有非常大的不同,要在静态语言运行期创建类,必须构造源代码字符串再调用编译器,或者借助一些工具生成字节码实现,本质上都是动态编译,会非常复杂。 例子: >>> def fn(self, name='world'): # 先定义函数 ... print('Hello, %s.' % name) ... >>> Hello = type('Hello', (object,), dict(hello=fn)) # 创建Hello class >>> h =

jsp

醉酒当歌 提交于 2019-11-30 18:57:24
JSP(Java Server Page)的全程是Java服务页面,是一种web动态页面技术,事实上JSP就是嵌入了Java程序段的HTML文件。JSP文件后缀名为.jsp。JSP由HTML要素(静态部分)、JSP元素(动态部分)和JSP注释组成。 JSP元素包括脚本元素、指令元素和动作元素。JSP运行时文件会被翻译成Java类文件(class),并且产生Java对象。 JSP和servlet一样时一种服务器端技术,同样运行在web服务器端。JSP定义在Java web工程中WebRoot根路径下或者其某个目录下,其访问方式和访问HTML文件一致。 JSP在运行时会动态编译成一个Servlet,其本质上就是一个Servlet,JSP是对Servlet对象的扩展,但和Servlet技术有很大不同。 Servlet和JSP在服务器端运行后均可以在客户端产生Web动态页面,但在构建Web动态页面方面JSP比Servlet具有很多优势。Servlet完全是由Java程序代码构成,擅长于流程空值和业务路基处理,通过Servlet来生成动态页面结构不清晰,页面效果不能预览,对编程者要求也高(既要求能编程,还要会美工)。JSP由HTML代码和JSP元素构成,对页面的静态内容和动态内容进行了有效分离,可以方便地编写Web动态页面。 JSP元素 脚本元素 1、声明

动态查询列表页面的分页

南楼画角 提交于 2019-11-30 18:22:05
方法一:在controller层中接受参数,并作为查询条件,在maybatis使用动态查询,多个查询条件可以放在一个map中,并且查询条件存进request域,在页面中使用el表达式字符串拼接来保持上一次的查询条件,可以像以下代码,但如果条件过多,则需要很多的代码,如果将查询条件放在map中传到前台,用set存放foreach处理过的条件(&key=value),也可以。 ${rolename!=null?"&rolename=".concat(rolename):""} 方法二:在controller层中创建查询条件的变量来存储条件,这样在上一页等地方就不用拼接条件的字符串了,但是要去掉条件需要额外设置。因为没有参数的情况下controller层里的值为null,但不能直接将相应的变量设为null,可以将消除所有查询条件的参数设为 no,controller接到以后,就将变量设为null或者别的配合mybatis动态查询的值,以消除条件。这种方法在查询所有时参数稍显麻烦 来源: https://www.cnblogs.com/psxfd4/p/11634788.html

mybatis 中动态表字段 查询之statementType

有些话、适合烂在心里 提交于 2019-11-30 18:04:21
要实现动态传入表名、列名,需要做如下修改 首先添加属性statementType=”STATEMENT” statementType:STATEMENT(非预编译),PREPARED(预编译)或CALLABLE中的任意一个,这就告诉 MyBatis 分别使用Statement,PreparedStatement或者CallableStatement。默认:PREPARED。这里显然不能使用预编译,要改成非预编译。 然后sql里的所有变量取值都改成${xxxx},而不是#{xxx} <!-- 根据实体名称和字段名称和字段值获取唯一记录 --> <select id="findUniqueByProperty" resultType="Illness" statementType="STATEMENT"> select * FROM biz_m_illness where ${propertyName} = '${value}' </select> 相当于使用字符拼接形式形成新的sql语句进行编译查询 来源: CSDN 作者: PFDYZ 链接: https://blog.csdn.net/qq_40010745/article/details/81454509

mybatis执行过程及经典面试题

北慕城南 提交于 2019-11-30 18:03:58
Mybatis执行流程   mybatis中xml解析是通过SqlSessionFactoryBuilder.build()方法。   初始化mybatis(解析xml文件构建成Configuration对象)并初始化SqlSessionFactory对象   在解析xml时会同时根据其中节点做相应的初始化操作   关键节点: settings、typeAliases、mappers   通过SqlSesssionFactory.openSession()方法打开一个SqlSession对象   SqlSessionFactory对象的作用是里面存了全局的配置信息以及初始化环境和DataSource,DataSource对象可以用来开辟连接,SqlSessionFactory对象是用来保存全局信息并且打开数据库连接   在打开SqlSession对象的时候就会开辟一个连接对象并传给SqlSession对象,和数据库打交道的操作入口在于SqlSession对象   通过SqlSession.getMapper()根据传入的Mapper对象类型动态代理并返回一个动态代理后的Mapper对象   由SqlSession.select()/update(),MapperProxy对象的invoke()方法执行后再执行execure方法,再根据情况选择执行select/update  

二函数的动态参数

自作多情 提交于 2019-11-30 16:22:20
1.1 动态参数 *args 动态位置参数 **kwargs 动态默认参数 位置 > 动态位置 > 默认 > 动态默认 定义的时候是 聚合 函数体和实参时 打散 *args,**kwargs 在函数的使用阶段叫打散 1.*args--打散的是源数据类型 2.**kwargs--打散的是字典的键 1.2 函数的注释 def 函数名(): """ 注释信息 :return: """ 函数体 函数名.__doc__ 查看注释内容 函数名.__name__ 查看函数名称 1.3 名称空间 1.加载 内置空间 > 全局空间 > 局部空间 2.取值 局部空间 > 全局空间 > 内置空间 (就地原则) 作用域: 1.全局作用域: 全局 + 内置 2.局部作用域: 局部 1.4 函数的嵌套 不管在什么位置,只要是函数名()就是在调用函数 1.5 global nonlocal global : 只修改全局变量,如果全局没有创建一个新的. nonlocal :只修改局部修改离声明nonlocal 最近的一层,上一层没有继续向上上层查找.只限在局部 找不到就报错! def foo(): global a a = 10 print(a) foo() print(a) 来源: https://www.cnblogs.com/zhaoganggang/p/11604135.html

vue初学备份(动态切换class类)

孤街醉人 提交于 2019-11-30 16:18:14
<div id="app">   <div v-bind:class="[ isActive ? 'active':'']" @click="clickActive"></div>   {{isActive}}   <div v-for = "(item,index) in actvieArray">   <p v-bind:class = "[isActive&&ind==index? 'active':'']" @click="arrayActive(index)" >{{item}}</p>   </div> </div> <script type="text/javascript">   let vm = new Vue({   el:'#app',   data:{     isActive:false,     actvieArray:["测试了1","测试了2","测试了3","测试了4"],     ind:-1,     /*isAcrtive:true*/   },   methods:{     clickActive:() =>{       let that = this       vm.isActive = !vm.isActive;// zhe di 方是可行的....     },   arrayActive:(index) => {    

静态编译、动态编译、静态链接库、动态链接库

百般思念 提交于 2019-11-30 15:50:02
(转载 来自https://www.cnblogs.com/lisuyun/p/3953589.html) 1.静态编译: 编译器在编译可执行文件时,把需要用到的对应动态链接库(.so或.ilb)中的部分提取出来,链接到可执行文件中去, 使可执行文件在运行时不需要依赖于动态链接库. 2.动态编译: 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一 方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接 库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文 件就不能运行。 静态编译: 静态lib将导出声明和实现都放在lib中。编译后所有代码都嵌入到宿主程序。 动态编译: 动态lib相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明。编译后只是将导出声明部分编译到宿主程序中,运行时 候需要相应的dll文件支持。 动态链接库: 创建一个动态链接库,会生成x.dll,x.lib 动态链接库有两种加载方式: 1.一种是静态加载,就是在编译的时候就载入动态链接库。此种方法可调用类方法. 可执行程序静态加载动态链接库需要三个文件 x.dll, x.lib, x.h 可执行程序的头文件加入: #include