python中的赋值、自动转型、整数缓存、字符串相关问题

目录

链式赋值

自动转型:

浮点数(小数)float

Python中的运算符

1、普通运算符

2、逻辑运算符+二进制运算

 

3、增强运算符

4、同一运算符

关于整数缓存问题

时间表示

字符串

关于单引号与双引号的一些问题:

转义字符

常用字符串函数

Python中的字符串驻留机制:


链式赋值

使用这个方法会很方便进行变量交换

比起c++代码要见到多了,c++代码:

int a=1,b=2,t;
t = b;
b = a;
a = t;

提到了变量,顺便说一下常量。在c++中,如果要定义常量,所用到的方法是:

#define MAXN 16660

我们用这个方式,定义了常量MAXN,其值固定为16660。在Python中,其实是没有常量的,但出于习惯,我们把常量用大写表示,这意思是:写代码的人的逻辑上的常量,但是实际中可以进行值得改变。

 

 

自动转型:

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

 

问题:整数可以多大?

在c/c++中,整型一般是16位。但是在Python中,整数想多大就多大,因为python被用来进行科学计算,这种类型的计算一把数都很大,所以在Python中,整数是可以很大的,没有溢出之类的问题发生。

科学计数法的一些表示:

100000 可以写成1e5或者1E5。

0.00001可以写成1e-4或者1E-4

3.14可以写成314e-2或者314E-2

 

浮点数(小数)float

科学计数法表示,3.14表示:314*(10**-2)(314E-2)

转为浮点数:foat()

这段代码实际在内存中:

 

同理,除了float(),还有int()函数。int()函数只是将数据取其整数部分,不会进行四舍五入的操作,如果所示:

如果要进行四舍五入(注意:这里的四舍五入跟数学中的不一样,具体看代码),可以使用round()函数:

(1)小数点后第一位小于等于4,舍去

(2)小数点后第一位等于5,也舍去

(3)小数点后大于5,才进行进一位操作

Python中的运算符

1、普通运算符

普通运算符
符号用法
-a,b=1,2 计算a-b-1
+a,b=1,2 计算a+b3
*a,b=1,2 计算a*b2
/a,b=1,2 计算a/b0.5

 

我们注意到做“/”时,返回的是个float类型的数,如果要进行整除,我们需要使用“//”,下面代码输出结果为0

