键值

一文搞懂*argv和**kwargs

佐手、 提交于 2020-01-22 21:02:51
大多刚接触Python的学员,会对*argv和**kwargs这两个魔法变量的用法产生困惑,今天本文将全面梳理下这两个小可爱的使用方法,让各位同学彻底搞懂它们的规则。 这两个变量主要用户函数定义,有了它俩你可以将不定数量的参数传递给一个函数。这里,需要申明下:在写Python代码时,我们习惯将它俩写成*argv和**kwargs,这只是一个书写习惯,你也可以任性地用*var和**kvars来代替它们,要注意的是符号*和**是必须写的。 函数在实际执行时,编程人员无法预先知道会被传入多少实参,这是不确定量,函数知道使用者会传多少个参数给它,幸好Python有*argv和**kwargs,有它俩帮我们统统接收。 听起来是不是很简单?实际上就是这么简单,下面通过两个例子分别说明。 *args的用法 开宗明义,*args用来接收一个非键值对的不定数量的参数列表传给函数,记住,它接受的是列表。下面例子可以帮助理解: 1 def test(normal_arg,*argv): 2 print("the normal arg is :",normal_arg) 3 for arg in argv: 4 print("we can read from *argv:",arg) 例1 ▲ 执行test('Python','C','Java','C++')之后,系统会有如下输出: 1 the

Python:字典类型

强颜欢笑 提交于 2020-01-21 13:29:50
概念 无序的,可变的,键值对集合 定义 方式1 {key1: value1, key2: value2, ......} 方式2 fromkeys(S, v=None) 静态方法:类和对象都可以调用 类调用:dict.fromkeys("xxx", "yyy"),此处的dict指的是字典类型 对象调用:dic.fromkeys("xxx", "yyy"),此处的dic指的是实例化的字典对象 注意 key不能重复,如果重复,后面的会把前面的覆盖 key必须是任意不可变类型 不可变的原因: python的字典,采用哈希的方式实现 简单存储过程: 初始化一个表格,用来存放所有的值 表格可以称为哈希表 存储一个键值对的时候,会做如下操作 根据给定的key,通过某些操作,得到一个在哈希表中的索引位置 把key通过“哈希函数”转换成一个整型数字,称为哈希值 将该数字对数组长度进行取余,取余结果当做下标 如果产生了“哈希冲突” 采用开放寻址法,通过探测函数查找下一个空位 根据索引位置,存储给定的“值” 简单查找过程 再次使用哈希函数将key转换为对应的列表的索引,并定位到列表的位置获取响应的value 字典的意义 可以通过key,访问对应的值,使得这种访问更具意义 查询效率得到很大提升 常用操作 增加 dic[key] = value :当key不存在的时候,就是增加操作 删除 del dic

MongoDB使用说明(基础篇)

点点圈 提交于 2020-01-21 09:35:56
文章目录 一、介绍 二、安装 三、使用 1.启动服务 2.客户端使用 一、介绍 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。 二、安装 windows下安装(略) 自行安装! linux下安装 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz 解压文件 tar -zxvf mongodb-linux-x86_64-3.0.6.tgz 进入解压目录 cd mongodb-linux-x86_64-3.0.6 将文件移动至 /usr/local/mongodb (个人习惯问题) 验证安装是否成功 cd bin 执行命令 ./mongod --help 如果显示如下则说明安装成功 三、使用 1.启动服务 作为服务进程启动 [root@fdsfdeggde8757 mongodb]# ./bin/mongod --dbpath ./data --logpath ./log

kernel中发送按键

