标签:info form 内存地址 oba 而在 字母 决定 val format
字典查询快的原因
字符编码
函数定义
局部变量、全局变量
返回值
嵌套函数
递归(二分查找)
三元运算
map
lamba
函数式编程
高阶函数
内置函数
字典占用内存比列表多,但是查询速度比列表快的多
为什么会查询速度会快呢?因为他是hash类型的,那什么是hash呢?
哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法
dict会把所有的key变成hash 表,然后将这个表进行排序,这样,你通过data[key]去查data字典中一个key的时候,python会先把这个key hash成一个数字,然后拿这个数字到hash表中看没有这个数字, 如果有,拿到这个key在hash表中的索引,拿到这个索引去与此key对应的value的内存地址那取值就可以了。
那为什么会快呢?通过数字去hash表中查看数字时,采用某种算法,maybe是二分法,查询的次数很少。
key -->hash值-->类似二分查找,找到hash值索引-->value对应的内存地址
字符编码
先说python2
再说python3
总结:
编码应用比较多的场景应该是爬虫了,互联网上很多网站用的编码格式很杂,虽然整体趋向都变成utf-8,但现在还是很杂,所以爬网页时就需要你进行各种编码的转换,不过生活正在变美好,期待一个不需要转码的世界。
函数的定义
特性:
函数的定义主要有如下要点:
def func(name):#func函数名,name参数 print(‘my name is‘,name)#函数体 func(‘hongpeng‘)#调用func函数
形参:变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
上面的例子中name就是形参,‘hongpeng‘就是实参
函数的几种参数
普通参数
像下面例子中的name,age,job
默认参数
在定义函数时直接赋值,调用函数如果不指明默认就是定义函数时赋的值,指明的话就是你赋的值,定义时特别要注意默认参数在最后。
def inf(name,age,job,country=‘CN‘): print(‘the information of %s‘.center(50,‘-‘)%name) print(‘name:‘,name) print(‘age:‘,age) print(‘job:‘,job) print(‘country:‘,country) inf(‘hongpeng‘,21,‘ops‘) inf(‘alex‘,31,‘loser‘,‘JP‘) #输出 --------------the information of hongpeng--------------- name: hongpeng age: 21 job: ops country: CN --------------the information of alex--------------- name: alex age: 31 job: loser country: JP
关键参数
正常情况下,给函数传参数要按顺序,如果一个函数中参数太多或者不想按顺序就可以用关键参数,只需调用时指定参数名即可,好像没什么卵用。。。非固定参数**kwargs在传参数的时候会用到。
非固定参数
若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数
*args
def inf(name,age,job,*args):#*args会把多个传入的参数放入一个元组中 print(name,age,job,args) inf(‘hongpeng‘,21,‘ops‘) inf1(‘hongpeng‘,21,‘ops‘,‘CN‘,‘python‘) #输出 hongpeng 21 ops ()#因为没有传值,所以args为空 hongpeng 21 ops (‘CN‘, ‘python‘)
**kwargs
def inf(name,age,job,**kwargs):#**kwargs把传入参数放在字典中,所以调用时参数得用关键参数的形式 print(name,age,job,kwargs) inf(‘hongpeng‘,21,‘ops‘) inf(‘hongpeng‘,21,‘ops‘,country = ‘CN‘,lesson = ‘python‘) #输出 hongpeng 21 ops {} hongpeng 21 ops {‘lesson‘: ‘python‘, ‘country‘: ‘CN‘}
局部变量和全局变量
name = ‘alex‘ def inf(): name = ‘hongpeng‘ print(‘函数里面的name:‘,name) inf() print(‘函数外的name:‘,name)
函数里面的name改变并没有影响到外部的name
如果想在函数里面对全局变量改变,用global,但是一般不会在函数里面去改全局变量的值,so,忘了它吧。
name = ‘alex‘ def inf(): global name name = ‘hongpeng‘ print(‘函数里面的name:‘,name) inf() print(‘函数外的name:‘,name) #输出 函数里面的name: hongpeng 函数外的name: hongpeng
返回值
嵌套函数
name = ‘ALEX‘ def name(): name = ‘alex‘ def name2(): name = ‘hongpeng‘ print(‘3name:‘,name) name2() print(‘2name‘,name) name() #输出 3name: hongpeng 2name alex
递归函数
标签:info form 内存地址 oba 而在 字母 决定 val format
原文地址:http://www.cnblogs.com/hongpeng0209/p/6014415.html