Python基础学习总结(持续更新)

https://www.cnblogs.com/jin-xin/articles/7459977.html

嗯,学完一天,白天上班,眼睛要瞎了= =

DAY1

1,计算机基础。

CPU:相当于人的大脑,用于计算

内存:储存数据,成本高,断电数据即消失

硬盘:1T,固态硬盘,机械硬盘,储存数据,应该长久保持数据,重要文件

操作系统:下达命令

应用程序:在操作系统上运行

Python基础学习总结(持续更新)

2,python历史。

宏观上:python2 与 python3 区别:

python2 源码不标准,混乱,重复代码太多,

python3 统一 标准,去除重复代码。因为:Python崇尚优美、清晰、简单

3,python的环境。

编译型:一次性将所有程序编译成二进制文件。

缺点:开发效率低,不能跨平台。

优点:运行速度快。

:C,C++等等。

解释型:当程序执行时,一行一行的解释。

优点:开发效率高,可以跨平台。

缺点:运行速度慢。

:python ,php,等等。

4,python的发展。

5,python种类。

Cpython是官方认可的Python解释器,将Python规范语言解释成C语言能识别的字节码,再转换成二进制的机器码交由操作系统处理,这也是课程学习的语言。

Jpython将Python规范语言解释成java语言能识别的字节符,再转换成二进制的机器码交由操作系统处理。

Pypy,一次性全部编译成字节码,运行速度快,开发效率相对低。

其他语言解释器。

运行第一个py文件:

python3x :python 文件路径 回车

python2x :python2 文件路径 回车

python2 python3 区别:python2默认编码方式是ascii码,直接print中文就会报错

解决方式:在文件的首行加:#-*- encoding:utf-8 -*-

python3 默认编码方式utf-8

6,变量。

变量:就是将一些运算的中间结果暂存到内存中,以便后续代码调用。

规范:1,必须由数字,字母,下划线任意组合,且不能数字开头。

2,不能是python中的关键字。

关键字:['and', 'as', 'assert', 'break', 'class', 'continue',

'def', 'del', 'elif', 'else', 'except', 'exec',

'finally', 'for', 'fro', 'global', 'if', 'import',

'in', 'is', 'lambda', 'not', 'or', 'pass', 'print',

'raise', 'return', 'try', 'while', 'with', 'yield']

3,变量命名具有可描述性。官方推荐:age_of_oldboy=17

4,不能是中文。

7,常量。

一直不变的量。     π

全部大写:就是常量BIR_OF_CHINA = 1949

8,注释。

方便自己方便他人理解代码。

单行注释:#

多行注释:'''被注释内容'''  """被注释内容"""

9,用户交互

Input 输入

Python基础学习总结(持续更新)

1,等待输入,

2,将你输入的内容赋值给了前面变量。

3,input出来的数据类型全部是str

10,基础数据类型初始。

数字:int 12,3,45

+
、-、 *、 /、 **次幂

%
取余数

判断数据的类型:type()

字符串转化成数字:int(str)
条件:str必须是数字组成的。

数字转化成字符串:str(int)

字符串:str,python当中凡是用引号引起来的都是字符串。

(1)可相加:字符串的拼接。

Python基础学习总结(持续更新)

(2)要打印内容中有换行符必须用’’’ 引起来

Python基础学习总结(持续更新)

(3)数字和字符串可相乘:str
* int

Python基础学习总结(持续更新)

bool:布尔值。 True
False。And、or、<、>、==

Print(True,type(True))

Print(‘True’,type(‘True’))

11,if。

语法:必须有缩进来判断是否属于一段代码

if 条件:

(tab 键)结果1

if
条件:(嵌套)

(tab
键)结果1.1

Elif 条件:

(tab
键)结果1.2

Elif条件:

(tab 键)结果2

else:

(tab 键)结果3

12,while。

条件后必须加:就是为了提示python,while到冒号之间的这段为条件。

while 条件:

(tab键) 循环体

(tab键)无限循环(条件恒为真)。

终止循环:1,改变条件,使其不成立。

2,break

Continue
结束本次循环,开始下次循环

DAY2

1.pycharm

Ctrl+/ 即为快速注释,run、debug加断点都很方便

2.格式化输出

%为占位符,s为字符串,d为digit数字

