1.元祖允许重复数据。只读元组,列表,元祖没有增删改查,比如身份证列表,不允许修改,就存成 元祖。
2. 字典 key-value对
  1. 特性:
  2. 无顺序
  3. 去重
  4. 查询速度快,比列表快多了
  5. 比list占用内存多
为什么会查询速度会快呢?因为他是hash类型的,那什么是hash呢?
哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法
dict会把所有的key变成hash 表,然后将这个表进行排序,这样,你通过data[key]去查data字典中一个key的时候,python会先把这个key hash成一个数字,然后拿这个数字到hash表中看没有这个数字, 如果有,拿到这个key在hash表中的索引,拿到这个索引去与此key对应的value的内存地址那取值就可以了。
上面依然没回答这样做查找一个数据为什么会比列表快,对不对? 呵呵,等我课上揭晓。
3、字符串一样,得到的HASH值一样
>>> hash('haiao')
-8727460704815598850
>>> hash('haiao')
-8727460704815598850
>>>
4、python里的hash 只保证在同一个进程里的值是一样的。
5、python字典的hash是指key是hash,value不是hash的---所以快
6、python的列表不能被hash
7、查询字典中65535个数值的某个数字,2的16次方=65535,如果需要在这里查出数字,就需要查16次。
8、如果查询人名,就把人名变成hash值,hash值就是数字一堆,排序好就可以按二分法查询出来,提高效率。
9、先说python2
  1. py2里默认编码是ascii
  2. 文件开头那个编码声明是告诉解释这个代码的程序 以什么编码格式 把这段代码读入到内存,因为到了内存里,这段代码其实是以bytes二进制格式存的,不过即使是2进制流,也可以按不同的编码格式转成2进制流。
  3. 如果在文件头声明了#_*_coding:utf-8*_,就可以写中文了, 不声明的话,python在处理这段代码时按ascii,显然会出错, 加了这个声明后,里面的代码就全是utf-8格式了
  4. 在有#_*_coding:utf-8*_的情况下,你在声明变量如果写成name=u"大保健",那这个字符就是unicode格式,不加这个u,那你声明的字符串就是utf-8格式
  5. utf-8 to gbk怎么转,utf8先decode成unicode,再encode成gbk
再说python3
  1. py3里默认文件编码就是utf-8,所以可以直接写中文,也不需要文件头声明编码了,干的漂亮
  2. 你声明的变量默认是unicode编码,不是utf-8, 因为默认即是unicode了(不像在py2里,你想直接声明成unicode还得在变量前加个u), 此时你想转成gbk的话,直接your_str.encode("gbk")即可以
  3. 但py3里,你在your_str.encode("gbk")时,感觉好像还加了一个动作,就是就是encode的数据变成了bytes里,我操,这是怎么个情况,因为在py3里,str and bytes做了明确的区分,你可以理解为bytes就是2进制流,你会说,我看到的不是010101这样的2进制呀, 那是因为python为了让你能对数据进行操作而在内存级别又帮你做了一层封装,否则让你直接看到一堆2进制,你能看出哪个字符对应哪段2进制么?什么?自己换算,得了吧,你连超过2位数的数字加减运算都费劲,还还是省省心吧。  
  4. 那你说,在py2里好像也有bytes呀,是的,不过py2里的bytes只是对str做了个别名,没有像py3一样给你显示的多出来一层封装,但其实其内部还是封装了的。 这么讲吧, 无论是2还是三, 从硬盘到内存,数据格式都是 010101二进制到-->b'\xe4\xbd\xa0\xe5\xa5\xbd' bytes类型-->按照指定编码转成你能看懂的文字。编码应用比较多的场景应该是爬虫了,互联网上很多网站用的编码格式很杂,虽然整体趋向都变成utf-8,但现在还是很杂,所以爬网页时就需要你进行各种编码的转换,不过生活正在变美好,期待一个不需要转码的世界。
10、 utf-8 一个字符占三个字结
msg='大保健'
data=[msg]
print(data) 
************
在python2中显示\xe5\xa4\xbf\...
11、占两个字节
msg=u'大保健'
data=[msg]
print(data) 

