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. October 31st Week 45th Monday 2016

    While there is life there is hope. 一息若存,希望不灭. Go on living even if there is no hope. Knowing is not ...

  2. 关于for循环------swift3.0

    在程序开发当中,for循环使用的频率无疑是最高的.常用的swift循环是递增式遍历.当然各种循环,swift都能办到.但其大多采用关键字形式实现,大部分开发者更喜欢直接使用C式循环代码.在swift3 ...

  3. DOCKER 为新启用的容器配置外网IP

    网卡的配置文件存储在 /etc/sysconfig/network-scripts/ 目录下.每个网卡的详细内容将会以不同的名字存储,比如ifcfg-enp0s3. 让我们看下ifcfg-enp0s3 ...

  4. Java面试常见知识点总结(三)

    21.volatile关键字: 一旦一个共享变量(类的成员变量.类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:   (1) 保证了不同线程对这个变量进行操作时的可见性,即一个线程 ...

  5. 【Java EE 学习 77 下】【数据采集系统第九天】【使用spring实现答案水平分库】【未解决问题:分库查询问题】

    之前说过,如果一个数据库中要存储的数据量整体比较小,但是其中一个表存储的数据比较多,比如日志表,这时候就要考虑分表存储了:但是如果一个数据库整体存储的容量就比较大,该怎么办呢?这时候就需要考虑分库了, ...

  6. css3选择器

    原网站 cnblogs.com/tianshang/p/5982513.html通配符选择器 通配选择器的作用就是对页面上所有的元素都生效, 页面上的所有标签都会展示出通配符选择器设定的样式. 这样的 ...

  7. EditText取消自动调用键盘事件(方法之一)

    直接上代码,这只是其中一种方法: 重点在于是在该EditText的父空间中设置 <LinearLayout android:layout_width="match_parent&quo ...

  8. Shell_1 简介

    1 Shell 变量 只读变量 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变. #!/bin/bash -x varName="AAA" echo ...

  9. 我的Python学习之路 Python的输入输出与基本数据类型

    *** python中的变量不需要事先声明再使用,而可以直接来一个变量名,后面一个赋值,接着一个数据值,如 hw = "hello python",相当于Python能智能的根据你 ...

  10. 大家都在用PDA条码扫描枪管理企业仓库 PDA无线数据采集程序

    PDA数据采集器又称之为手持终端,这些都是用于扫描货物条码统计数据用的,PDA扫描枪有效提高企业仓库管理,在仓库管理中引入条码技术,对仓库的到货检验.入库.出库.调拨.移库移位.库存盘点等各个作业环节 ...