想要在格式化输出中表示单纯的百分号,那么就在%前面再加一个%进行转义,即可达到目的

name = input('请输入姓名')
age = int(input('请输入年龄'))
height = input('请输入身高')
rank = input('请输入年级排名百分之几,只需数字即可')
msg = '我叫%s,今年%d,身高%s,年级排名前%s%%' %(name , age , height , rank)
print(msg)#要记得打印才看得到结果

"""格式化输出中包含',那么注释时候用双引号注释
name = input('请输入姓名')
age = input('请输入年龄')
job = input('请输入工作')
hobbie = input('请输入兴趣爱好') msg = '''------------ info of %s -----------
Name  : %s
Age   : %s
Job   : %s
Hobbie: %s
------------- end -----------------''' %(name , name , age , job , hobbie)#按顺序替换
print( msg )
"""

3.while else

当while 循环被break打断,就不会执行else的语句

4.初始编码

电脑的传输还有储存的实际上都是二进制数位

ASCII码最开始是7位,包含128种可能,能满足美国本土的所有编码需要,在最左边预留了一位,全都是0,以便以后拓展,所以一共八位,八位为一个bit==一个字节(byte)

1024BYTE(字节)==  1KB

1024KB == 1MB

1024MB == 1GB

1024GB == 1TB

美国为了解决这个编码全球使用的问题,创建了一个万国码(Unicode)

最开始:

1)     1个字节可以表示所有的英文,特殊字符,数字等等

2)     2个自己,16位表示一个中文,不够,Unicode设计一个中文用四个字节表示,32位, 可是17位就可以满足目前中文的所有需要,那么32位就实在太浪费了,会白白占用很多存储空间。

3)     为了解决这个问题UTF编码浪费,升级版Unicode(UTF-8)一个中文用三个字节表示,24位,有研究表示,21位(2的21次方个)就能包含世界上有史以来的所有符号个数。由此可见,在使用python2版本的时候打印中文会报错,是因为python2默认用ASCII码编码,那么就不包含中文的编码,而加上#-*- encoding:utf-8 -*-将编码方式变成utf-8后就不会报错了。

4)     GBK编码方式是中国人自己创建的,只包含中文和英文的编码,只在国内使用,一个中文用2个字节表示(包含不全,中文9万多字,至少需要17位二进制码表示)

5.运算符

https://www.cnblogs.com/jin-xin/articles/7459977.html

参见python基础一-三-10,基本运算符

在python2.6以前的版本用<>表示不等于,之后的版本都只用!=表示不等于

逻辑运算的优先级顺序:() > not  > and > or

#运算优先级: () > not  > and > or
#  print(3>4 or 4<3 and 1==1)#F
# print(1 < 2 and 3 < 4 or 1>2)#T
# print(2 > 1 and 3 < 4 or 4 > 5 and 2 < 1)#T
# print(1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8)#F
# print(1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6)#F
# print(not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7
< 6)#F,注意前面的not

# x、y均为数字,x or y时,从左至右返回遇到的第一个非零数字;

                x and y时,有一个数为零,全部为0;若全非零,取最小值。
print(1 or 2)#1
print(2 or 1)#2
print(0 and 3)#0
print(3 or 0)#3
print(100 or 0)#100
print(0 or 100)#100
print(1 or 100)#1
print(100 or 1)#100

print(100 and 1)#1

print(2 or 1 < 3)#2

print(1 > 2 and 3 or 4
and 3 < 2)#False

print(2 and 1<3 and 1)#1

6.基础数据类型补充

数值型(int)转换成布尔型(bool):非零数字转换成BOOL
TURE, 零转换成BOOL
FALSE.

Print(bool(数值))

Print(int(TRUE/FALSE))#0/1

DAY3

数据类型详解

https://www.cnblogs.com/jin-xin/articles/7562422.html

什么是数据类型

1)     Int:整数型,1,2,3….用于计算

2)     Bool:布尔型,True,False,用于判断

3)     Str:字符串,存储少量数据,进行操作

4)     List:表单型,存储大量任何数据,查询简单

5)     元祖tuple:只读型列表,存储大量任何数据

6)     Dict:字典,也可以存储大量数据,基本都是关系型数据,一个对象的各种信息集中在其中,查询速度快

7)     集合set:高中数学当中的求交集和并集。

