飞道的博客

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

292人阅读  评论(0)

目录

 

链式赋值

自动转型:

浮点数(小数)float

Python中的运算符

1、普通运算符

2、逻辑运算符

3、增强运算符

4、同一运算符

关于整数缓存问题

时间表示

字符串

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

转义字符

常用字符串函数

Python中的字符串驻留机制:


链式赋值

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

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


  
  1. int a= 1,b= 2,t;
  2. t = b;
  3. b = a;
  4. 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+b 3
* a,b=1,2 计算a*b 2
/ a,b=1,2 计算a/b 0.5

 

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


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

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

2、逻辑运算符

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

在Python里面:

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编码


   
  1. s = 'u'
  2. print(ord(s))

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


   
  1. a = 100
  2. print(chr(a))

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

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

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

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

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

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

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

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

转义字符

图片

一些小例子

 

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


   
  1. a = '123'
  2. b = '456'
  3. print(a+b)

结果是:123456

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

字符串复制,*号 

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

控制台读取字符串

可以使用input()

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


  
  1. s = 12
  2. print(str(s))
  3. """ 结果为 '12' """

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


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

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


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

Python有另一种方式:


  
  1. str = "1234342"
  2. 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

如果是:


  
  1. a = "fd*"
  2. b = "fd*"
  3. a is b

则结果为False。


转载:https://blog.csdn.net/qq_38851184/article/details/104993352
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场