2 变量_数据类型和运算符

对象

​ Python中一切皆对象。每个对象由:标识(identity)、类型(type)、值(value)组成。

  1. 标识用于唯一标识对象,通常对应于对象在计算机内存中的地址。使用内置函数id(obj)可以返回对象obj的标识。
  2. 类型用于表示对象存储的“数据”的类型。类型可以限制对象的取值范围以及可执行的操作。可以使用type(obj)获取对象的所属类型。
  3. 值表示对象存储的数量的信息。使用print(obj)可以直接打印出值。

对象的本质就是一个内存块,支持特定类型的相关操作。

image-20220228213521256

引用

​ 在python中,变量也称为:对象的引用。因为变量存储的就是对象的地址。

​ 变量通过地址引用了对象。

​ 变量位于:栈内存

​ 变量位于:堆内存

Python值动态类型语言

​ 变量不需要显示声明类型。根据变量引用的对象,Python解释器自动确定数据类型。

Python是强类型语言

​ 每个对象都有数据类型,只支持该类型支持的操做。

标识符

基本用法

标识符:用于变量、函数、类、模块等的名称。

标识符有如下特定的规则:

  1. 区分大小写。
  2. 第一个字符必须是字母、下划线,不能使用特殊字符。
  3. 不能使用关键字。
  4. 以双下划线开头和结尾的名称通常有特殊含义,尽量避免这种写法。比如__init__是类的构造函数

可以使用help()来进入python的帮助系统。

Python标识符命名规则

开发中,我们通常约定俗成遵守规则:

类型规则例子
模块和包名全小写字母,尽量简单。多个单词之间用下划线连接。math,os,sys
函数名全小写字母,多个单词之间用下划线隔开。phone,my_name
类名首字母大写,采用驼峰原则。多个单词时,每个单词第一个字母大写,剩余部分小写。MyPhone,MyClass,Phone
常量名全大写字母,多个单词使用下划线隔开SPEED,MAX_SPEED

变量和简单赋值语句

变量的声明和赋值

​ 变量的声明和赋值用于将一个变量绑定到一个对象上:

​ 变量名 = 表达式

​ 最简单的表达式就是字面量。比如:a = 12345。运行过程中,解释器先运行右边的表达式,生成一个代表表达式运行结果的对象,然后,将这个对象地址赋值给左边。

变量在使用之前必须先初始化。

删除变量和垃圾回收机制

可以使用del语句删除不再使用的变量。

a = 12
del a

只是删除了栈区的a堆区的内容依然存在。

但是,我们有垃圾回收机制。如果对象没有变量引用,就会被垃圾回收器回收,清空内存空间。

链式赋值

相当于对象赋值给多个变量

a = b = 3 相当于 a = 3,b = 3

系列解包赋值

a,b,c = 1,2,3相当于a = 1,b = 2,c = 3

两数交换

a,b = b,a

常量

Python不支持常量,即没有语法规则限制改变一个常量的值。我们只能约定常量的命名规则,以及在程序的逻辑上不对常量的值作出修改。

最基本的内置数据类型

每个对象都有类型,python中最基本的

  1. 整型
  2. 浮点型
  3. 布尔型
  4. 字符串型

数字

Python支持整数和浮点数运算。我们对数字可以有以下运算

运算符说明实例结果
+加法3+25
-减法30-38-8
*乘法3*39
/浮点数除法9/33
//整除7//23
%模(取余)11%21
**3**29

使用divmod()函数同时得到商和余数

image-20220228214841132

整数

python中除了10进制还有其他的三种进制,

  1. 0b或者0B,二进制
  2. 0o或者0O,八进制
  3. 0x或者0X,十六进制。

这三种进制可以方便进行位运算。

使用int()实现类型转换

  1. 浮点数值直接舍弃小数部分
  2. 布尔True转换为1,False转换为0
  3. 字符串符合整型格式则转换对应整数,否则报错。

自动转型

​ 整数和浮点数混合运算时,表达式结果自动转型成浮点数。