各种数据类型举例:

int 1,2,3用于计算。
bool:True,False,用户判断。
str:存储少量数据,进行操作
 'fjdsal' '二哥''`13243','fdshklj'
 '战三,李四,王二麻子。。。。'
list:储存大量的数据。
     [1,2,3,'泰哥','12353234',[1,2,3]]
元祖:只读。
     (1,2,3,'第三方',)
dict:字典{'name':'云姐''age':16}
        字典{'云姐':[],'二哥':[200,200,200,。。。。。。]}
集合:{1,2,34,'asdf'}

1.     Int

用于计算。

Bit_length将数值转换成最小位数的二进制长度。

2.     Bool

用于判断。1比true的效率更高;非空字符串就是TRUE

3.     Str

用’  ’引号引起来的内容,存储少量数据,用于操作。

1)     索引,取单个元素

字符串内部都是有顺序的,从第0位开始表示第一个字母。

s[取第几位],0表示第一位,-1表示最后一位,-2表示倒数第二位。

定义s = 'ABCDLSESRF'

S1 = s[0]  ————>S1的结果是A,用[]即可索引到具体位数的字符,S1是一个新的字符串

2)     切片,取片段

s[从第几位开始取:取几位(尾):步长],顾头不顾尾,步长默认为1

s[0:] 或s[:]都是取整个字符串s

s[0:0]为空字符串

定义s = 'ABCDLSESRF'

S2 = s[0:4]————>从第一位开始取,取4位,所以S2=’ABCD’

S3 = s[0:5:2] ————>从第一位开始取,在总长度为5的字符串里按步长为2取,返回’ACL’

S4 = s[4::-1] ————>从第5位开始取,在总长度为5的字符串里按步长为-1取(倒着取),返回’LDCBA’

s15 = s[::-1] =s[-1::-1]————>倒着将s取出来,返回’ FRSESLDCBA’

3)     字符串的操作

s = 'alexWUsir'

a)     s.capitalize()  # 首字母大写

s1 = s.capitalize()  # 首字母大写——>Alexwusir

b)     s.upper()# 全大写

s2 = s.upper()# 全大写——>ALEXWUSIR

c)      s.lower()#全小写

s3 = s.lower()#全小写——>alexwusir

d)     s.swapcase()# 大小写翻转

s4 = s.swapcase()# 大小写翻转——>ALEXwuSIR

e)      s.center(20,'~') #居中,填充(不设置值就默认空白)

s5 = s.center(20,'~') #居中,填充(不设置值就默认空白)——>~~~~~alexWUsir~~~~~~

f)       s.expandtabs()#连同/t之前的字符串一共补充到八位

s = 'alexWU\tsir'

s6 = s.expandtabs()#连同/t之前的字符串一共补充到八位,超过八位的补充到十六位——>alexWU  sir(补了两个空格)

g)     s.endswith('ir')#判断字符串以什么结尾

s = 'alexWUsir'

s7 =s.endswith('ir')#判断字符串以什么结尾——>True

h)     s.startswith('e',2,5) #判断字符串以什么开头

s71 = s.startswith('e',2,5) #判断字符串以什么开头,也可以从中间判断,从第零位开始数数位,startswith('e',2,5)就代表判断第三个字符到第5个字符组成的这个片段是否以e为开头——> True

i)       s.find('WU') # find

s8 = s.find('WU') # find 通过找整体返回该整体第一个元素的索引位置,返回值类型为int,找不到返回-1——>4

j)       s.index('WU') # index

s81 = s.index('WU') # index通过找整体返回该整体第一个元素的索引位置,返回值类型为int,找不到报错 ——>4

k)      s.replace('old','new'<,替换次数,默认全部替换>)#替换

s11 = s.replace('old','new'<,替换次数,默认全部替换>)#替换

l)       len(s.strip())#length函数对列表类型也直接通用,求长度

s12 = len(s.strip())#length函数对列表类型也直接通用,求长度,一般来说要加strip未来避免有空格——>9

m)    name.isalnum()、name.isalpha()、name.isdigit()#判断字符串组成类型,bool型变量。

name = ‘oskdnmocwu128734’

print(name.isalnum()) #字符串由字母或数字组成

print(name.isalpha()) #字符串只由字母组成

print(name.isdigit()) #字符串只由数字组成

