零基础小白的Python学习之路(二)对象、变量、简单数据类型及运算符


参考资料:《Python编程 从入门到实战》+ 尚学堂Python400集

对象

在我们的这个Python语言中,同样存在对象这个概念,在C++中,对象是类的实例化出得具体实例,里面封装了类的属性成员,方法等,而在Python中也比较相似。
在Python中,对象的本质是一个内存块,里面同样有一些属性值,一些类型等。
如图,在内存中,每个对象大致是这样的情况
包含:

  • 标识(唯一)(identity)
  • 类型(type)
  • 值(value)
    多个不同大小的对象(内存块)位于计算机的堆空间当中
    在这里插入图片描述
    我们可以通过这几个函数找到对应的值:
a = 3
print(id(a))
print(type(a))
print(a)

输出结果:
在这里插入图片描述
此时内存当中是这样的:
在这里插入图片描述
实际上,id就是我们的对象的地址,在新定义一个变量a时,其实是将这个对象中的id(即地址)赋值给我们的变量a,我们在访问3这个值的时候是通过变量a所被赋的id值找到这个对象中的value值的。
于是我们“引用”的概念如下:

引用

在 Python 中,变量也成为:对象的引用。
因为,变量存储的就是对象的地址
变量通过地址引用了“对象”。
变量位于:栈内存
对象位于:堆内存。
在这里插入图片描述

变量

1、变量声明

基本格式: 变量名 = 表达式
【注】

  • 和C / C++ 等语言等不同,Python是动态类型语言,变量不需显式声明类型,根据变量所引用的对象,Python解释器自动确定数据类型。
  • 使用前必须初始化
  • Python是强类型语言,每个对象都有数据类型,只支持该类型支持的操作。
  • 对象和变量:
del a