**********

12、 只有Unicode 有encode方法,python3里内存的数据都是unicode格式。
python2里的 str bytes 没有明确区分,bytes 其实就是二进制流的格式。
13、处理二进制文件,如视频文件,用WB格式。不声明的话,默认
msg='大保健'
f=open('test_rb','wb') # wb处理二进制文件,如视频文件,用WB格式。不声明的话,默认。
f.write(msg.encode())
f.close()
14、
msg='大保健'
f=open('test_rb',encoding='utf-8') # wb处理二进制文件,如视频文件,用WB格式。不声明的话,默认。
print(f.read())
f.close()
17、函数
def sayHi():
print('halou!')
sayHi() #加上括号才是真正的调用
18、函数传参数,定义几个,传几个。
def hb(name):
print('my name is %s'%name)
hb('hhaibao')
19、传两个参数的函数
def hb(name,age):
print('my name is %s,my age is %s'%(name,age))
hb('hhaibao',22)
20、函数不应该以来外边定义变量或参数,要能够独立运行
21、形参 与 实参
def hb(name): # name形参
print('my name is %s'%name)
hb('hhaibao') ## hhaibao 实参 
22、有默认值参数,传值就调用实参,不传按默认值参数显示(具有默认参数值可以不传,但是传值则按传的值显示)

def hb(name,age,nationality='CN'):

    print('my name is %s,my age is %s,my county is %s'%(name,age,nationality))
hb('hhaibao',22)
ouput:my name is hhaibao,my age is 22,my county is CN
23、具有默认参数值可以不传,但是传值则按传的值显示
def hb(name,age,nationality='CN'):
print('my name is %s,my age is %s,my county is %s'%(name,age,nationality))
hb('hhaibao',22,'JP')

OUPUT:my name is hhaibao,my age is 22,my county is JP

23、所有非默认参数(位置参数)都必须写到默认参数(有默认数值)右边,按顺序传。

def hb(name,nationality='CN',age):

    print('my name is %s,my age is %s,my county is %s'%(name,age,nationality))
hb('hhaibao',22,'JP')
24、如果不按顺序填写,则可以传值得时候指定参数
def hb(name,age,sex='F',nationality='CN'):
print('my name is %s,my age is %s,my county is %s'%(name,age,sex),nationality)
hb('hhaibao',22,nationality='po',sex='F')

25、指定参数名赋值就叫关键字参数,必须放到后边

def hb(name,age,sex='F',nationality='CN'):

    print('my name is %s,my age is %s,my county is %s'%(name,age,sex),nationality)
hb('hhaibao',,nationality='po',sex='F')
26、非固定参数

def hb(name,age,sex='F',nationality='CN',*args):

    print('my name is %s,my age is %s,my county is %s'%(name,age,sex),nationality,args)
hb('hhaibao',22,nationality='po',sex='F')
27、命名规范,元祖的就是kwargs,定义别的也可以用。

def hb(name,age,sex='F',nationality='CN',*args,**kwargs):

    print('my name is %s,my age is %s,my county is %s'%(name,age,sex),nationality,args,kwargs)
hb('hhaibao',22,nationality='po',sex='F')
28、*args,*kwargs想传就传,可以不传,可以空白
29、练习 参数必须加括号
def register(name,age,sex, *args, **kwargs):
print('my name is %s,my age is %s,my gender is %s '%(name,age,sex,*args,*kwargs))
register(name='haibao',age=99,sex='female')
30、默认按位置参数,然后按关键字参数,所以顺序要对,

def hb(name,age,sex='F',nationality='CN',*args,**kwargs):

    print('my name is %s,my age is %s,my county is %s'%(name,age,sex),nationality,args,kwargs)
hb(22,name='haibao',nationality='po',sex='F') # 22 和name='haibao'都传给了name、
ouput: 

TypeError: hb() got multiple values for argument 'name'
31、函数返回值
def auth(username,password):
_username='haibao'
_password='123456'
if username==_username and password==_password:
print("welcome!")
user = input('user_name:').strip()
passwd = input('pass_word:').strip()
auth(user,passwd)
output:
user_name:haibao 
pass_word:123456
 welcome!  
