python 语言的好处,对变量不用事先定义,随用随定义,也不用特意用分号做语句末端的分隔,大部分用换行和缩进来规范代码的编写,自己识别,编译工具也非常友好(如:Pycharm)。但从内存使用的出发角度来说,它会在编译器中自动做判断,这就是它速度慢的原因。
下面举例在C语言中和python语言中的定义:
C: Python:
int a = 2; a = 2 #只给 a 赋值 2,但编译器不知道a的数据类型
float b = 2.1; #它会在内存中一直判断a的数据类型,最终判断为int型
/* 简单明了,直接内存分配*/
1.1 数字整型 :int
用于定义整数的关键字,如:2,3,5
1.2 浮点型: float , double
用于定义小数的关键字,但 float 与 double精度不同。
1.3 精度 :
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位。同理,double的精度为15~16位。
2.1 String 类型,在python中简写成 str 。用于定义字符串的关键字。用单引号和双引号引起来。
定义方式: a = “Hello_world!” 或 a = ‘Hello_world’
但如果我们要输入 I’m fine 该怎么办呢? 这里有两种方法:
(1)用双引号在外边引起来,但必须是成双成对出现:
print(" I’m fine ")
(2)用转义符 ’ ’ 来转义字符实现输出:
print(’ I’m fine ')
2.2 字符串的转换,如想将整型数字和字符串连接起来,可以有两种方法来操作:
第一种方法:用 ‘ + ’连接,并将数字类型前用str()将其转换成字符串类型,否则会报错:数据类型不合法
b = 163
c = “cm”
print( str(b)+c ) ## 163cm
第二种方法:用 字符内部函数 join 来实现字符串的连接
d = “小明”
e = “is handsome”
print(d.join(e)) ##小明is handsome
2.3 字符串的内置方法在后续更新中将会全部一 一讲解。
虽然整型、浮点型和数字类型有无数种可能的值,但 '布尔’数据类型只有两种值:True和False。Boolean的首字母要大写。
print(7>6) ##True
print(1==3) ##False
同样也可以用于其他类型的Boolean操作。
4.1 列表是什么?
"列表"是一个值,它包含多个字构成的序列。术语“列表值”指的是列表本身,而不是指列表内的那些值。列表看起来像这样:[‘cat’ , ‘dog’ , ‘bat’]。列表用左方括号开始,右方括号结束,即[ ]。列表中的值也成为“表项”。表项之间用逗号分隔开。
定义方法: 变量名 = [ 表项 ] 如: animals = [‘cat’ , ‘dog’ , ‘bat’]
4.2 查列表内容
4.2.1 用下标取得列表中的单个值
animals | cat | dog | bat |
---|---|---|---|
索引值 | 0 | 1 | 2 |
animals[0] = cat
animals[1] = dog
animals[2] = bat
切记,下标只能是整数且从0开始,不能是浮点数。如果使用的下标超出了列表中值的个数,Python将给出IndexError出错信息。
4.2.2 用切片遍历列表
a = [ '1', 'aa', 'tt', 'zhw' ,'yyh']
切片有三种方式:
(1)[x:y] : 从 x 到 y-1 制作为切片
如:print(a[1:3]) ## [ 'aa' , 'tt' ]
(2)[ : ] :切取全部元素
(3)[ x : y : n ] :从 x 到 y-1 ,每 n 个取一个制作切片
如:print([ 0 : 5 : 2]) ##[ '1' , 'tt' , 'yyh']
4.2.3 倒序切片a = [ '1', 'aa', 'tt' ]
对于 list,Python支持 list[-1]取倒数第一个元素,它同样也支持倒数切片。
(1)a[ -2: ]
(2)a[ : -2]
(3)a[ -4 : -1 : 2]
这里三种倒序切片方式同4.2.2 ,大家自行思考。也欢迎在评论区探讨答案。
4.3 对列表操作:增加,删除,修改,引用,排序的内置方法及操作。
a = [ '1', 'aa', 'tt' ] 创建一个列表 a ,每次操作默认用此处的列表 a,除个别新建列表。
这里提到的index为下标值
4.3.1 增加
(1)a.append() ##在末尾追加
如:a.append('zz')
print(a) ## [ '1', 'aa', 'tt' ,'zz']
(2)a.insert(index,'内容') ##插入下标位置 ,用于准确位置插入内容
如:a.insert(1,'zz')
print(a) ##[ '1', 'zz','aa', 'tt' ]
(3)a.extend() ##扩展,将扩展的字符串的每个单位拆分成单个字符追加到列表尾部
如:a.extend('zz')
print(a) ## [ '1', 'aa', 'tt' ,'z', 'z']
4.3.2 删除
(1)remove('内容')
(2)pop(index) ##抛出的值可以使用
pop出去的值可以传参给一个变量使用
如:reuse = a.pop[1]
print(reuse) ## aa
我们可以再打印一下原来的a,会发现抛出了 ‘aa’。
(3)del a, del a[index]
del a 是直接将a删除,如果我们再打印则会报错:name 'a' is not defined 。
del a[index] 可以准确快速删除指定位置的表项。
(4)a.clear() ##清空列表
此操作会清空列表 a 的表项,但会保留列表,如果再打印列表 a ,将会打印出一个空列表。
4.3.3 修改
(1)a[index] = '新的值'
准确快速地修改指定位置的表项。
(2)a[start:end] = [a,b,c]
从下标为start的到end-1下标的内容修改,有几个元素填几个内容。此处举例为3个,a,b,c。
4.3.4 引用
a = ['dog' , 'cat' , 5]
b = a
print(a) ## ['dog' , 'cat' , 5]
当你将列表赋给一个变量时,实际上是将列表的“引用”赋给了该变量。引用是一个值,指向某些数据。列表引用时指向一个列表的值。
4.3.5 排序
sort() #从小到大排序 或按ASCII表
reverse() #将列表里的元素倒过来
5.1 元组(Tuple)与列表十分相似,但有一个特别明显的区别在于,元组一旦初始化就不可以修改。列表是“可变的”数据类型,元组是“不可变的”数据类型,它就像定义一个字符串一样,一旦定义出来就不能被更改。
5.2 元组的定义
变量名 = ( 元组内容)
如:vagetables = ( 'tomoto', 'potato','mushroom' )
由于只能查看调用元组内容,方法与列表一样。
5.3 用 list() 和 tuple() 函数来转换类型
函数 list() 和 tuple() 将返回传递给它们的值的列表和元组版本。
tuple ( [ 'dog', 'cat', 5 ] ) ----->('dog' , 'cat' , 5)
list [ ( 'dog' , 'cat' , 5 ) ] ----->['dog' , 'cat' , 5]
6.1 字典(dictionary)是python中唯一的映射类型,采用键值对 (key-value) 的形式存储数据。python 对 key 进行哈希函数运算,根据计算的结果决定 value 的存储地址。所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。每个键和它的值之间用冒号( : )隔开,项之间用逗号( , )隔开,整个字典由一对大括号括起来。字典中键是唯一的,而值并不唯一。
6.2 字典的创建和使用
6.2.1 直接创建和转化创建
(1) 直接创建: dic = {'name' : 'zhw', 'age':'20', 'sex' : 'male', 'as' : True, }
注意:大家在直接创建字典时,要有在末尾加上逗号的习惯,这样如果需要添加新的键值对时方便,涉及后面做全栈用Django框架时对添加app有良好的编程习惯。
(2)用dict()函数转化创建
items = [ ('name', 'zhw'), ('age', 20)]
d = dict(items)
print(d) ## {'name' : 'zhw' , 'age' : 20}
6.3 对字典操作,查、增、删、更新。
我们创建一个字典 dic = {'name' : 'zhw', 'age':'20', 'sex' : 'male', 'as' : True, }
(1)查
i. 直接打印查询
print(dic('name'))
ii. 通过内置get() 方法返回键对应的值,有则返回键对应的值,无则返回 None. 也可指定返回内容
print(dic.get('zz')) ------>None
print(dic.get('zz','Uknown')) ------>Known
(2)增加新的键值对或者修改
i. dic[' hobby'] = 'music' #若键存在则修改,不存在则添加
ii. setdefault() 方法 #若键存在则不修改,若键不存在则增加新的键值对
dic.setfault('tall', 173)
iii. update() 更新方式 ,如果键存在则修改,若键不存在则增加新的键值对
dic1 = {'name':'zhw','age':'20','sex':'male','as':True,}
dic2 = {'hobby':123,'heiht':187}
dic1.update(dic2)
print(dic1) ##结果如下 {'name':'zhw','age':'20','sex':'male','as':True,'hobby':'soccer','heiht':187}
(3)删
dic3 = {'name':'zhw','age':'20','sex':'male',}
i. del dic3['age'] ##准确的删除某个键,键一删除,值也相应被删除
del dic3 ##删除整个字典
ii. clear( ) ##清空整个字典,但会保留字典为空
ii. pop( ) ##通过键的查找抛出,也可传参给变量,类似列表
iii. popitem( ) ##随机删除某组键值对,并以元组方式返回值
a = dic3.popitem( )
print( a )
6.4 对字典的遍历
三种字典方法:keys() , values() , items()方法
for k in dic.keys():
print( k ) ## keys( )遍历的是键
for v in dic.values():
print( v ) ## values() 遍历的是值
for i in dic.items():
print( i ) ## items() 遍历的是键-值对,以元组的形式输出
(1)高效遍历字典
for i in dic:
print( i , dic[ i ] )
这里 i 做循环数,但在dic [ i] 里面做下标,这样可以准确快速的定位到对应的键值对,比传统的遍历更节省时间。
(2)传统遍历字典
for i,v in dic6.items():
print(i,v)
这里遍历方法较传统,速度较慢。
7.1 集合(set)是一个无序的不重复元素序列,元素必须是可哈希的。集合可以使用大括号 { } 或者set() 函数创建,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典的。
7.2 创建集合:
para = {val0, val1, val2,...} 或者 set(val)
7.3 集合的显著去重功能
s = set('alice like')
print(s) ##{'c', 'i', 'l', 'a', 'e', 'k', ' '}
7.4 集合的增加、删除、清空
s = [2,33,44,'zhw' ]
s1 = set( s )
(1)增加
s1.add( x ) #将元素x添加到集合s1中,如果元素已存在,则不进行任何操作
s1.update( x ) # update方法可以添加元素,且参数可以是列表,元组,字典等。
如: s1.update( [ 1,5 ] )
(2)删除
s1.remove(x) #将元素x从集合s1移除,如果元素不存在,则会报错
s1.discard(x) #如果元素不存在,不会放生错误
s1.pop() #设置随机删除集合中的一个元素
(3)清空
s1.clear() #清空集合中的元素,保留为空集合
7.5 集合类型操作符
7.5.1 in ,not in
print(a in b) | print(a not in b)
判断a包含于b 判断a不包含于b (这里a,b都为集合)
7.5.2 等价与不等价(==,!=)
print(set('alex')==set('alexxxx'))
7.5.3 超集与子集
print(set('alex')b a包含b内的所有元素且元素比b多
print(a.issubset(b)) #子集 a