n)     s.title()# 每个隔开(特殊字符或者数字)的单词首字母大写,其余小写

s = 'aLex*eGon wusir'

s5 = s.title()

print(s5) ——>Alex*Egon Wusir

s = 'fade,crazy*w4rri0r_songsong node_3'

s6 = s.title()

print(s6) ——>Fade,Crazy*W4Rri0R_Songsong Node_3

o)     s.strip(' %*') # strip默认删除前后空格或特殊字符 rstrip只删除右边的空格或特殊字符 lstrip只删除左边的空格或特殊字符

s = '   *a%lexWUsi* r%'

s91 = s.strip(' %*') ——>a%lexWUsi* r

username = input('请输入名字:').strip()

if username =='春哥':

print('恭喜春哥发财')

p)     s.count('al') #count计算目标字符串中有多少标的字符的个数,可以是一个子字符串,列表中也通用

s = 'alexaa wusirl'

s10 = s.count('al') ——>1

q)     s.split(';') # split   str ---->list;默认按空格分列,字符串转换成列表就用split,列表转换成字符串用join,

s = ';alex;wusir;taibai'

s11 = s.split(';') ——>['', 'alex', 'wusir', 'taibai']

4)     高级格式化输出

#format的三种玩法 格式化输出

I.          res='{} {} {}'.format('egon',18,'male')#直接用{}作为占位符,最后按顺序填充

II.          res='{1} {0} {1}'.format('egon',18,'male') #占位符{}和索引号配合,最后按索引位置填充

III.          res='{name} {age} {sex}'.format(sex='male',name='egon',age=18)# 占位符{}和变量名配合,最后按变量赋值填充

s = '我叫{},今年{},爱好{},再说一下我叫{}'.format('太白',36,'girl','太白')

name = input('请输入名字:')

s = '我叫{0},今年{1},爱好{2},再说一下我叫{0}'.format(name,36,'girl')

name = input('请输入名字:')

s = '我叫{name},今年{age},爱好{hobby},再说一下我叫{name}'.format(age=18,name=name,hobby='girl')

5)     for循环(有限循环)

s = 'fhdsklfds'

for i(可迭代对象) in s:

(tab)print(i)——>依次将s中的字符赋值给i并循环打印出,直到最后一个字符结束

s = 'fdsa苍井空fdsalk'

if '苍井空' in s:

(tab)print('您的评论有敏感词...')

DAY4

1.     列表list

li = ['alex',[1,2,3],'wusir','egon','女神','taibai']

1)     增

a)     Append在列表最后新增一个元素

li.append(‘Elsa’)——>#在li列表最后新增了一个元素’Elsa’,类型为str

li.append(1) )——>#在li列表最后新增了一个元素1,类型为int

b)     Insert在列表之中插入

li.insert(4,'lxy')在列表中的第四个元素后面插入’lxy’,’lxy’的索引号为li[4]

c)      Extend按可迭代对象的最小元素为列表加入多列

Int为不可迭代对象(can’t  iteration)

li.extend('天伦') ——>在li列表中新增了最后两个元素’天’,’伦’

2)     删

a)     pop(索引号),按索引号删除,有返回值

li.pop(1)  # 返回值为被删掉的列表中第二个元素本身,也是增删改操作中唯一有返回值的。

li.pop()  # 如果索引号为空,默认删除最后一个

b)     remove(元素),按元素删除

li.remove('taibai')

c)      clear()清空列表

li.clear()

d)     del命令,删除列表本身

del li

del li[0:2]  # 切片去删除,删掉前两个

3)     改

a)     单元素修改,直接按索引位置重新赋值

li[0] = '可爱'#将列表中第一个元素新赋值为’可爱’

b)     多元素切片修改

其实就是先片段删除再在原位置上按指示增加,增加的个数并不受删除个数的限制。

li[0:3] = 'abcd'——>['a', 'b', 'c', 'd', '女神', 'taibai']#删除原来的前三个元素后,在原位置按字符串迭代增加

li[0:3] = [1,2,3,'春哥','咸鱼哥'] ——>[1, 2, 3, '春哥', '咸鱼哥', '女神', 'taibai']#若给定列表,则按顺序将新列表的所有元素完整的加入进li列表,但这并不是嵌套,只是单纯的将元素插入了进来。