表示删除栈中的a变量(但对象仍然存在
如果最终对象没有被变量引用,就会被垃圾回收

2、链式赋值

x = y = z = 3

3、系列解包赋值及变量互换

a,b,c = 4,5,6
a,b = 1,2
a,b = b,a

4、常量问题

Python中不支持常量,只能在逻辑上进行实现

基本内置数据类型

  • 整型
  • 浮点型
  • 布尔型
  • 字符串

整型(数字)

基本运算符
  • 加:+
  • 减:-
  • 乘:*
  • 除:
    -浮点数除法:/
    -整数除法://
  • 模(取余):%
  • 幂:**

【注】余数不能为0,会抛异常
另:divmod()函数可以同时得到商和余数(返回的是一个元组)

a = 13
b = 3
c = divmod(a,b)
print(c)

在这里插入图片描述

整数

在Python中,除十进制外,还有二进制、八进制和十六进制
Python3中,int可存储任意大小的整数,那些巨大的科学计算就可以利用Python来实现了

  • 二进制:0b / 0B,0 1
  • 八进制:0o / 0O,0 1 2 3 4 5 6 7
  • 十六进制:0x / 0X,0 1 2 3 4 5 6 7 8 9 a b c d e f
>>> 0b101
5
>>> 0o10
8
>>> 0x10
16
>>> 0xff
255

转换函数:

  • bin():转成二进制
  • oct():转成八进制
  • hex():转成十六进制
n = input("输入十进制数:")
num = int(n)
print("转换为二进制数为:", bin(num))
print("转换为八进制数为:", oct(num))
print("转换为十六进制数为:", hex(num))

在这里插入图片描述

整数与其他数据类型的转换

使用int()函数实现类型转换

  • 浮点数:Python中直接舍去小数部分(注意不会四舍五入!)
  • 布尔值:True—>1;False—>0
  • 符合整数格式的字符串:浮点数会报错,不支持,整数直接转换成对应整数
a = 65.79
print(int(a))
b = True
print(int(b))
c = "125"
print(int(c))

在这里插入图片描述

浮点型

表示

浮点数(float)用 a × b 10 a×b^{10} a×b10形式的科学计数法表示。比如:3.14,表示成:314E-2 或者 314e-2。 这些数字在内存中也是按照科学计数法存储。

类型转换
  • 类似于int()函数,float()函数用来转换成浮点数
  • 整数+浮点数的混合运算,表达式结果会自动转成浮点数
  • round()函数:可以返回浮点数四舍五入后的值
    【注】不会改变原有值,而是产生新的值,并返回
a = 314E-2
print(float(a))
b = "91.75"
print(float(b))
print(round(float(b)))

在这里插入图片描述

c = 123
d = 75.4
print(type(c))
print(type(d))
f = c + d
print(f)
print(type(f))

在这里插入图片描述

增强型赋值运算符
  • +=
  • -=
  • *=
  • /=
  • //=
  • **=
  • %=
补充一个小点

关于时间表示
Unix时间点,也叫Unix时间戳
时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数。它也被称为 Unix 时间戳(Unix Timestamp)。

Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数(以毫秒计算)。Unix时间戳不仅被使用在Unix系统、类Unix系统中,也在许多其他操作系统中被广泛采用。
比如在Python中

import time
t_second = int(time.time())
t_minute = t_second//60
t_hour = t_minute//60
t_day = t_hour//24
t_year = t_day//365
print(t_year)
print("今年是"+str(1970 + t_year)+"年")

在这里插入图片描述

其他基本运算符
运算符说明
and , or , not布尔与 ,布尔或,布尔非
is , is not同一性判断,判断是否为同一个对象
<,<=,>,>= ,!= , ==比较值,可以连用
<< , >>移位(左移1位相当于乘以2,右移1位相当于除以2)
~按位翻转
+ , - , * , / , // , %加,减,乘,浮点除,整数除,取余
**幂运算

布尔型

两个关键字:True 和 False
True = 1
False = 0
所以也可以和整数进行运算

a = True
b = 5
print(a+b)

在这里插入图片描述

比较运算符
  • ==
  • !=
  • >=
  • <=
逻辑运算符
  • 或 or:x or y:
    -若x为True—>True
    -若x为False—>y的值
  • 与 and:x and y:
    -若x为True—>y的值
    -若x为False—>False
  • 非 not:not x:
    -若x为True—>False
    -若x为False—>True
运算符优先级

在这里插入图片描述
【注】

  • 乘除优先于加减
  • 位运算和算术运算>比较运算符>赋值运算符>逻辑运算符

字符串

本质:字符序列

  • Python字符串不可变(不可以直接替换其中某一字符
  • Python不支持单字符类型,也作为一个字符串来使用
字符串的包括
  • 单引号 / 双引号(根据具体情况,比如用于区别于句子间的引号等情况)
  • 三个单引号 / 三个双引号(创建多行字符串)
  • 字符串可以为空:str = “”(中间无空格)
n = '''
	She saids:"Are you kidding me?"
	and he answered:"No, I'm serious!"
	'''
print(n)

在这里插入图片描述

字符串编码

Python:Unicode(16位)
两个配对内置函数:

  • ord():将字符转换成对应的ASCII 数值 / Unicode 数值
  • chr():将十进制数字转换成对应字符
a = "b"
print(ord(a))
m = 97
print(chr(m))
求字符串长度
  • len()
字符串大小写转换
  • capitalize():整个字符串只令第一个字母变为大写
  • title():字符串当中的每个单词首字母转成大写
  • upper():所有字符全转成大写
  • lower():所有字符全转成小写
  • swapcase():所有字母大小写替换
字符串拼接
  • 加号“+”拼接:
    - “+”号两边为字符串—>直接拼接
    - “+”号两边为数字—>进行加法运算
    - “+”号两边类型不同—>抛异常
  • 多个字符串放到一起直接拼接:
    -如,‘aa’ ‘bb’ ——> ‘aabb’
字符串复制
a = 'asd' * 3
print(a)

在这里插入图片描述

不换行打印字符串

基本格式:print(“字符串1” , end = “字符串2”)

  • 字符串1:要打印的字符串
  • 字符串2:以什么样的字符串结尾(可以是任意或空格或空,默认是换行符
print("abc" , end = "")
print("def" , end = "")
print("ghi")

在这里插入图片描述

从控制台读取字符串(键盘输入)
  • input():从控制台读取键盘输入内容
>>> my = input("请输入你的名字:")
请输入你的名字:黎明
>>> my
'黎明'
>>> 
str()函数:数字—>字符串
a = 3.1415
b = str(a)
print(a)
print(type(a))
print(b)
print(type(b))

在这里插入图片描述
会发现,虽然输出的值是一样的,但数据类型已经由浮点型float转变成了字符串类型str
同样,布尔值科学计数法也可以进行转换:

a = 3.14e3
b = True
print(type(a))
print(type(b))
print(str(a))
print(type(str(a)))
print(str(b))
print(type(str(b)))

在这里插入图片描述

使用[ ]提取字符

基本格式:变量名[偏移量]
类似C中的数组按下标访问
偏移量可以正向(从左至右),也可以反向(从右至左)

  • 正向搜索:0 , 1 , 2 , … , len(str)-1
  • 反向搜索:-len(str) , … , -3 , -2 , -1
a = "abcdefghijklmn"
b = len(a)
print(b)
print(a[0])
print(a[b-1])
print(a[-1])
print(a[-b])

在这里插入图片描述

字符串替换
  • replace():将字符串中某一位置的字符串替换
    【注】本质:创建新的字符串对象作为原来的替换
a = "abcdefghijklmn"
a = a.replace('c' , '肖')
print(a)

在这里插入图片描述

字符串切片(slice操作)

快速提取字符串
基本格式:变量名[start : end : step]
【注1】若超出范围,则按照原最大范围进行提取
【注2】start 和 end,包头不包尾

  • start:起始偏移量,可为空,默认从头开始
  • end:终止偏移量,可为空,默认到结尾
  • step:步长,可为空,默认步长为1
a = "abcdefghijklmn"
# 正数
# 提取整个字符串
print(a[:])
# 提取(下标)1 到 5-1=4 的字符串,默认步长为1
print(a[1:5])
# 从 start=2 开始到结尾的字符串
print(a[2:])
# 从头开始到 end-1=7-1=6 的字符串
print(a[:7])
# 从 start=1 提取到 end-1=8-1=7,步长step=2 的字符串
print(a[1:8:2])
print("\n")

# 负数
# 从倒数第3个开始到结尾
print(a[-3:])
# 从倒数第8个到倒数第-3-1个
print(a[-8:-3])
# step=-1,反向提取,相当于将字符串逆序排列
print(a[::-1])

在这里插入图片描述

split()分割 和 join()合并
  • split():将字符串分割成多个子字符串(存储到列表中)
    -split():默认按空格分隔(或其他空白字符:换行符/空格/制表符
    -split(‘字符串’):按字符串分割(分割后该字符串不在列表中
a = "a b c d e f"
a = a.split()
print(a)

b = "to be or not to be a man"
b = b.split("be")
print(b)

在这里插入图片描述

  • join():将一系列子字符串连接起来
    基本格式:“字符串”.join(变量名)
a = ['hello','my','name','is','Jason']
b = "*".join(a)
c = "".join(a)
d = "\n".join(a)
print(b)
print(c)
print(d)

在这里插入图片描述
【注】字符串拼接符“+” VS join()函数
使用字符串拼接符+,会生成新的字符串对象,因此不推荐使用+来拼接字符串。推荐 使用 join 函数,因为 join 函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝, 仅新建一次对象。

字符串驻留机制和字符串比较

仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。 Python 支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_)、字母 和数字)会启用字符串驻留机制驻留机制。

>>> a = "dd#"
>>> b = "dd#"
>>> a is b
False
>>> a == b
True
>>> str1 = "aa"
>>> str2 = "bb"
>>> str1+str2 is "aabb"
False
>>> str1+str2 == "aabb"
True
>>> c = "add_2"
>>> d = "add_2"
>>> c is d
True
>>> c == d
True
>>> 
字符串比较和同一性

注意区别 == / != 和 is / not is

  • == / != 比较的是字符串的,也就是对象中的value属性,是否含有相同字符
  • is / not is 比较的是对象的地址,比较两个对象是否是同一个对象
成员操作符
  • in / not in:判断某个字符(子字符串)是否存在于字符串中
转义字符总结

基本:\ + 特殊字符

  • \(行尾):续行符
  • \\:单反斜杠
  • \’:单引号
  • \":双引号
  • \b:退格(Backspace)
  • \t:横向制表符
  • \r:回车
  • \n:换行
字符串其他常用方法

(1)常用查找方法:

  • 变量名.startswith(“字符串”):是否以该字符串为开始(返回布尔值)
  • 变量名.endswith(“字符串”):是否以该字符串为结束(返回布尔值)
  • 变量名.find(“字符串”):该字符串第一次出现的位置下标
  • 变量名.rfind(“字符串”):该字符串最后一次出现的位置下标
  • 变量名.count(“字符串”):指定字符串共出现了几次
  • 变量名.isalnum(“字符串”):所有字符是否全是字母或数字(返回布尔值)

(2)去除首尾信息、删除空白

  • 变量名.strip(“字符串”):去除首尾的指定字符串信息,可以为空,默认为空白符
  • 变量名.lstrip(“字符串”):去除首部(左侧)的指定字符串信息,可以为空,默认为空白符——>类比左对齐
  • 变量名.rstrip(“字符串”):去除尾部(右侧)的指定字符串信息,可以为空,默认为空白符——>类比右对齐

(3)格式排版

  • 变量名.center(整个版面长度,“填充字符”):居中,默认空白符
  • 变量名.ljust(整个版面长度,“填充字符”):左对齐,默认空白符
  • 变量名.rjust(整个版面长度,“填充字符”):右对齐,默认空白符
a = "fgdigdh"
print(a.center(13,"*"))
print(a.ljust(11,"#"))
print(a.rjust(16,"@"))

在这里插入图片描述
(4)其他字符串检测函数

  • isalnum():是否为字母或数字
  • isalpha():检测字符串是否只由字母组成(含汉字)
  • isdigit():检测字符串是否只由数字组成
  • isspace():检测是否为空白符
  • isupper():是否为大写字母
  • islower():是否为小写字母
字符串的格式化

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的 功能。
format 函数可以接受不限个参数,位置可以不按顺序。

基本格式1(索引):
变量名 = “属性一是:{0} , 属性二是:{1}”
变量名.format(属性一值,属性二值)

基本格式2(参数名):
变量名 = “属性一是:{属性一变量名。} , 属性二是:{属性二变量名}”
变量名.format(属性一变量名 = 属性一值,属性二变量名 = 属性二值)

a = "名字是:{0},年龄是:{1},{0}很优秀"
print(a.format("Jason",24))
a = "名字是:{name},年龄是:{age},{name}很优秀"
print(a.format(age = 24,name = "Jason"))

在这里插入图片描述

填充与对齐
  • ^:居中
  • <:左对齐
  • >:右对齐
a = "{:*>8}".format("233")
print(a)
b = "我是{name},我喜欢{num:*^8}".format(num = 666,name = "Jason")
print(b)

在这里插入图片描述

数字格式化

在这里插入图片描述

a = "我今年{age}岁了,出生于{year}年,平均学分绩点{gpa:.1f},\n\
    今天的温度为{tem:+.2f}摄氏度,路上买菜{price:.0f}1斤,\n\
    又想起曾经在跑道上穿着{num:0>2d}号的球服在场上奔跑,\n\
    拿到了{salary:4<4d}元的工资,五年后,我拿到了{pay:,}的支票,\n\
    后来我拿出{percent:.2%}的积蓄投身公益事业,充实有意义"
print(a.format(age = 24 , year = 1996 , gpa = 3.15 , tem = -15.65 , price = 2.99 ,
               num = 5 , salary = 6 , pay = 1800000 , percent = 0.75))

在这里插入图片描述

可变字符串

在 Python 中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,只能创建新的字符串对象。但是,有时我们需要原地修改字符串,可以使用 io.StringIO 对象或 array 模块。

import io
a = "welcome to ASD"
a_io = io.StringIO(a)
print(a_io)
print(a_io.getvalue())
a_io.seek(11)
a_io.write("P")
print(a_io.getvalue())

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值