a,b=1,2
print(a//b)

剩下的一些运算跟c/c++ 一样:

2、逻辑运算符+二进制运算

在c/c++里面,我们用:&&表示逻辑与,||表示逻辑或,!表示逻辑非

在Python里面:

二进制运算:

在Python中,&表示按位与,|表示按位或,^表示按位异或。用bin()函数,可以将一个数字转化为二进制,二进制在Python中的表示是以0b或者0B开头。

以下是小李子

 


a = 99
bin(a)   #结果为0b1100011

b = 90
bin(b) #结果为0b1011010

b&a #结果为66

b|a #结果为123

b^a #结果为57

 

3、增强运算符

Python中的一些增强运算符:

 

+= 、-=、 *= 
 

执行增强运算符时,比如:a = a + 1,先找到a的对象,然后新建一个对象,将a + 1后的值存入(包括类型、标志),然后将这个新的对象返回a,原来的a的对象会被回收(Python中一切都已对象为操作)

4、同一运算符

用于比较两个对象是否指向同一个内存单元。用is运算符,如果指向同一个内存单元,结果为True,否则结果为False

举例:

关于整数缓存问题

这里返回的结果是布尔值:True和False。True和False都是关键字,本质上,True=1,false=0

示例:

1、交互式界面

2、pycharm界面:

运算符“==”也可以进行判断两个数字是否相等,但是is比“==”效率高。如果在变量和None之间进行比较,应该用is

 

时间表示

首先要导入time库:

import time

时间计算:从1970年1月1日00:00:00(unix时间)开始计算计算时间:

time.time()获取当前时间,我们可以看到结果是一堆数字,这些数字代表什么?整数部分为现在离unix时间过了多少秒,小数部分表示的是微秒(1E-6)。我这里用了整数部分和小数部分进行时间的描述,因为时间本质上是一串数字,只不过整数用s做单位,小数部分用us做单位

 

 

字符串

字符串是Python中很重要的一块儿内容。在Python中字符串是不可以进行更改的,我们没有办法对原字符串做任何修改。可是明明关于字符串的操作很多,是怎么进行的?这就要用到这篇博客讲到的Python内存机制

注意以下几点:

1、Python中没有字符这一说法,单字符也会被当做一个字符串使用,操作同字符串

2、Python3直接支持Unicode码,16个比特位表示一个字符(建议使用python3)。

3、使用内置函数ord()可以把单个字符转化成Unicode编码

s = 'u'
print(ord(s))

4、使用内置函数chr()可以吧十进制数字转为对应字符

a = 100
print(chr(a))

5、引号创建字符串,可以用单引号或者双引号,这两个等价。

(虽然s和t的值相等,但是指向不同的内存地址)

关于单引号与双引号的一些问题:

例如:a = "i'm a teacher",这句话是对的,结果如下图:

如果单引号‘I'm  a teacher’,这样会出错,Python会认为I是个字符串,后面就会报错,结果如下图:

当然,也可以这样用:‘i"m a teacher’

6、连续的三个双引号或者单引号是个字符串,可以用来当注释使用

7、Python可以允许有空字符串的存在,其长度为零

转义字符

图片

一些小例子

 

字符串拼接:+号(会影响性能,+一次生成一个新对象)

a = '123'
b = '456'
print(a+b)

结果是:123456

+号两边要求操作数类型一样,否则会报错

字符串复制,*号 

调用prinf时,,自动换行符,如果要取消,则print(123,end=''),end是加任何内容/*图片*/

控制台读取字符串

可以使用input()

str()实现其他类型转型字符串

s = 12
print(str(s))
""" 结果为 '12' """

将一个科学计数法自动计算并转为字符串

a = 1e6
print(str(a))
""" 结果为: ‘1000000’ """

字符串本质是字符序列;使用[]提取字符串,[]里面指定偏移量(索引),操作跟c/c++一样。只不过从后往前时,c++模式:

string str = "1244324"
int len = str.length()
for(int i=len-1; i>=0; i--)
{
    cout<<str[i]
}

Python有另一种方式:

str = "1234342"
s[-1] '''结果为 ‘2’ '''

常用字符串函数

1、replace()字符串替换。

这里的字符串替换与之前所提到的str不可变是不矛盾的,有时候相对字符串做修改,我们可以用replace(),s.replace(),字符串是不会改变的。

2、字符串切片slice操作

切片slice的操作可以让我们快速提取字符串,标准格式[启示偏移量 start:种植偏移量 end: 步长 step]

实际裁剪:[start,end)(包头不包尾)

步长为1:隔0个取一个,即连续的

步长为2:隔1个取一个,即中间空一个

start end step 默认:start=0,end=len-1 step=1

其他操作:操作数为负的时候;可以从-1往回走。步长为负表明倒着取

3、split()和join()

spit()可以基于指定分隔符将字符串分割成多个字符串(存储到列表中),如果不指定分隔符,则默认使用空白字符(换行符、制表符、空格)

join()通常和列表一起使用(之前讲过+和*)

+与jion()对比:join()仅新建一次对象(性能较高),而每+一次,创建一次新对象,以下是+和join()所用时间对比图:

 

4、成员操作符

in/not in  判断某个字符(子字符串)是否在于字符串中,返回的结果为True或者False

 

5、其他:

Python中的字符串驻留机制:

同样用 is 或者 not is 操作,返回值为True或者False

如果是:

a = "fd*"
b = "fd*"
a is b

则结果为False。

目录

链式赋值

自动转型:

浮点数(小数)float

Python中的运算符

1、普通运算符

2、逻辑运算符+二进制运算

3、增强运算符

4、同一运算符

关于整数缓存问题

时间表示

字符串

关于单引号与双引号的一些问题:

转义字符

常用字符串函数

Python中的字符串驻留机制:

可变字符串


当我们确实需要修改字符串,但是每次用replace()函数不仅每次会生成一个新的对象,而且会效率低下,这时候,我们就可以引进IO,

from io import StringIO

a = "hello world"
# 创建可变字符串对象
sio = StringIO(a)
print(sio)
# <_io.StringIO object at 0x00000227F03090D8>
print(sio.tell()) # 获取当前文件读取指针的位置
print(sio.read()) # 从当前位置开始读取字符串
# hello world
print(sio.getvalue()) # 返回可变字符串的全部内容
# hello world
print(sio.tell()) # 11
sio.seek(6) # 用于移动文件读写指针到指定位置 【可以重新定位指针的位置】
sio.write("python")  # 从seek(6)指定的位置开始写入字符串
print(sio.getvalue())
# hello python```

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

九久呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值