32、完全独立的两个变量, 一个是函数局部变量,只在局部生效,一个是全局变量;局部变量声明global无法修改全局变量
login_status=False  #全局变量 
def auth(username,password):
_username='haibao'
_password='123456'
if username==_username and password==_password:
print("welcome!")
login_status=True #局部变量
user = input('user_name:').strip()
passwd = input('pass_word:').strip()
auth(user,passwd)
33、global login_status 将局部变量声明为全局变量
halou=False
def register(name,age,sex, *args, **kwargs):
print('my name is %s,my age is %s,my gender is %s '%(name,age,sex,*args,*kwargs))
global halou
print(halou)
register(name='haibao',age=99,sex='female')
34、返回值 
34.1一旦你的函数经调用并开始执行,那你函数外部的程序就没有办法控制函数的执行过程。
此时外部程序只能等待函数执行结果。因为外部程序要根据函数的执行结果来决定下一步怎么走,执行结果就是以return的形式返回给外部程序。
34.2return代表着一个函数的结束。
34.3 函数可以return所有数据类型。
34.4对于用户角度,函数可以返回任意数量的值,但对于py来讲,函数只能返回一个值。
35、嵌套函数
如果调用内层函数,函数外出函数运行时,内层函数才能运行。name2 不能外层调用,name调用时,才能调用。

name = 'haibao'

