数据类型
数据类型指的就是变量的值的类型,也就是可以为变量赋哪些值;
-在python中数值分为三种:整数,浮点数(小数),复数;
-在python中所有的整数都是int类型,整数的大小没有限制,可以是一个无限大的整数;例子:100 ** 10表示100的10次幂
-如果数字长度过大,可以使用下划线作为分隔符;例:123—456—789;
-十进制数字不可以0开头;
-其他进制的整数,只要是数字打印时就一定是以十进制的形式显示(输出)的;
-二进制以0b开头;例:c=0b10 (二进制的10,十进制等于2),print(c)显示的结果为2)
-八进制以0o开头;
-十六进制以0x开头;
-也可以通过运算符来对数字进行运算,可以保证整数运算的精确;
c=100
c+3
print(c)
最后的结果是100,而不是103,因为c+3是表达式,对程序无影响;若c=c+3,则最后输出的结果为103
---浮点数(小数),在python中所有的小数都是float类型;
-对浮点数进行运算时,可能会得到一个不精确的结果;
##字符串
-字符串用来表示一段文本信息,字符串是程序中使用最多的数据类型;
-在python中字符串必须要用引号(单引号,双引号都可)引起来,但是不要混着用。
比如s='hello"就是错的,会报错:SyntaxError: EOL while scanning string literal
-相同的引号间(单引号与单引号之间,双引号与双引号之间)不可以嵌套,但不同的引号间可以嵌套;
比如s=“子曰:“学而时习之””就是错的,s=‘子曰:“学而时习之”’是对的
-----长字符串
-单引号和双引号不能跨行使用;
比如:s='锄禾日当午,
汗滴禾下土.'
会报错,如果在第一行末尾加上\就不会报错,但他的格式不会保存,最后的输出为 锄禾日当午,汗滴禾下土.
-使用三重引号(单引号,双引号都可)来表示一个长字符串:''',"""
-三重引号可以换行,并会保留字符串中的格式;
比如:s='''锄禾日当午,
汗滴禾下土.'''
最后的输出为 锄禾日当午,
汗滴禾下土。
-----转义字符
-可以使用\作为转义字符,通过转义字符,可以在字符串中使用一些特殊的内容
比如:s="子曰:\"学而时习之!\""
输出为 子曰:"学而时习之!"
\t:表示制表符;
\n:表示换行符;
\\:表示反斜杠\;
\':表示单引号;
\":表示双引号;
\uxxxx(x表示编码):表示Unicode编码;
比如:s='\u0040',打印出@
##格式化字符串
-字符串之间可以进行加法运算;
-如果将两个(多个)字符串进行相加,会自动将两个(多个)字符串拼接为一个;
例: a='abc'+'哈哈哈'+'de'
print(a)
最后输出为 abc哈哈哈de
如果想输出 m=abc哈哈哈de,则可以print("m="+a)
"m="为一个字符串,将它和a连起来
-上述那种写法在python中并不常用
-字符串只能和字符串相加,不可以和其他的类型进行加法运算
例:a=123
print("m="+a)
因为"m="是字符串,a是int类型,所以会报错:TypeError:must be str,not int
如果想输出m=abc哈哈哈de
- -解法一:拼串的方法
a='abc'+'哈哈哈'+'de'
print("m="+a)
如果想输出m=123 :
- -解法二:利用print函数可以传两个参数的特性
print("m=",a) [此时a只是个参数,并没有与字符串进行拼接]
最后的输出为:m= 123(注意m=与123间有个空格)
- -解法三:print('m=%s'%a)
- ----解法四:--格式化字符串:可以通过在字符串前添加f(大写小写都可)来创建一个格式化字符串;
--在格式化字符串中可以直接嵌入变量(嵌入变量时需用到{},比如{a}就
表示a是一个变量,注意使用a时他一定要被赋过值,不然会报错)
例:a=123
b='你好'
c=f'hello {a} {b}'
print(c)
print(f'a={a}')
最后的输出为:hello 123 你好
a=123
----在创建字符串时,可以在字符串中指定占位符
-%s 在字符串中表示任意字符;在对占位符进行填充时需用到%(当用到多个占位符时,%后面需加上(),()里面的参数用逗号隔开,按顺序填充)
例1:b='hello%s'%'中国' (用中国去填充占位符%s)
print(b)
最后的输出为:hello中国
例2:b='hello%s 你好 %s'%('中国','China')
print(b)
最后的输出为:hello中国 你好 China
-%3s表示填充的字符至少为三个,不够则在左边补空格
例:m='hello%3s'%'ab'
n='hello%3s'%abcdef
print(m)
print(n)
最后输出为:hello ab
helloabcdef
-%3.5s表示填充的字符最少3个,最多5个(不够左端补空格,多了则舍去)
例:m='hello %3.5s'%'abcdefgh'
print(m)
最后输出为:hello abcde
-%s可以用整数或小数来填充(其实后面填充的类型不受限制)
例:m='hello %3s'%123
n='hello %.1s'%123.456 (不可用%s保留小数)
print(m)
print(n)
最后的输出为:hello 123
hello 1 (注意结果并不是保留小数)
-----%f表示保留几(6)位小数,%.2f表示保留2位小数(会自动四舍五入)
例:m='hello %.2f'%123.456
print(m)
最后的输出为:hello 123.46
------%d是整数占位符(保留整数,舍去小数)
例:m='hello %d'%123.45
print(m)
最后的输出为:hello 123
##字符串的复制(将字符串和数字相乘)
-在语言中*表示乘法
-如果将字符串和数字相乘,则解释器会将字符串重复指定的次数并返回
例:a='abc'
a*2
print(a)
最后的输出为:abc [因为a*2是一个表达式,对程序无影响,所以a并未被复制]
a='abc'
a=a*2
print(a)
最后的输出为:abcabc
##布尔值和空值
----布尔值(bool)
-布尔值主要用来做逻辑判断;
-布尔值一共有两个:True(表示真),False(表示假) [首字母大写!!!]
例:a=True [注意True和False不要打引号,否则表示的是字符串]
print('a=',a)
最后的输出为:a= True
-布尔值实际上也属于整型,True相当于1,False相当于0
例:print(False+1) (只有同类型才可相加)
最后的输出为:1
----空值(None)
-None专门用来表示不存在
例:b=None
print(b)
最后的输出为:None
##类型检查
-数据类型:整型
布尔值(实际属于整型)
浮点型(小数)
复数
字符串
空值
---通过类型检查,可以检查指定值或指定变量(最终检查的还是变量所代表的值)的类型;
--使用type()函数来检查值的类型;该函数有返回值,会将检查的结果作为返回值返回,
可以通过变量来接收函数的返回值;也可以直接print(type(a))
例1: a=123 整数
b='123' 字符串
print('a=',a)
print('b=',b)
最后的输出:a=123
b=123
c=type(123)
m=print('123')
最后的输出:<class 'int'>
<class 'str'>
```
对象(object)
- Python是一门面向对象的语言
- 一切皆对象!
- 程序运行当中,所有的数据都是存储到内存当中然后再运行的!
- 对象就是内存中专门用来存储指定数据的一块区域
- 对象实际上就是一个容器,专门用来存储数据
- 像我们之前学习的数值、字符串、布尔值、None都是对象
- 参考 图1
对象的结构
- 每个对象中都要保存三种数据
- id(标识)
> id用来标识对象的唯一性,每一个对象都有唯一的id
> 对象的id就相当于人的身份证号一样
> 可以通过id()函数来查看对象的id (在python的交互模式查看)
> id是由解析器生成的,在CPython中,id就是对象的内存地址
> 对象一旦创建,则它的id永远不能再改变
- type(类型)
> 类型用来标识当前对象所属的类型
> 比如:int str float bool 。。。
> 类型决定了对象有哪些功能
> 通过type()函数来查看对象的类型
> Python是一门强类型的语言,对象一旦创建,类型便不能修改
- value(值)
> 值就是对象中存储的具体的数据
> 对于有些对象值是可以改变的
> 对象分成两大类:可变对象 不可变对象
可变对象的值可以改变
不可变对象的值不能改变,之前学习的对象都是不可变对象
- 参考 图2
练习:尝试自己画一下对象的内存结构。
变量和对象
- 对象并没有直接存储到变量中,在Python中变量更像是给对象起了一个别名
- 变量中存储的不是对象的值,而是对象的id(内存地址),
当我们使用变量时,实际上就是在通过对象id在查找对象
- 变量中保存的对象(的id),只有在为变量重新赋值时才会改变
- 变量和变量之间是相互独立的,修改一个变量不会影响另一个变量
- 参考 图3
类型转换
- 所谓的类型转换,将一个类型的对象转换为其他对象
- 类型转换不是改变对象本身的类型(对象一旦创建,它的类型是不可以被改变的),而是
根据当前对象的值创建一个新对象
-----类型转换的四个函数:int(),float(),str(),bool()
-----int()可以用来将其他对象转换为整型;
规则:
1)布尔值:True->1,False->0
例: a=True
print('a=',a)
print('a的类型是',type(a))
---> a= True
a的类型是 <class 'bool'>
下面调用int()来将a的值转换成整型
a=True
int(a)
print('a=',a)
print('a的类型是',type(a))
---->a= True
a的类型是 <class 'bool'>
我们发现,结果根本没有变化,这是因为我们只是将对象的值True转换成了整数1,
但是对原来的变量a是没有产生影响的,调用int()时只是将对象的值转换成了指定的
类型并将其作为返回值返回;
如果希望修改原来的变量,则需要对变量进行重新赋值,即a=int(a)
a=True
a=int(a)
print('a=',a)
print('a的类型是',type(a))
---->a= 1
a的类型是 <class 'int'>
2)浮点数:直接取整,省略小数点后面的内容
例: a=11.6
a=int(a)
print('a=',a)
print('a的类型是',type(a))
---->a= 11
a的类型是 <class 'int'>
3)字符串:合法的整数字符串,直接转换成对应的数字;
如果不是一个合法的整数字符串,则报错:ValueError
例1:a='123'
a=int(a)
print(a)
---->123
例2:a='11.6'
a=int(a)
print(a)
---->ValueError
4)对于其他不可转化为整形的对象(比如:None),直接抛出异常:ValueError
-----float()和int()基本一致,不同的是它会将对象转化为浮点数
规则:
1)布尔值:True->1.0,False->0.0
2)字符串:合法的浮点数字符串,直接转换成对应的数字;
如果是整数,则在后面加.0;
3)整数:直接在后面加.0;
-----str()可以将对象转化成字符串
-----bool()可以将对象转换成布尔值,任何对象都可以转换成布尔值
规则:对于所有表示空性的对象[例:0,None,''(空串)]都会转换成False