断了今生、忘了曾经 提交于 2020-01-20 01:01:20
有时需要在kernel中处理一个中断,仅仅是一个状态的变化,此时发送一个键值到app端,相对比较方便。 在kernel中发送按键的函数 void input_report_key ( struct input_dev * dev , unsigned int code , int value ) void input_sync ( struct input_dev * dev ) 按键传送逻辑 从逻辑看,按键发送分四部分: 1.在kernel中注册一个input设备,用于发送按键,纯软件处理,和硬件无关 2.获取硬件状态变化,转为键值 3.对于Android系统,在framework有input service,监控input device,获取键值后,通过回调函数上报给app 4. app根据应用功能定义处理按键 典型应用场景 处理一个中断,上报一个小心说明该中断到来 一般在kernel中有已经实现的input设备驱动,无论是否有硬件设备和该驱动关联。此时在该设备驱动中增加定义一个函数,在函数中发送按键,如此也和原来的驱动逻辑解耦合,然后该函数通过EXPORT_SYMBOL_GPL声明,然后在捕获中断的驱动中调用已定义的函数,实现按键发送。 例如 xxx_keys.c void rk_send_F11_key ( void ) { printk ( "DICKE pirntk

python字典和列表使用

随声附和 提交于 2020-01-19 16:19:41
一、字典中健值为列表或字典 1 a.setdefault(key,[]).append(b)——键值是列表 2 a.setdefault(key,{}).append(b)——键值是字典 二、键值为列表的字典按某个健值排序 after_sort =sorted(keyname,key=lambda e:e.__getitem__(key2))——keyname为字典的健,key2为对应健的值(列表中字典)中的某个健如:a = {'300.00': [{'itemId': '2526185258', 'price': '49.50', 'shopId': '1819656192'},{'itemId': '2526185259', 'price': '40.50', 'shopId': '1819656192'}]}b = sorted("300.00",key=lambda e:e.__getitem__("price"))结果为:[{'itemId': '2526185259', 'price': '40.50', 'shopId': '1819656192'}, {'itemId': '2526185258', 'price': '49.50', 'shopId': '1819656192'}] ——按price升序 来源: https://www.cnblogs.com

简单介绍join,outer-join,semi-join,anti-join的区别

纵然是瞬间 提交于 2020-01-19 04:21:21
表连接的方式如join,semi-join,outer-join,anti-join; 表连接的实现方式如nested loop,merge,hash. 本文简单的介绍表连接的方式join,semi-join,outer-join,anti-join和适用情景。 假设2个数据源(row source). Emp(id pk,ename,deptno) Dept(deptno pk,dname) 如下是join select ename,dname from emp,dept where emp.deptno=dname.deptno; 2个数据源键值一一比较,返回相互匹配的记录集 for example: nested loop join for x in ( select * from emp ) loop for y in ( select * from dept) loop if ( x.deptno == y.deptno ) OutPut_Record(x.ename,y.dname) End if end loop end loop outer-join select ename,dname from emp,dept where emp.deptno= dept.deptno(+); select ename,dname from emp,dept where emp

加密与安全

女生的网名这么多〃 提交于 2020-01-19 01:07:30
文章目录 一,URL编码 为什么要使用URL编码? 二,Base64编码 三,MD5加密 常用的摘要算法 四,SHA-1算法 五,对称加密算法 AES加密 六,非对称加密算法 RSA加密 RSA分段加解密 七,SM4加密 SM4Util工具类 SM3Util工具类 测试类 一,URL编码 为什么要使用URL编码? 我们都知道Http协议中参数的传输是 "key=value" 这种简直对形式的,如果要传多个参数就需要用 “&” 符号对键值对进行分割。如 "?name1=value1&name2=value2" ,这样在服务端在收到这种字符串的时候,会用 “&” 分割出每一个参数,然后再用 “=” 来分割出参数值。 现在有这样一个问题,如果我的参数值中就包含=或&这种特殊字符的时候该怎么办。 比如说 “name1=value1” ,其中value1的值是 “va&lu=e1” 字符串,那么实际在传输过程中就会变成这样 “name1=va&lu=e1” 。我们的本意是就只有一个键值对,但是服务端会解析成两个键值对,这样就产生了奇异。 如何解决上述问题带来的歧义呢?解决的办法就是对参数进行URL编码? URL编码只是简单的在特殊字符的各个字节前加上%,例如,我们对上述会产生奇异的字符进行URL编码后结果: “name1=va%26lu%3D” ,这样服务端会把紧跟在“%

B+树的插入图片演示

浪尽此生 提交于 2020-01-18 14:47:00
B+树和二叉树、平衡二叉树一样都是经典的数据结构。   B+树由B树和索引顺序访问方法(ISAM,这就是MyISAM引擎最初参考的数据结构)演化而来,实际中已经没有使用B树的情况了。   B+树是为磁盘或其他直接存储辅助设备设计的一种平衡查找时。   B+树中, 所有记录节点都是按键值的大小顺序存放在同一层的叶子节点上 ,由各叶子节点指针进行连接。   如下:其高度为2,每页存放4条记录,扇出(fan out)为5。所有记录都在叶子节点上,并且是顺序存放的。 四、B+树的插入操作   B+树的插入 必须保证插入后叶子节点中的记录依然排序 ,同时需要考虑插入到B+树的三种情况,每种情况都会导致不同的插入算法。如下所示:   1、如下图这颗B+树,若用户插入28这个值,发现当前叶子页leafPage和IndexPage索引页都没有满,直接插入就行。                        图(1)                        图(2)   2、从上图接着插入70这个键值,这时原来的leafPage已经满了,但是IndexPage还没有。这时插入leafPage后的情况为50、55、60、65、70, 并根据中间值60来拆分叶子节点, 可得下图。                          图(3)    为了保持平衡对于新插入的键值可能需要做大量的拆分页

小白之路由浅入深之------day16

人盡茶涼 提交于 2020-01-18 04:24:12
目录 1.Map集合 1.1Map集合概述和特点【理解】 1.2Map集合的基本功能【应用】 1.3Map集合的获取功能【应用】 1.4Map集合的遍历(方式1)【应用】 1.5Map集合的遍历(方式2)【应用】 1.6Map集合的案例【应用】 1.6.1HashMap集合练习之键是String值是Student 1.6.2HashMap集合练习之键是Student值是String 1.6.3集合嵌套之ArrayList嵌套HashMap 1.6.4集合嵌套之HashMap嵌套ArrayList 1.6.5统计字符串中每个字符出现的次数 2.Collections集合工具类 2.1Collections概述和使用【应用】 2.2ArrayList集合存储学生并排序【应用】 3.斗地主案例 3.1模拟斗地主案例-普通版本【应用】 3.2模拟斗地主案例-升级版本【应用】 1.Map集合 1.1Map集合概述和特点【理解】 Map集合概述 interface Map < K , V > K:键的类型;V:值的类型 Map集合的特点 键值对映射关系 一个键对应一个值 键不能重复,值可以重复 元素存取无序 Map集合的基本使用 public class MapDemo01 { public static void main ( String [ ] args ) { //创建集合对象 Map

Redis常用的简单命令演示

淺唱寂寞╮ 提交于 2020-01-17 17:38:56
package redis; import java.util.Iterator; import java.util.List; import java.util.Set; import redis.clients.jedis.Jedis; import redis.clients.jedis.SortingParams; public class RedisJava { /** * @param args */ public static void main(String[] args) { Jedis jedis = new Jedis("localhost"); System.out.println("连接redis:"+jedis.ping()); redisHashTest(jedis); //redisSortedSetTest(jedis); //redisSetTest(jedis); //redisListTest(jedis); //redisStringTest(jedis); } public static void redisHashTest(Jedis jedis) { System.out.println("****************"); //清理整个Redis jedis.flushDB(); //添加元素 jedis.hset("user"