def change_name():
name = 'haibao'
print(name)
def change_name2():
name='rain'
print('name2',name)
change_name2()
change_name()
36、递归
n = 0
def func(n):
print("9999",n+1)
func(n+1)
func(n)
37、递归
n = 0
def calc(n):
print(n)
if n/2 > 0:
calc(n+1)
calc(10)
38、地板除
n = 0
def calc(n):
print(n)
if n//2 > 0:
calc(n//2)
calc(10)
40、执行完一次,再退出。
def calc(n):
if n//2 > 0:
calc(n//2)
print(n)
calc(10)
output:
1
2
5
10
41、递归特性:
41.1必须有明确结束条件
41.2每进入一层递归,问题规模比上次递归减少,在计算机中,函数调用时通过栈这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会剪一层栈帧
41.3递归的效率不高,递归过多会导致栈溢出。
42练习
def calc(n):
print(n,n//2)
if n//2 > 0:
calc(n//2)
print(n,n//2)
calc(10)
43、二分查找
*************
data = range(0,1000,3)
# data = [3,6,7,19,1,30,2,45,1982,22,33,45,22,34,67,33,99,11,73]
def binary_search(datasets,find_num):
if len(datasets) > 0:
middle_pos = int(len(datasets)/2)
if datasets[middle_pos] == find_num:
#find it
print("find it,",datasets[middle_pos])
elif datasets[middle_pos] > find_num:
print("to left")
binary_search(datasets[0:middle_pos],find_num)
elif datasets[middle_pos] < find_num:
print("to right")
binary_search(datasets[middle_pos+1:],find_num)
else:
print("can't find the num",find_num)
binary_search(data,45) #chuanzhi
*************
44、有名的函数 ,如上面几个都是有名的函数 
45、匿名函数
46、匿名两个参数,lambda 不能跟默认参数
def calc(n):
return n*n
data = map(calc,range(10))
for i in data:
print(i)
47、 lambda表示法
data = map(lambda n:n*2,range(10))
for i in data:
print(i)
48、三元运算
a = 4
b = 5
d = a if a >10 else b
print(d)
49、调用三元运算
def calc(n):
return -n
data = map(lambda n:n*2 if n>5 else calc(n),range(10))
for i in data:
print(i)
data = map(lambda n:n*2 if n>5 else -n,range(10))
for i in data:
print(i)
50、调用三元运算和函数
def calc(n):
return -n
data = map(lambda n:n*2 if n>5 else calc(n),range(10))
for i in data:
print(i)
51、两个变量
data=map(lambda x,y:x*y*y if x<y else x-y,range(100),range(20))
for i in data:
print(i)
*************
data=map(lambda x,y:x*y*y if x<y else x-y,range(10,20),range(15,30))
for i in data:
print(i)
*************两个 元素的iterable
data=map(lambda x,y:x*y*y if x<y else x-y,range(10,20),range(15,30,2))
for i in data:
print(i)
52、高阶函数
def add(x,y,f):
return f(x)+f(y)
res=add(3,-9,abs)
print(res)
53、高阶函数
def add(x,y,f):
return f(x)+f(y)
def calc(n):
return n*n
res=add(3,-9,calc)
print(res)
54、
周智明,望京,医疗,北湖9号
纪冠宇宙 京东金融
张国辉,美视网
刘孟杰:天极传媒
朱儒 :美信
宋 ,美信
刘海龙:移动做手机APP
刘宝闯:
侯紫玉:
魏曼 :女孩,带饭女孩2.6
王承泰,阿里云售后运维
翟超群:千方科技
56、字符串 BYTES类型都不能更改,只能重新复制
>>> a = 'haibao'

>>> a[0] 'h'

>>> a[2] 'i'

>>> a[1]='l'

Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment

57、bytesarray 可以修改

>>> a = 'haibao'  

>>> a[0] 'h'

>>> c=bytearray(a)

>>> a[0]= 'lh'  

58、callable 是否可以被调用
def calc():
pass
print(callable(calc))
59、ordinal ascii码顺序
print(str(97))   ---97
print(chr(97)) ----a
print(str(97))
print(chr(97))
print(ord('a'))
61、执行别的文件 compile exec
f=open('tofile.py',encoding='utf-8')
code=compile(f.read(),'','exec')
print(code)
exec(code) 
62、eval
63dir
f=open('tofile.py',encoding='utf-8')
code=compile(f.read(),'','exec')
print(code)
exec(code)
print(dir(f)) 
64、fileter
65、frozenset()变成不可变的字典
66、global把当前程序所在内存里的所有数据都以字典的形式打印出来
67、0x表示16进制的表示方法
print(hex(90)) 
68、max
print(max(3,6,8,9,1)) 
69 oct 八进制
print(oct(90))
70、sep seperate
msg="hello,world!"
f=open('tofile','w',encoding="utf-8")
print(msg,"hello 2 world",sep="|",end="=",file=f)
69、reverse
data=[8,34,45,67,23,1,30]
data=reversed(data)
for i in data: print(i)
# for i in data2: print(i) 
字符串的反转
data='haibaohailinghaiwen'
data=reversed(data)
for i in data: print(i)
# for i in data2: print(i)
71round
print(round(10.34))   10
print(round(10.34,1)) 10.3
print(round(10.34,2)) 10.34
print(round(10.36,1))  10.4
72 set 列表便集合, 去重
data=[3,3,3,3,34,4,4,4,46,6,6,6]
print(set(data)) 
73、 slice
a=range(200)
f=slice(20,80,3)
for i in a[f]:
print(i)
74、字符串 直接按ascii吗排序 变成列表
a = 'i love you more than i can say'
a=sorted(a)
print(a)
*********
[' ', ' ', ' ', ' ', ' ', ' ', ' ', 'a', 'a', 'a', 'c', 'e', 'e', 'h', 'i', 'i', 'l', 'm', 'n', 'n', 'o', 'o', 'o', 'r', 's', 't', 'u', 'v', 'y', 'y']
75、zip
a=[1,3,4,7,10]
b=['haiao','hailing','haiwen']
for i in zip(a,b):
print(i)

一鼓作气 博客--第四篇 note4的更多相关文章

  1. Scrum 冲刺博客第四篇

    一.当天站立式会议照片一张 二.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中 昨天已完成的工作 新建立了一个list页面用来显示题目,并且创建了列表用来进行题目的存放,将 ...

  2. 一鼓作气 博客--第八篇 note8

    0.,222] list[33] except IndexError as e : print('index error ') except ValueError as e : print('valu ...

  3. 一鼓作气 博客--第七篇 note7

    面向对象相关知识简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义 ...

  4. 一鼓作气 博客--第六篇 note6

    1.无论公司付给你多少,你的青春都是廉价的!! 2.通往财富自由之路 --得到APP 3.time 3.1 time.time() t = time.time() print(t) #--->1 ...

  5. 一鼓作气 博客--第五篇 note5

    一.迭代器 二.装饰器 三.生成器 1.生成列表的方式有几种 2.把列表每个数都加1 2.1 data =[1,2,3] for i in map(lambda x:x+1,data):print(i ...

  6. 一鼓作气 博客--第三篇 note3

    1 推荐读书消费者行为学 -商业的本质,APP得到,5分钟商学院 2定义字典 dic={'name':haibao,'age':18} 3字典的基本操作--查询 dic={'name':'haibao ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  8. [转]有哪些值得关注的技术博客(Java篇)

    有哪些值得关注的技术博客(Java篇)   大部分程序员在自学的道路上不知道走了多少坑,这个视频那个网站搞得自己晕头转向.对我个人来说我平常在学习的过程中喜欢看一些教程式的博客.这些博客的特点: 1. ...

  9. Django搭建博客网站(四)

    Django搭建博客网站(四) 最后一篇主要讲讲在后台文章编辑加入markdown,已经在文章详情页对markdown的解析. Django搭建博客网站(一) Django搭建博客网站(二) Djan ...

随机推荐

  1. 学号20145332 《信息安全系统设计基础》实验五 简单嵌入式WEB服务器实验

    实验目的 掌握在 ARM 开发板实现一个简单 WEB 服务器的过程. 学习在 ARM 开发板上的 SOCKET 网络编程. 学习 Linux 下的 signal()函数的使用. 实验内容 学习使用 s ...

  2. react开发环境搭建

    ---恢复内容开始--- 要想用react,需要安装: 1)babel-sublime: 作用:编译es6,支持ES6, React.js, jsx代码高亮,并对所编译的代码进行高亮显示. 安装步骤: ...

  3. Centos7下安装mysql5.7.16

    mysql的安装(root用户下) 从官网下载软件 linux下必须安装系统对应的版本,多少位 必须安装的是:server,client 但是我可不管要安装那个插件,我们直接使用bundle版本(就是 ...

  4. js实例--飞机大战

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...

  5. H5(三)

    Canvas(画布)   基本内容     简单来说,HTML5提供的新元素<canvas>     Canvas在HTML页面提供画布的功能       在画布中绘制各种图形     C ...

  6. wkhtmltopdf 将网页转换为PDF和图片

    wkhtmltopdf 是一个shell工具,它使用了WebKit渲染引擎和Qt,将网页html转换为pdf的强大工具,转换后的pdf也可以通过pdf工具进行复制.备注.修改 官网下载地址:http: ...

  7. 第二十二篇:在SOUI中使用代码向窗口中插入子窗口

    使用SOUI开发客户端UI程序,通常也推荐使用XML代码来创建窗口,这样创建的窗口使用方便,当窗口大小改变时,内部的子窗口也更容易协同变化. 但是最近不断有网友咨询如何使用代码来创建SOUI子窗口,特 ...

  8. winform快速开发平台 -> 快速绑定ComboBox数据控件

    通常我们在处理编辑窗体时.往往会遇到数据绑定.例如combobox控件绑定数据字典可能是我们经常用到的.然而在我的winform快速开发平台中我是如何处理这个频繁的操作呢? 首先,我们要绑定combo ...

  9. windows 查看软件是32位还是64位

    我有一个配置挺好的电脑,win10 64位的系统,但是最近下载的一个软件用着巨慢,导致我严重想知道下载的软件是64位的还是32位的 百度谷歌了很久,大多数都说是两个方法: 1. 判断文件的安装路径,如 ...

  10. display:table-cell

    布局神器display:table-cell Author:owenhong2015-06-17 随着时间的推进,ie6.ie7在中国浏览器市场的占有率越来越低的情况,我现在工作的团队,经过用户访问数 ...