整数可以有多大

​ 在python2中int是32位的,可以存储-2147483648到2147483647的整数,long是64位。

​ 但是python3中int可以存储任意大小的整数,long被取消。

​ python3中可以做超大数的计算,而不造成整数溢出,这也是python特别适合科学计算的特点。

浮点数

浮点数,称为float。

浮点数用a×b10形式的科学计数法表示,表示成314E-2或者314-e。

这些数字在内存中也是按照科学计数法进行存储。

类型转换和四舍五入

  1. 类似于int(),我们也可以使用float()将其他类型转化成浮点数。
  2. 整数和浮点数混合计算时候,表达式结果自动转换成浮点数。
  3. round(value)可以返回四舍五入的值。但是不会改变现在有的值,而是产生新的值。

增强型赋值运算符

运算符例子等价
+=a += 2a = a+2
-=a -= 2a = a-2
*=a *= 2a = a*2
/=a /= 2a = a/2
//=a //= 2a = a//2
**=a **= 2a = a**2
%=a %= 2a = a%2

运算符中间不能加空格

时间的表示

计算机的时间是从“1970年1月1日00:00:00”开始的,以毫秒(1/1000s)进行计算。我们也把这样的时刻称为"unix时间点"。

这样我们就可以把所有时间表示出来。

image-20220228220921334

python中可以通过time.time()获得当前时刻,返回的值是以秒为单位,带微秒(1/1000毫秒)精度的浮点值。

布尔值

True,False。

python2中没有布尔值,直接用数字0和1表示

python3中,有了两个关键字。本质还是1和0。甚至还可以和数字相加。

数据类型

不同类型的变量可以进行的运算是不同的,所以必须理解变量的类型,python中数据类型可以分为:

  • 内置类型
    • 数值类型:整型int,浮点型float,复数(complex) 3+5j
    • str:字符串
    • bool:布尔值【True,False】
    • None:空值,表示变量没有确定的值
    • list:列表
    • tuple:元组
    • dict:字典
    • set:集合
  • 自定义类型
    • class :类

