对象(object)
-Python是一门面向对象的语言
-一切皆对象
-程序运行当中,所有的数据都是存储到内存当中,然后再运行的
-对象就是内存中专门用来存储指定数据的一块区域
-对象实际上就是一个容器,专门用来存储数据
-像我们之前学习的数值、字符串、布尔值、None都属于对象
对象的结构
- 每个对象中都要保存三种数据
-id(标识)
>id用来标识对象的唯一性,每一个对象都有唯一的id
>对象的id就相当于人的身份证号一样
>可以通过id()函数来查看对象的id
>id是由解析器生成的,在CPython中,id就是对象的内存地址
>对象一旦创建,则它的id永远不能再改变
-type(类型)
>类型用来表示当前对象所属的类型
>比如:int str float bool...
>类型决定了对象有哪些功能
>通过type()函数来查看对象的类型
>Python是一门强类型语言,对象一旦创建,类型便不能修改
-value(值)
>值就是对象中存储的具体的数据
>对于有些对象,值是可以改变的
>对象分成两大类,可变对象和不可变对象
可变对象的值可以改变
不可变对象的值不能改变,之前学习的对象都是不可变对象
变量和对象
-对象并没有直接存储到变量中,在Python中变量更像是给对象起了一个别名
-变量中存储的不是对象的值,而是对象的id(内存地址)
当我们使用变量时,实际上就是通过对象的id在查找对象
-变量中保存的对象,只有在为变量重新赋值时才会改变
-变量和变量之间是相互独立的,修改一个变量不会影响另一个
类型转换
-所谓类型转换,将一个类型的对象转换为其他对象
-类型转换不是改变对象本身的类型,而是根据当前对象的值创建一个新对象
类型转换四个函数 int() float() str() bool()
int() 可以用来将其他的对象转换为整型
规则:
- 布尔值:True->1 False->0
- 浮点数:直接取整,省略小数点后的内容
- 字符串:合法的整数字符串,直接转换为对应的数字
- 如果不是一个合法的整数字符串,则报错ValueError: invalid literal for int() with base 10:
‘11.5’ - 对于其他不可转换为整型的对象,直接抛出异常
- 调用int()来将a转换为整型
#int(a) 这样不会对原来变量产生影响,它是将对象转换为指定的类型,并将其作为返回值返回
#如果希望修改原来的变量,则需要对变量进行重新赋值
a = True
a = int(a) >>1
a = '123'
a = int(a) >>123
a = 11.6
a = int(a) >>11
a = '11.5'
a = int(a) >>不可转
a = 1
a = float(a) >>a = 1.0
a = False
a = float(a) >>a = 0.0
a = 123
a = str(a) >>a = 123
a = 1
a = bool(1) >> True
a = 0
a = bool(a) >> False
b = 456
print('hello'+str(b)) >>hello456
运算符(操作符)
-运算符可以对一个值或多个值进行运算或各种操作
-比如 + - = 都属于运算符
-运算符的分类:
1.算数运算符
2.赋值运算符
3.比较运算符(关系运算符)
4.逻辑运算符
5.条件运算符(三元运算符)
# 算数运算符
# + 加法运算符(如果是两个字符串之间进行加法运算,则会进行拼串操作 )
# - 减法运算符
# * 乘法运算符(如果将字符串和数字相乘,则会对字符串进行复制操作,将字符串重新指定次数)
# / 除法运算符,运算时结果总会返回一个浮点类型
# //整除,只会保留计算后的整数位
## % 取模,求两个数相除的余数
a = 10 + 5
a = 'hello' + ' '+'world' #拼串
a = 10 - 5 #计算
a = 5 - True
a = a - 2 #用变量a的值减去2,再赋值给a
a = 5 * 5
print('a = ',a)
a = 10 / 5
a = 5 / 2 #>>2.5
#a = 5 / 0 ZeroDivisionError: division by zero
a = 10 // 3 #3
a = 5 // 2
a = 2 ** 2
a = 10 ** 5
a = 16 ** 0.5 #求16的平方根
a = 10 % 5
a = 10 % 4
a = 10 % 3
print(a)
# 赋值运算符
#可以将等号右侧的值赋值给等号左侧的变量
# +=
# -=
# *=
# **=
# /=
# //=
# %=
a = 10
#a = a + 5
a += 5
print('a = ',a)
#关系运算符
#关系运算符用来比较两个值之间的关系,总会返回一个布尔值
#如果关系成立,返回True,否则返回False
# >
# >=
# <
# <=
# ==
# !=
# 相等和不等比较的是对象的值,不是id
# is 比较两个对象是否是同一个对象,比较的是对象的id
# is not 比较两个对象是否不是同一个对象,比较的是对象的id
# 在Python中可以对像个字符串进行大于(等于)或小于(等于)的运算
# 当对字符串进行比较时,实际上比较的是字符串的Unicode编码
# 比较两个字符串的Unicode编码时,是逐位比较的
# 利用该特性可以对字符串按照字母顺序进行排序,但是对于中文来说,意义不是特别大
# 注意:如果不希望比较两个字符串的Unicode编码,则需要将其转换为数字然后再比较
result = 'a' > 'b' #False
print(result)
result = 1 is True #False
result = 1 is not True #True
print(result)
print(int('2')>int('11')) #Flase
# 逻辑运算符
# 逻辑运算符主要用来做一些逻辑判断
# not 逻辑非
# not可以对符号右侧的值进行非运算
# 对于布尔值,非运算会对其进行取反操作,True变False,False变True
# 对于非布尔值,非运算会先将其转换为布尔值,然后再取反
# and 逻辑与
# and可以对符号两侧的值进行与运算
# 只有在符号两侧的值都为True时,才会返回True,只要有一个False才会返回False
# 与运算是找False
# Python中的与运算是短路的与,如果第一个值为False,则不再看第二个值
#
# or 逻辑或
# or 可以对符号两侧的值进行或运算
# 或运算两个中只要有一个True,就会返回True
# 或运算是找True的
# Python中的或运算是短路的或,如果第一个值为True,则不再看第二个值
#
a = True
a = not a #对a进行非运算
a = 1
a = ''
a = not a
#print(a)
result = True and True
result = True and False
result = False and False
#print(result)
#True and print('你猜我出来吗') 第一个值为True,会看第二个值,所以print()会执行
#False and print('你猜我出来吗') 第一个值为False,不会看第二个值,所以print()不会执行
result = True or True
result = False or False
result = True or False
#print(result)
1 and 2
'11' and '22'
#False or print('你猜我猜的出来吗') 第一个值为False,继续看第二个,打印语句执行
#True or print('你猜我猜的出来吗')
# 非布尔值的与或运算
# 当我们对非布尔值进行与或运算时,Python会将其当做布尔值运算,最终会返回原值
# 与运算的规则
# 与运算是找False的,如果第一个值是False,则不看第二个值
# 如果第一个值是False,则直接返回第一个值,否则返回第二个值
# 或运算的规则
# 或运算时找True的,如果第一个值是True,则不看第二个值
# 如果第一个值是True,则直接返回第一个值,否则返回第二个值
result = 1 and 2 #True and True >>2
result = 1 and 0 # 0
result = 0 and 1 # 0
result = 0 and None # False and False >>0
result = 2 and 1 #True and True >>1
result = 1 or 2 # 1
result = 1 or 0 # 1
result = 0 or 1 # 1
result = 0 or None #None
print(result)
# 条件运算符(三元运算符)
# 语法:语句1 if 条件表达式 else 语句2
# 执行流程:
# 条件运算符在执行时,会先对条件 表达式进行求值判断
# 如果判断结果为True,则执行语句1,并返回执行结果
# 如果判断结果为False,则执行语句2,并返回执行结
# print('你好') if False else print('hello')
a = 10
b = 20
# print('a的值比较大') if a>b else print('b的值比较大')
max = a if a>b else b
print(max)
#练习:
# 现在有a b c三个变量,三个变量中分别保存有三个数值
# 请通过条件运算符获取三个值中的最大值
num1 = 10
num2 = 9
num3 = 11
max = (num1 if num1 > num2 else num2) if (num1 if num1 > num2 else num2) > num3\
else num3
print(max)
#运算符的优先级
a = 10
b = 50
c = 30
# 通过条件运算符获取三个值中的最大值
max = a if a>b else b
max = max if max>c else c
# print(max)
max = a if (a > b and a > c) else (b if b > c else c) # 不推荐这么使用
# print(max)
# 运算符的优先级
# 和数学中一样,在Python中运算符也有优先级,比如先乘除后加减
# 运算符的优先级可以根据优先级的表格来查询
# 在表格中位置越靠下的运算符优先级越高,优先级越高的越优先计算
# 如果优先级一样则自左向右计算
# 关于优先级的表格,知道有就够了,不会的去查
a = 1 + 2 * 3
# 一样 and高 or高
# 如果or的优先级高,或者两个运算符的优先级一样高
# 则需要先进行或运算,则运算结果是3
# 如果and优先级高,则应该先进行与运算
# 则运算结果1
a = 1 or 2 and 3
a = (1 or 2) and 3
# print(a)
# 逻辑运算符(补充)
# 逻辑运算符可以连着使用
result = 1 < 2 < 3 # 相当于 1 < 2 and 2 < 3
result = 10 < 20 > 15 # 相当于 10 < 20 and 20 > 15
print(result)