4)     查

a)     直接按索引号查

Print(li[0])

b)     用for循环打印每个元素

For i in li:#li必须是可迭代对象。

Print(i)

c)      切片查询(返回值为列表)

Print(li[0:3])

5)     公共方法

a)     长度len

Column_Num = len(li)——>返回li列表中的元素个数

b)     次数count

Element_Num = li.count(‘taibai’)——>返回’taibai’这个元素在列表中出现的次数

c)      Index

列表中查询索引号只能用index,查不到就报错。eg: li.index('wusir')——>返回2

d)     排序sort(对纯数字列表或者纯字母列表)

正向排序:li.sort()

反向排序:li.sort(reverse=True)

如果列表中都是字符串元素,也可以进行排序,排序按照字符串元素的第一个字母的ASCII码的大小进行排序。

e)      列表反转reverse,无返回值:

li.reverse()——>直接将li整个列表反转顺序,无返回值

6)     列表自身嵌套着列表的增删改查操作

li = ['taibai','武藤兰','苑昊',['alex','egon',89],23]

print(li[1][1])#找出武藤兰的腾

li[0] = li[0].capitalize()#将'taibai'首字母改成大写

li[2] = '苑日天'#把苑昊改成苑日天

li[2] = li[2].replace('昊','ritian')#把苑昊改成苑ritian

li[3][0] = li[3][0].upper()#将嵌套列表中的alex改为大写

7)     典型题

#算一串字符串中包含多少整数

s = input("请输入一串字符和数字的混合")

count = 0

for i in s:

if i.isdigit():

count += 1

print(count)

# 算一串字符串中包含多少整数(升级版:几个数相邻算作一个整数)

info = input('>>>').strip()

for i in info:

if i.isalpha():

info = info.replace(i," ")

l = info.split()#通过split默认按空格分列,将info分成以整数组成的列表。

print(len(l))#再求出列表的元素个数即可解决

2.     元祖tuple——只读列表(子元素不能改,孙元素可能可以改)

tu = (1,2,3,'alex',[2,3,4,'taibai'],'egon')

1)     查询

同列表,三种方式

a)      print(tu[3])

b)     print(tu[0:4])

c)      for i in tu:

print(i)

2)     修改孙元素(列表中的删改操作都可用)

tu[4][3]=tu[4][3].upper()——>(1, 2, 3, 'alex', [2, 3, 4, 'TAIBAI'], 'egon')

tu[4].append('sb')——>(1, 2, 3, 'alex', [2, 3, 4, 'TAIBAI', 'sb'], 'egon')

3.     Join(列表转换成字符串用join,字符串转换成列表用split)

在可迭代对象的每个元素之间加指定字符,返回一个字符串(列表转换成字符串用join,字符串转换成列表用split)。

s = 'alex'

s1 = '~'.join(s)——>a~l~e~x

li = ['taibai','alex','wusir','egon','女神',]

s = '-'.join(li)——> taibai-alex-wusir-egon-女神

4.     Range(起始数(默认为0),终止数(依旧顾头不顾尾),步长)

#range  [1,2,3,4,5,6,.......100........]其实就是一个等差数列,公差为1或-1,设定步长(更改公差)就可以间隔输出数字

for i in range(3,10):

print(i)

3

4

5

6

7

8

9

for i in range(10):

print(i)

0

1

2

3

4

5

6

7

8

9

for i in range(0,10,3):

print(i)

0

3

6

9

for i in range(10,0,-2):

print(i)

10

8

6

4

2

for i in range(10,-1,-2):

print(i)

10

8

6

4

2

0

for i in range(0,10,-1):

print(i)

输出为空,什么都没有。

for i in range(10,-1):

print(i)

输出为空,什么都没有。

for i in range(10,-2,-1):

print(i)

10

9

8

7

6

5

4

3

2

1

0

-1

#将列表中的孙元素也打印出来

li = [1, 2, 3, 5, 'alex',[2,3,4,5,'taibai'], ('a', 'b', 'c', 'd'), 'afds']

自写方法一:

for x in li:

if type(x) != int and type(x) != str:

for y in x:

print(y)

else:

print(x)

方法二:用range搭配length就可以表示出索引长度,因为range是从0开始的。

for i in range(len(li)):

if type(li[i]) != int and type(li[i]) != str:

for j in li[i]:

print(j)

else:print(li[i])

DAY5

字典 dict

Python中的唯一的映射数据类型,一个键(key,不可变数据类型,可哈希,只有元祖、str、int、bool四种选择)对应一个值(value,任意数据类型)。

字典的优点:

所有的键对应一个哈希值,字典中有一个哈希表,查找时用二分查找法,就不需要像列表中查找需要做循环,效率慢;存储大量的关系型数据。

字典的特点:

在Python3.5及其以前字典都是无序的。

数据类型划分

a)     可变数据类型

List、dict、set(集合本身是可变数据类型,但集合之中的元素是不可变的)。 又名不可哈希

b)     不可变数据类型(自身不可变)

元祖、bool、int、str。  又名可哈西希

1)     增

dic1 = {'age': 18, 'name': 'jin', 'sex': 'male',}

dic1['high'] = 185  #没有键对应,添加新键

dic1['age'] = 16  #如果有键对应,则值覆盖

dic1.setdefault('abc',xxx)  # 有键对应,不做任何改变,没有才添加,如果没有设置值,默认为None。

dic1.setdefault('weight')  ——> {'weight': None, 'age': 18, 'sex': 'male', 'name': 'jin'}

dic1.setdefault('name','二哥')——>{ 'age': 18, 'sex': 'male', 'name': 'jin'}

2)     删

a)     Pop按键删除(最推荐)

dic1.pop('age') # 有返回值,按字典中的键去删除

dic1.pop('二哥','没有此键')#可设置返回值。当要删除字典里一个自己不确定有没有的键时,直接删如果没有就会报错,这个时候在后面加上一个参数(如’没有此键’)作为做不到此键时的默认返回值。

b)     Popitem随机删除

dic1.popitem()  # 随机删除键 有返回值(元祖,键及其对应的值) 元组里面是删除的键值

c)      clear清空字典

dic1.clear()

d)     删除字典(按键删除时有缺陷)

Del dic1

del dic1['name']#也可以只删除键,没有此键时会报错

3)     改

a)     直接根据原值索引号覆盖

dic1['age'] = 16  #如果有键对应,则值覆盖

b)     update(覆盖已有的键,增加没有的键)

dic = {"name":"jin","age":18,"sex":"male"}

dic2 = {"name":"alex","weight":75}

dic2.update(dic)  #dic2中和dic相同的键被更新成和dic相同,dic中有而dic2中没有的键被添加进dic2.

4)     查

a)     dic.keys()、dic.values()、dic.items()

print(dic1.keys(),type(dic1.keys()))——>dict_keys(['sex', 'age', 'name']) <class 'dict_keys'># dict_keys可以看做列表,列表的组成元素为字典的键。

print(dic1.values(),type(dic1.values()))——>dict_values(['male', 18, 'jin']) <class 'dict_values'># dict_values可以看做列表,列表的组成元素为字典的值。

print(dic1.items(),type(dic1.items()))——>dict_items([('sex', 'male'), ('age', 18), ('name', 'jin')]) <class 'dict_items'># dict_items可以看做列表,但其是由键值对构成一个元祖,再以元祖为元素构成列表。

for i in dic1: #查询字典类型不加任何函数操作,默认直接返回字典键

print(i)

输出结果:

age

name

sex

for i in dic1.items():

print(i)

输出结果:

('name', 'jin')

('age', 18)

('sex', 'male')#思考:键值对虽然打印出来了,但是很不美观,是元祖的形式,如何改进?

引申:多变量一行代码赋值

a,b = [1,2],[2,3]#a = [1,2]  b = [2,3]

a,b = (1,2)#a = 1  b = 2

a,b = [1,2,3]#报错,左右两边必须参数个数一样才可赋值。

面试题

#一行代码交换a,b的值

a = 1

b = 2

a,b = b,a

print(a,b)

#变量与值得对应关系在内存中专门有一块空间保存,调用print函数时,便会到内存中去查找a变量所对应的值的内存地址是多少,再相应的读取出该内存地址所代表的空间存储的值。a,b = b,a相当于就是交换了a与b在内存空间当中的与值对应的内存地址。

因为可以多变量同时赋值,那么同样可以在for循环中应用,解决键值对以元祖方式打印不美观的问题:

for k,v in dic1.items():

