(一)基本知识
首先我们需要知道,在python中数据类型大体可以分为两类
1.基本数据类型:数字和字符串
2.复合数据类型:列表,元组,字典,集合
(二)基本数据类型
2—1 数字类型
(1)数字类型具体可以分为4种!
- 整型(int)
- 浮点型(float)
- 复数类型(complex)
- 布尔类型(bool)
tips:Python中使用type()
函数可以查看变量的类型,用法如下:
python和C语言不同的一个点就在于,puthon中的变量是不需要类型定义的,其变量是通过赋值来确定类型!
(2)四种类型的具体解释,以及常见的运算符
1、整型(int):
首先需要明确在python种整型是不分 long,short 等的,整型就是int!!
- 整型的表示方法:
- 二进制:Ob 或者 OB 开头,例如:ob1010
- 八进制:Oo 或者 OO 开头,例如:Oo72
- 十六进制:Ox 或者 OX 开头,例如:OxA7A
- 十进制:...
类型转换- bin():十进制转换为二进制,输出形式是字符串
- oct():十进制转换为八进制,输出形式是字符串
- hex():十进制转换为十六进制,输出形式是字符串
- int() :接收一个符合整型规范的字符串,并将字符串转换为整型
通过之前详细的C语言的学习,对于内存的概念相信不会太过陌生,而且我们也已经知道,在C语言中,内存分配是时刻需要考虑的点,不同的变量就算是相同的值,也会再一次的开发一块空间,但是在python中这个问题是不需要考虑的,因为python是个动态的语言,拥有自动内存管理的能力,并且多个变量有相同的值,其地址也是相同的!
Python中当多个变量的值相同时,只是多个变量都指向了同一内存,举例如下:
a = 6 b = 6 c = a print(id(a), id(b), id(c))
2、浮点型(float)
首先python中的浮点型是双精度的,也就是C语言中的double类型!
- 浮点型的组成是整数和小数,可以有0;比如:1.2、0.2
- 可以使用科学计数法; 比如3.14可以写为314e-2(也就是314的-2次方,和C语言类似)
- 一般是十进制。
使用round(value)这个内置函数,可以返回浮点型四舍五入的值,且不改变原值
3、复数(complex)
在python中是有复数的概念的,这是很特殊的点
- 表示方法:
- 使用实部加虚部的方法来表示复数,且复数的虚部必须有 i/j
- 使用 complex(a,b) 来表示复数,其中 a 为实数,b 为虚数
- print(a.imag) # .imag可以获取复数的虚部
- print(a.real) # .real可以获取复数的虚部
- print(a.conjugate()) # .conjugate()方法可以获取复数的共轭复数
4、布尔类型(bool)
- 本质:
- 在 python2 中是没有布尔值的,和C语言一样,0 来表示 Flase,1 来表示 True
- 在 python3 中,True 和 Flase 是布尔类型的两个结果,本质仍然还是 1 和 0
- 等于 Flase 的情况如下:
- None、Flase、任何为0的数、空的序列(字符串,元组,列表,字典、类中定义了__bool__ ()的返回值)
- 等于 True的情况(去除Flase以外)
(3)运算符
其实学习过C语言之后,对于python中的运算符应该问题不大!以下为python中常见的一些算法:
基本运算符
- + :用于两个数的求和,也可以用于字符串的连接,这个在后续会细讲
- - :求差值
- * :求乘积,也可以直接作用字符串,列表等
- / :求商,和C语言不同的是,/ 不管两边的操作数是整数还是小数,求出来的就是浮点数
- // :整数除法,这个 // 就和c语言中的 / 很类似,比如 7 // 3 结果就是 2
- % :求余数,也就是 模
- ** :指数:比如 2**3 就是2的三次方
- 一个内置函数 divmod()可以同时返回 商 和 余数 :比如 divmod(13,3) ,即返回 (4,1)
逻辑运算符:
- or :表示 “或” 也就是C语言中的 &&
- and :表示“与”也就是C语言中的 ||
- not:表示 “非” 也就是C语言中的 !
- python中也有逻辑运算符 “短路问题” 具体可以看之前的C语言讲解,此处不再细说
比较运算符
- 和C语言类似,真返回 ‘True’,假返回‘Flase’(C语言中是1和0)
- >, <, >=, <=, ==, !=...
- 位运算符
- & | ^ ~ << >>
- <<:左移,如 3<<2 也就是相当于乘以 2**2(具体原理可以看C语言相关部分)
- >>:右移,相当于除2
同一运算符
- is :比较地址!,也就是判断对象是否一致
- == :比较值
- 提示:在 python 会对整数进行缓存处理,也就是一个整数在内存中的一片空间可以分配给多个变量,所以 如果有 a b 两个变量存放的是同一个值,那么a b的地址是相同的!但是这种情况是有限制的。 在命令行模式中:只有[-5,256]之间的整数才会进行缓存,底层实现为数组; 在文件模式下:所有的数都会进行缓存
成员运算符
- in :判断一个数是否在这个序列中,如:a = 'b' b = 'boy' a is b(True)
- in not :字面意思,也就不在的话返回 True
优先级问题
- ** 的优先级最高
- ~ 次之
- <<,>>小于 * / % 以及 + -
- 位和算术运算符 > 比较运算符 > 赋值运算符 > 逻辑运算符
2—2 字符串
(1)基本知识
1、在python中,是不支持 单字符类型的,就算是单字符也会被认定为字符串
2、字符串是不可以被修改的
3、unicode字符集
python3中,支持unicode,可以表示世界上任何书面上的语言(ASCII码是其子集)
4、两个内置函数:
ord()——可以将字符转成相对应的 unicode码
chr()——将十进制数转成对应的字符
示例:a = ' a'
ord(a) #结果就是97
1、使用 ' '(单引号) 或者 '' '' (双引号)——可以两者一同使用的来添加一些特殊符号
示例:"my name is 'zxh' " #结果为:my name 'is' zxh
2、''' ''' (三引号,可以是三个单的也可以是三个双的)——可以进行块引用,也就是跨行
1、空字符串 :就是引号内部没有字符,python中允许有空的字符串,长度位0
2、内置函数 len() ——作用就是计算字符串的长度(可以在类中对其重写)
(2)字符串操作
1、转义字符
和C语言是大致一样的,但是在python中 当 \ 单独放在某一行的末尾,其意思就是续航,在打印的时候打印在一行
示例:
d = 'acacu\ ach' print(d)
acacu ach
其余的转义字符就和C语言基本一致!
2、拼接/复制/不换行打印/输入字符
1.拼接:首先需要明确的是,字符串拼接的时候必须是同一类型!!(对于整型 + 会计算出值)
- + 示例:'aa' + 'bb' #结果为 'aabb'
- 直接放在一起 示例:'aa''bb' #结果为 'aabb'
2.复制:即直接使用 * 来进行字符串的复制
示例:'aaa'*10 #结果就是字符串变为10个 'aaa'
3.不换行打印:
python中,print函数和C语言printf的一个不同点在于,print其默认尾部有一个换行字符!
不换行方法:
使用 end=' ' 的格式 #末尾打印''中的字符(包括空格)
示例:print('abc',end=' ')
print('de')
结果就是 'abc de'
4.input()输入字符串
示例:name = input() #其作用和C语言中的scanf函数类似,但是不同点在于,使用input()输入的不管是什么都会是str类型()也就是字符串类型
错误写法:
input()虽然可以输入一个数字,但是也是 str类型,但是 b = 10 是一个int 类型,两个不同类型不可以进行运算
3、替换\提取\切片
1.replace()#字符串的替换
问题:是否可以直接修改字符串呢?
先看代码:
a = 'my name is zxh' print(id(a)) a = 'my name id xxx' print(id(a))
1695406139696 1695406567728
(1)我们发现经过修改之后,地址不一样了!所以可以得出结论,字符串是不可以修改的,即使两次的变量名称相同,也只是在内存重新开辟了一块空间!
(2)repalce的作用是将原字符串的某一个字符替代位特定的一个字符,但是也是新建了一个对象
a = 'my name is zxh' print(id(a)) a =a.replace('zxh','xxx') print(a) print(id(a))
2825495554352 my name is xxx 2825495641072
2.[]——索引来提取字符串中的字符
(1)和c语言中的字符数组很类似
(2)索引也就是每一个字符的下标从 0 开始
a = 'my name is zxh' print(a[0])
m
3.切片
(1)基本语法 :字符串[strat:end:step]
start:字符串从哪一个位置开始切片——默认从索引为0的字符开始
end:从哪个位置结束——默认到最后一个字符索引的后一个
step:步长是多少 —— 默认为1
示例:
d = 'abcdefghigk'[:] print(d)
abcdefghigk
上述代码,由于三个都是默认值,所以提取整个字符串
d = 'abcdefghigk'[2:6:1] print(d)
cdef
上述代码,由于start = 2,end = 6,step = 1,所以提取从索引2的字符到索引为5的字符(包头不包尾)
(2)注意:
[::-1] : step为-1 ,说明是从右往左提取,此操作相当于将字符串倒序
3、split()分割/join()合并/查找
(1)split()分隔
示例:
a = 'my name is zxh' b = a.split() print(b)['my', 'name', 'is', 'zxh']
上述代码显露出来的信息就是:
split()就是将字符串以其()内的字符进行分隔,默认为 空白字符 ,()内的字符会被删除;并且分隔后的子字符串存放在列表中
(2)join()合并
作用与split()相反!
示例:
c = ['aa','bb'] d ='*'.join(c) print(d)aa*bb
通过上述代码我们可以明白 join()的作用原理:将多个子字符串可以通过 ‘特定’的字符连接
(3)查找
1、len() ——可以用来求出长度
2、startwith() —— 可以判断字符串是否以()中的字符串开头
a = 'my name is zxh' print(a.startswith('m'))
True
3、endwith() —— 判断结尾
4、find() —— 第一次出现某个字符的位置
5、rfind() —— 最后一次出现某个字符的位置
6、count() —— 某一个字符出现的次数
7、isalnum —— 判断字符串是否全是数字或者字母
...
重点来说一下以下几个函数
(1)strip —— 去除首尾
示例:
a = 'my name is zxh' b = a.strip('m') print(b)
y name is zxh
可以 使用 lstrip() 或者 rstrip() 仅仅去除左边或者右边的字符串
(2)大小写转换的函数
1、capitalized()首字母大写
a = 'my name is Zxh' print(id(a)) #首字母大写 a = a.capitalize() print(a) print(id(a))
1420499331376 My name is zxh 1420499763120
2、title()所有单词的首字母大写
a = 'my name is Zxh' print(id(a)) #每个单词的首字母大写 a = a.title() print(a) print(id(a))
1448522066224 My Name Is Zxh 1448522497968
3、upper()全大写
a = 'my name is Zxh' print(id(a)) #全大写 a = a.upper() print(a) print(id(a))
1365391026480 MY NAME IS ZXH 1365391458224
4、lower()全小写
a = 'my name is Zxh' print(id(a)) #全小写 a = a.lower() print(a) print(id(a))
1472785459504 my name is zxh 1472785546224
5、swapcase()小——大,大——小
a = 'my name is Zxh' print(id(a)) #小——大 大——小 a = a.swapcase() print(a) print(id(a))
2318668179760 MY NAME IS zXH 2318668266480
通过代码我们发现这产生新的对象(id不同)五种操作都会
4、格式排版
(1)center()——中心对齐
a = 'ab' print(a.center(10,'*'))
****ab****
10:只保留10个字符;
* :表示空白的地方使用 * 来补齐
若字符总长度超过了center()中规定的长度,则相当于无作用
(2)ljust——左对齐——同上
(3)rjust——右对齐——同上
(4)format格式化
a = '我的名字是{0},年龄是{1}' #此处的{0}和{1}即对应format中的第一和第二个字符串 b = a.format('zxh',18) print(b)#结果:我的名字是zxh,年龄是18
除此之外:也可以对应变量名称来具体赋值,如下:
a = '我的名字是{name},年龄是{age}' b = a.format(age = 18,name = 'zxh') print(b)结果和上述相同,但是这里不是一一对应的关系,而是具体的名称具体赋值