基础类型

  • 数值类型:

    • 整型(int): python3中只有int一种,可以表示整数,例如:10,-5,10000

    • 浮点型(float): 表示带小数点的实数,有两种表示法:

      • 小数表示: 1.9 .23
      • 科学计数法: 用e来表示10的指数,1e2就代表了100,注意e前面必须有数值,e后面必须为整数
    • 复数(complex):表示数学上的无理数,形如:a+bj

  • 布尔型(bool):表示事务的两种状态,男女、阴晴、亮暗等,它只有两个值:True,False

  • None:表示空对象,一般用于判断,不同于0和空字符

  • 字符串(str):在python中,用引号(单引号、双引号、三引号)表示字符串

    • 字符串的表示

      # 用单引号表示: 'hello'
      # 用双引号表示:"我用python"
      # 用3个单引号表示:可以表示多行文本,例如:
      	'''伟大
      	   的
      	   祖国
      	 '''
      # 用3个双引号表示:可以表示多行文本,例如:
      	"""
      	我爱你,
      	是从那天开始的。
      	"""
      
    • 转义字符:有些特殊字符无法从键盘输入,可以使用转义字符表示,另外,无论是单引号、双引号还是三引号字符串,其中引号是字符串界定符,引号并不是字符串的内容,那么如何在单引号字符串中表示一个单引号呢,这也可以使用转义字符表示。常见的转义字符

      转义字符描述转义字符描述
      \'表示一个普通字符单引号\n换行
      \"表示一个普通字符双引号\r回车
      \'''一个普通的三单引号\\一个普通的字符
      \"""一个普通的三双引号\a响铃
      \ttab键\b回删一个字符
    • 字符串编码:计算机只能识别二进制,那么字符串如何存储到计算机里呢

      计算机不能直接存储字符串,但我们可以将字符编码,例如用65表示大写字符A,66表示大写字符B....等这种表示方式就是美国类的ASCII码,只能表示127个字符,但对于美国人来说已经足够了。一但能用整数表示字符,我们可以很方便的把整数用二进制表示,那么字符串也就和容易存储到计算机了。
      但还有很多其他国家的语言是不能用ASCII表示的,所有ISO组织就推出了unicode码,用来表示任何一种语言的字符,unicode码也称之为万国码,通用码,可以表示任何一种语言的任何一个字符。unicdoe码有多中表示方式,例如:utf-8、utf-16、utf-32等。一般使用较多的是utf-8,utf-8是一种变长的编码,表示一个字符可能用一个字节,也可能是三个字节
      中文常用编码一般用GBK编码,用2个字节表示一个汉字
      

类型判断

我们可以使用type和isinstance来测试和判断数据类型

#type用法:
  type(obj)
  功能:返回obj的数据类型
  参数:obj是你要测试变量或数值
  示例:
    age = 10
    name = 'hello'
    print(type(name),type(age))
    
    #判断变量是否是指定类型
    if type(age) is int:
       print('是')
    else:
       print('否')

#isinstance用法:
  isinstance(obj,typename)
  功能:判断obj是否是指定类型,是返回True,否返回False
  参数: objobj是你要判断的变量或数值
        typename是指定数据类型,可以是int,float,str等。也可是一个
                 类型的元组,例如:(int,float)
  示例:
    age = 10
	name = 'hello'	
	print(isinstance(age,int))
	print(isinstance(name,(str,int)) #只要name是str或int的一种就返回True
	
	if isinstance(age,int):
	    print('是')
	else:
	    print('否')
	    
#type和isinstance的区别
type判断基本类型是没问题的,但无法判断子类对象是父类的一种
isinstance可以判断子类对象是父类的一种
class A:
    pass

class B(A):
    pass

objA = A()
objB = B()

#输出否
if type(objB) is A:
    print('是')
else:
    print('否')
    
print(isinstance(objB,A))  #True

结论:优先使用isinstance

运算符和表达式

在数学上为了计算结果,我们会写一些式子计算,例如:

​ 30 + 5

这是数学中的计算式,python中为了计算也有类似的式子,叫表达式。在表达式中30和5称作操作数,+称之运算符。表达式的目的在于计算结果。表达式构成:

  • 最基本的表达式就是一些数值,变量、函数,例如: 3, a(变量) print(‘hello’)
  • 由基本表达式加上适当的运算符构成复杂的表达式: 3 + a

综合上述,所谓表达式就是由操作数和运算符组成䄦符合python语法的式子。要写表达式首先要学习运算符。关于运算符要知道两件事情

  • 计算顺序 : 是从左向右算还是从右向左算
  • 优先级 : 比如先乘除后加减

算术运算符

a = 20

b = 10

运算符说明示例
-负号,取原数的相反数a = 10 print(-a) #-10
+ - * /加减乘除,同数学上一样a + b = 30 a - b = 10 a * b = 200 a / b = 2
%模运算,即求 a整除以b的余数a % 10 = 0
//整除a // b = 2
**对运算符进行指数(幂)计算a ** b 表示20的10次方
模运算说明
  • 模运算的符号取决于第二个操作数(右操作数)
  • 模运算的计算公式:r = a % b = a - n * b,其中n是小于a/b的最大整数
  • 整除(//)运算如果有一个操作数是浮点数,结果是浮点数
  • 用途:判断奇偶、判断是否能够整除、最大公约数、水仙花数
数学函数
函数名函数的说明示例
abs取绝对值abs(-10)
pow(x,y)x的y次方pow(10,2)求10的平方
round(x,[n])浮点数的4舍5入, n代表保留小数的位数round(3.456)
max()求给定参数的最大值max(21,43,65,75,86,32,3,45)
min()求给定参数的最小值min(21,43,65,75,86,32,3,45)
math.ceil()需要导入import math库 向上取整math.ceil(18.1) #19
math.floor()需要导入import math库 向下取整math.floor(18.1) #18
math.sqrt需要导入import math库 求平方根math.sqrt(100)
随机函数

获取随机数,需要引入random库。

import random

函数名函数说明
random.randrange(start,stop,step)start 指定范围的起始值 包含本身,默认是0;stop 指定范围的结束值 不包含本身; step 步长,默认步长是1。该函数返回一个整数
random.randint(start,end)返回[start end]之间的一个随机整数,start必须小于end
random.random()返回一个[0.0,1.0)之间的随机小数
注意
  • 优先级: ** >正负号 > // % * / > + -
  • 从左向右算
  • 在幂运算和一元运算符联合计算时,从右向左算,例如: -1 ** 2 = -1

赋值运算符

a = 5; b = 10; c = 20

运算符说明示例
=简单赋值, 将b+c的结果赋给aa = b +c #a=30
+=a += b等价于 a = a +ba = 15
-=a -= b等价于 a = a - ba = -5
*=a *= b等价于 a = a * ba = 50
/=a /= b 等价于a = a / ba = 0.5
%=a %= b等价于a = a % ba = 5
//=a //= b等价于 a = a // ba = 0
**=a **= b等价于a = a ** b

注意:

  • 赋值运算符左边必须是变量
  • 从右向左算
  • 没有赋值表达式
  • 所有赋值运算符优先级相同,赋值运算符优先级非常低,仅高于成员运算符和身份运算符、逻辑运算符
  • 注意在复合赋值中
a = 2
b = 3
a *= b + 2  #等价于 a = a * (b + 2)
print(a)  # a = 10

关系运算

关系运算就是比较运算,如果表达式成立,返回True,否则返回False。关系运算的结果是布尔值。

运算符示例说明
==a == ba和b值相等,结果是True,a和b值不相等结果为False
!=a != ba不等于b 结果为True,否则结果为True
>a > ba大于b结果为True,否则为False
>=a >= ba大于等于b结果为True,否则为False
<a < ba小于b结果为True,否则为False
<=a <= ba小于等于b结果为True,否则为False

注意:

  • 优先级: 比较运算符优先级相同
  • 从左向右算
  • 可以这样算:1 < a < 3 等价于 a > 1 and a < 3

逻辑运算

逻辑运算符可以用于构造复杂条件。逻辑运算符包括:

  • 逻辑与 and 对应汉语的意思是“并且” 、 “同时”
  • 逻辑或 or 对应汉语意思为"或者"
  • 逻辑非 not 对应汉语意思为”相反“

在逻辑运算中,False、None、0、0.0、‘’(空字符串)被看做假(False),其它的看做真(True)

逻辑与
aba and b
任意值b的值
任意值a的值
  • 表达式 a and b的值为: 如果a为真,结果为b的值,否则结果是a的值
逻辑或
aba or b
任意值a的值
任意值b的值
  • 表达式a or b的值为:如果a为真结果为a的值,否则结果是b的值
逻辑非
anot a
False
True

小结:a为真则表达式为False,否则表达式为True

短路计算
  • 对于逻辑与表达式 a and b,如果a为假,则不计算b
  • 对于逻辑或表达式 a or b ,如果a为真,则不计算b
注意事项
  • 优先级 not > and >or

身份运算符

is: 判断两个标识符是否引用自同一个实体【对象】,比较的是两个对象的id是否一样,如果相同为真,否则为假

is not:判断两个标识符是不是引用自不同的实体【对象】如果两个对象的id不同结果为真,否则为假

id()函数获取实体的id(地址)

注意:is和==的区别

  • is用于判断两个变量引用实体是否为同一个【id】
  • ==用于判断两个变量的值是否相同,但id不一定相同

成员运算符

主要应用在序列中

in:如果在指定的序列中找到指定的值,则返回True,否则返回False

not in:如果在指定的序列中未找到指定的值,则返回True,否则返回False

if-else表达式

表达式1 if 条件 else 表达式2

如果条件为真假结果是表达式1的值,否则结果是表达式2的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎丶辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值