print(k,’:’,v)

输出结果:

age : 18

name : jin

sex : male

b)     直接根据键来查(有缺陷)

v1 = dic1['name']

print(v1)——>返回这个键对应的值

v2 = dic1['name1']  # 报错

print(v2)——>直接插查不到键’name1’,报错,

c)      dic.get()(最推荐)

v2 = dic.get(’name1’,’没有这个键’)#可以设置查找键时的默认返回值(不设置就是None),避免报错的情况。

5)     字典自身嵌套着字典、列表的增删改查操作

dic = {

'name':['alex','wusir','taibai'],

'py9':{

'time':'1213',

'learn_money':19800,

'addr':'CBD'

},

'age':21

}

# 将键age重新赋值

dic['age'] = 56

# 在字典的name列表中新增元素ritian

dic['name'].append('ritian')

# 将字典的name列表中第二个元素全部改为大写

dic['name'][1] = dic['name'][1].upper()

#在字典中的字典py9里面新增一个键female : 6

dic['py9']['female'] = 6

print(dic)

DAY6

小知识点总结

1.     编码

ascii

英:00000010  8位 一个字节

unicode

英: 00000000 00000001 00000010 00000100 32位  四个字节

中:00000000 00000001 00000010 00000110 32位  四个字节

utf-8

英 :  00100000 8位 一个字节

欧:00000001 00000010 16位二个字节

中 :  00000001 00000010 00000110 24位 三个字节

gbk

英:00000110  8位 一个字节

中:00000010 00000110 16位 两个字节

注意

1,各个编码之间的二进制,是不能互相识别的,会产生乱码。

2,文件的储存,传输,不能是unicode(只能是utf-8 utf-16 gbk,gb2312,asciid等,因为Unicode实在太大了,浪费许多存储空间)

python3中str转换成bytes后再存储:

python3中的str 在内存中是用unicode编码。——>不能直接储存和传输,因为Unicode实在太大了,浪费许多存储空间,编码方式要转换成Utf-8或者GBK,表现形式就是str转换成了bytes。

bytes类型——也是一个数据类型和STR很像,区别就在于编码方式,

它直接用UTF-8/-16或者GBK编码,所以存储或者传输一个字符串时,先将其转化为bytes类型再进行存储或传输。

对于英文:

str  :表现形式:s = 'alex'

编码方式: 010101010  unicode

bytes :表现形式:s = b'alex'

编码方式: 000101010  utf-8 gbk…..

对于中文:

str  :表现形式:s = '中国'

编码方式: 010101010  unicode

bytes :表现形式:s = b'x\e91\e91\e01\e21\e31\e32'#这就是我们不直接使用bytes的原因,因为对于中文来说,它的表现形式在bytes中是十六进制,这对于人而言是很难被看懂的。

编码方式: 000101010  utf-8 gbk。。。。#上面的例子就是utf-8,应为两个中文对应了六个字节,说明是用三个字节表示一个中文,符合UTF-8对中文的编码特征,如果两个中文只对应了四个字节,那么编码方式就是GBK。

#str转成bytes,因为str要转成bytes后才能存储和传输
s1 = 'alex'
# encode 编码,如何将str --> bytes, (可以设置编码方式),表现形式是将str转换成了bytes,实际内部是将Unicode转换成了utf-8或者gbk或者GB2312
s11 = s1.encode('utf-8')
print(s11)# b'alex'
s11 = s1.encode('gbk')
print(s11) )# b'alex'
s11 = s1.encode('gb2312')
print(s11) )# b'alex'
s2 = '中国'
s22 = s2.encode('utf-8')
print(s22)# b'\xe4\xb8\xad\xe5\x9b\xbd'
s22 = s2.encode('gbk')
print(s22)# b'\xd6\xd0\xb9\xfa'
s22 = s2.encode('gb2312')
print(s22)# b'\xd6\xd0\xb9\xfa'
 
 
   
str与bytes在python3中的关系示意图

2.    
python2与python3的一些区别

python2中

print()  print
'abc'#python2 print可以不加括号

range()

#xrange() 生成器

raw_input() #python2中的input的函数

python3中

print('abc')#必须加括号

range()

input()

上一篇:在Visual Studio 2012中使用GSL


下一篇:【bzoj3884】 上帝与集合的正确用法