Python变量类型和运算符(变量)

回眸只為那壹抹淺笑 提交于 2020-04-03 18:41:07

python 变量

Python 使用等号(=)作为赋值运算符,

注意,变量名其实就是标识符,因此在命名时,既要遵守标识符的命名规范,还要避免和 Python的内置函数重名。

强类型语言和弱类型语言

必须指定该变量所能存储的数据类型,以 C 语言为例:

int a = 20

和强类型语言相对应的是弱类型语言,Python 就是典型代表之一。弱类型语言有以下 2 个特征:

变量无须声明即可直接赋值,对一个不存在的变量赋值就相当于定义了一个新变量。
变量的数据类型可以动态改变:同一个变量可以一会儿被赋值为整数值,一会儿被赋值为字符串。

 

 

python 数值类型

Python 中的数值类型主要包括整形、浮点型和复数类型。整形专门用来表示整数,即没有小数部分的数。在 Python 中,整数包括正整数、0 和负整数。

short、int、long 整形类型存储,除此之外,Python 的整型还支持 None 值(空值)

[root@kube python]# py demo6.py 
<class 'int'>
<class 'int'>
<class 'int'>
<class 'NoneType'>
[root@kube python]# cat demo6.py 
a=1
b=222
c=4444444444444444444444444444444444444444444444444444
d=None
print(type(a))            #type()函数用于返回变量的类型
print(type(b))
print(type(c))
print(type(d))
[root@kube python]# py demo6.py 
<class 'int'>
<class 'int'>
<class 'int'>
<class 'NoneType'>
[root@kube python]# 
Python 的整型数值有 4 种表示形式:
十进制形式:最普通的整数就是十进制形式的整数,在使用十进制表示整数值时,不能以 0(零)作为十进制数的开头(数值是 0 除外)。
二进制形式:由 0 和 1 组成,以 0b 或 0B 开头。例如,101 对应十进制数是 5;
八进制形式:八进制整数由 0~7 组成,以 0o 或 0O 开头(第一个字母是零,第二个字母是大写或小写的 O)。需要注意的是,在 Python 2.x 中,八进制数值还可以直接以 0(零)开头。
十六进制形式:由 0~9 以及 A~F(或 a~f)组成,以 0x 或 0X 开头,

 

 

python 浮点型

浮点型数值用于保存带小数点的数值,Python 的浮点数有两种表示形式:

  • 十进制形式:这种形式就是平常简单的浮点数,例如 5.12、512.0、0.512。浮点数必须包含一个小数点,否则会被当成整数类型处理。
  • 科学计数形式:例如 5.12e2(即 5.12×102)、5.12E2(也是 5.12 ×102)。


必须指出的是,只有浮点型数值才可以使用科学计数形式表示。例如 51200 是一个整型值,但 512E2 则是浮点型值。

[root@kube python]# cat demo7.py 
a=3.455
print(type(a))
b=44.56677
print(type(b))
c=4.56e2
print(type(c))
d=3e4
print(type(d))
print(a)
print(b)
print(c)
print(d)
[root@kube python]# py demo7.py 
<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>
3.455
44.56677
456.0
30000.0
[root@kube python]# #变量C 和 d 依然是浮点型值,而不是整型值,因为 Python 会自动将该数值变为 456.0  和  30000.0

 

注意,使用浮点数进行计算时,可能会出现小数位数不确定的情况,比如说,计算 0.1+0.2,本来应该得到 0.3,但经过测试你会发现,Python解释器的运行结果为 0.30000000000000004。几乎所有编程语言都存在这个问题,这与浮点数在底层的存储方式有关系

>>> 0.1+0.2
0.30000000000000004
>>> 

 

问题:

算机其实是不认识十进制数,它只认识二进制数,也就是说,当我们以十进制数进行运算的时候,计算机需要将各个十进制数转换成二进制数,然后进行二进制间的计算。

以类似 0.1 这样的浮点数为例,如果手动将其转换成二进制,其结果为:

0.1(10)=0.00011001100110011...(2)
可以看到,结果是无限循环的,也就是说,0.1 转换成二进制数后,无法精确到等于十进制数的 0.1。同时,由于计算机存储的位数是有限制的,所以如果要存储的二进制位数超过了计算机存储位数的最大值,其后续位数会被舍弃(舍弃的原则是“0 舍 1 入”)。

 

通过 fractions 或者我 decimal 模块能很好地解决浮点类型数之间运算的问题

 

 

python 复数

Python 甚至可以支持复数,复数的虚部用 j 或 J 来表示。

[root@kube python]# cat demo8.py 
a=3 + 0.2j
print(type(a))

[root@kube python]# py demo8.py 
<class 'complex'>
[root@kube python]# 

 

python 字符串

字符串就是“一串字符”,也就是用引号内的任何数据,比如“Hello,Charlie”是一个字符串,“How are you?”也是一个字符串。

符串必须使用引号括起来,可以使用单引号或者双引号,只要成对即可

使用不同的引号将字符串括起来。
对引号进行转义。
root@kube python]# cat  demo10.py 
#coding:utf-8

a="test one"
b=' "test two", test '
c="test three\" test \" "

print(a)
print(b)
print(c)

[root@kube python]# py demo10.py 
test one
 "test two", test 
test three" test " 
[root@kube python]# 

 

python 长字符串

当程序中有大段文本内容要定义成字符串时,优先推荐使用长字符串形式,因为这种形式非常强大,可以让字符串中包含任何内容,既可包含单引号,也可包含双引号。

[root@kube python]# cat demo11.py 
s=""" tset 
one
two 
three
"""
print(s)
[root@kube python]# py demo11.py 
 tset 
one
two 
three

[root@kube python]# 

 

python 原始字符串

原始字符串以“r”开头,它不会把反斜线当成特殊字符。

如果原始字符串中包含引号,程序同样需要对引号进行转义(否则 Python 同样无法对字符串的引号精确配对),但此时用于转义的反斜线会变成字符串的一部分

[root@kube python]# cat demo12.py
a=r'C:\windows\python\test\\'           #行位的\ 需要转义
b=r'let\' go'
print(a)
print(b)
[root@kube python]# py demo12.py 
C:\windows\python\test\\
let\' go
[root@kube python]# 

 

python  字符编码

nicode 字符集又称万国码、国际码、统一码等。从名字就可以看出来,它是以统一符号为目标的字符集。Unicode 对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更简单的方式来呈现和处理文字。
注意,在实际使用时,人们常常混淆字符集和字符编码这两个概念,我认为它们是不同的:
字符集定义了字符和二进制的对应关系,为每个字符分配了唯一的编号。可以将字符集理解成一个很大的表格,它列出了所有字符和二进制的对应关系,计算机显示文字或者存储文字,就是一个查表的过程;
而字符编码规定了如何将字符的编号存储到计算机中,要知道,有些字符编码(如 GB2312 和 GBK)规定,不同字符在存储时所占用的字节数是不一样的,因此为了区分一个字符到底使用了几个字节,就不能将字符的编号直接存储到计算机中,字符编号在存储之前必须要经过转换,在读取时还要再逆向转换一次,这套转换方案就叫做字符编码。

Unicode 字符集可以使用的编码方案有三种,分别是:
UTF-8:一种变长的编码方案,使用 1~6 个字节来存储;
UTF-32:一种固定长度的编码方案,不管字符编号大小,始终使用 4 个字节来存储;
UTF-16:介于 UTF-8 和 UTF-32 之间,使用 2 个或者 4 个字节来存储,长度既固定又可变。

其中,UTF-8 是目前使用最广的一种 Unicode字符集的实现方式,可以说它几乎已经一统江湖了。

 

[root@kube python]# cat  demo13.py
#coding:utf-8

import sys
a=sys.getdefaultencoding()
print(a)

[root@kube python]# py demo13.py 
utf-8
[root@kube python]# 

在 Python 3.x 中也可以用 ord() 和 chr() 函数实现字符和编码数字之间的转换,例如:

>>> ord('A')     
65
>>> chr(99)
'c'
>>> 

python bytes 类型及用法

Python 3 新增了 bytes 类型,用于代表字节串(这是本教程创造的一个词,用来和字符串对应)。字符串(str)由多个字符组成,以字符为单位进行操作;字节串(bytes)由多个字节组成,以字节为单位进行操作。

bytes 和 str 除操作的数据单元不同之外,它们支持的所有方法都基本相同,bytes 也是不可变序列。

如果希望将一个字符串转换成 bytes 对象,有如下三种方式:
如果字符串内容都是 ASCII 字符,则可以通过直接在字符串之前添加 b 来构建字节串值。
调用 bytes() 函数(其实是 bytes 的构造方法)将字符串按指定字符集转换成字节串,如果不指定字符集,默认使用 UTF-8 字符集。
调用字符串本身的 encode() 方法将字符串按指定字符集转换成字节串,如果不指定字符集,默认使用 UTF-8 字符集。
[root@kube python]# cat demo14.py 
a1=bytes()
a2=b''
a3=b'test'
print(a1)
print(a2)
print(a3)
print(a3[0])
print(a3[2:4])

b4="Python 很有趣".encode('utf-8')          #调用  encode('utf-8') 将字符串装换为字节串
print(b4)
b5=b4.decode('utf-8')                       #调用decode 将字节串转换为字符串
print(b5)

[root@kube python]# py demo14.py 
b''
b''
b'test'
116
b'st'
b'Python \xe5\xbe\x88\xe6\x9c\x89\xe8\xb6\xa3'
Python 很有趣
[root@kube python]# 

 

 

python bool 布尔类型

True 和 False 是 Python 中的关键字,当作为 Python 代码输入时,一定要注意字母的大小写,否则解释器会报错。

布尔类型可以当做整数来对待,即 True 相当于整数值 1,False 相当于整数值 0。

bool 类型就是用于代表某个事情的真(对)或假(错),如果这个事情是正确的,用 True(或 1)代表;如果这个事情是错误的,用 False(或 0)代表。

>>> 1>2
False
>>> 2>1
True
>>> 

 

 

python  缓存重用机制

Python 缓冲机制是为提高程序执行的效率服务的,实际上就是在 Python 解释器启动时从内存空间中开辟出一小部分,用来存储高频使用的数据,这样可以大大减少高频使用的数据创建时申请内存和销毁时撤销内存的开销

 

表 1 Python 缓存重用规则
数据类型是否可以重用生效范围
范围在 [-5, 256] 之间的小整数 如果之前在程序中创建过,就直接存入缓存,后续不再创建。 全局
bool 类型
字符串类型数据
大于 256 的整数 只要在本代码块内创建过,就直接缓存,后续不再创建。 本代码块
大于 0 的浮点型小数
小于 0 的浮点型小数 不进行缓存,每次都需要额外创建。
小于 -5 的整数

 

python input() 函数

 

[root@kube python]# cat python15.py 
#coding:utf-8

msg=input('请输入身高,单位m :')
print(msg)
print(type(msg))
[root@kube python]# py python15.py 
请输入身高,单位m :1.75
1.75
<class 'str'>
[root@kube python]# 

 

 

python print() 函数

前面使用 print() 函数时,都只输出了一个变量,但实际上 print() 函数完全可以同时输出多个变量,而且它具有更多丰富的功能。

print() 函数的详细语法格式如下:

print (value,...,sep='',end='\n',file=sys.stdout,flush=False)

 

 

[root@kube python]# cat  demo15.py
#coding:utf-8

user_name = "tom"
user_age = 8
print("姓名:", user_name, "年龄:", user_age,sep='---')      #sep  改变默认分隔符
[root@kube python]# py demo15.py 
姓名:---tom---年龄:---8
[root@kube python]# 

 

[root@kube python]# cat demo16.py 
#coding:utf-8

print("第一行,",end="")
print("第二行,",end="")          
print("第三行,",)#print() 函数的 end 参数的默认值是“\n”,这个“\n”就代表了换行。如果希望 print() 函数输出之后不会换行,则重设 end 参数即可

[root@kube python]# py demo16.py 
第一行,第二行,第三行,
[root@kube python]# 

 

python 格式化字符串

Python 提供了“%”对各种类型的数据进行格式化输出

 式化字符串中的“%s”被称为转换说明符(Conversion Specifier),其作用相当于一个占位符,它会被后面的变量或表达式的值代替。“%s”指定将变量或值使用 str() 函数转换为字符串。

果格式化字符串中包含多个“%s”占位符,第三部分也应该对应地提供多个变量,并且使用圆括号将这些变量括起来

 

表 1 Python转换说明符
转换说明符说明
%d,%i 转换为带符号的十进制形式的整数
%o 转换为带符号的八进制形式的整数
%x,%X 转换为带符号的十六进制形式的整数
%e 转化为科学计数法表示的浮点数(e 小写)
%E 转化为科学计数法表示的浮点数(E 大写)
%f,%F 转化为十进制形式的浮点数
%g 智能选择使用 %f 或 %e 格式
%G 智能选择使用 %F 或 %E 格式
%c 格式化字符及其 ASCII 码
%r 使用 repr() 将变量或表达式转换为字符串
%s 使用 str() 将变量或表达式转换为字符串

 

 

[root@kube python]# cat demo17.py 
#coding:utf-8

user="志明"
age= 18
print("作者是: %s ,年龄: %s。" % (user,age))         # %s 作为占位符和转换说明符 , “%”作为分隔符。
[root@kube python]# py demo17.py 
作者是: 志明 ,年龄: 18。
[root@kube python]# 

 

 

[root@kube python]# cat demo18.py 
num2 = 30
# 最小宽度为0,左边补0
print("num2 is: %06d" % num2)
# 最小宽度为6,左边补0,总带上符号
print("num2 is: %+06d" % num2)
# 最小宽度为6,右对齐
print("num2 is: %-6d" % num2)
my_value = 3.001415926535
# 最小宽度为8,小数点后保留3位
print("my_value is: %8.3f" % my_value)
# 最小宽度为8,小数点后保留3位,左边补0
print("my_value is: %08.3f" % my_value)
# 最小宽度为8,小数点后保留3位,左边补0,始终带符号
print("my_value is: %+08.3f" % my_value)
the_name = "Charlie"
# 只保留3个字符
print("the name is: %.3s" % the_name) # 输出Cha
# 只保留2个字符,最小宽度10
print("the name is: %10.2s" % the_name)
[root@kube python]# py demo18.py 
num2 is: 000030
num2 is: +00030
num2 is: 30    
my_value is:    3.001
my_value is: 0003.001
my_value is: +003.001
the name is: Cha
the name is:         Ch
[root@kube python]# 

 

 

python  转义字符

表 1 Python 支持的转义字符
转义字符说明
\ 在行尾的续行符,即一行未完,转到下一行继续写
\' 单引号
\" 双引号
\0
\n 换行符
\r 回车符
\t 水平制表符,用于横向跳到下一制表位
\a 响铃
\b 退格(Backspace)
\\ 反斜线
\0dd 八进制数,dd 代表字符,如 \012 代表换行
\xhh 十六进制数,hh 代表字符,如 \x0a 代表换行



 python  数据类型转换函数

 在使用类型转换函数时,提供给它的数据必须是有意义的。例如,int() 函数无法将一个非数字字符串转换成整数

解释器提示我们字符串和浮点类型变量不能直接相连,需要提前将浮点类型变量 height 转换为字符串才可以。

表 1 常用数据类型转换函数
函 数作 用
int(x) 将 x 转换成整数类型
float(x) 将 x 转换成浮点数类型
complex(real,[,imag]) 创建一个复数
str(x) 将 x 转换为字符串
repr(x) 将 x 转换为表达式字符串
eval(str) 计算在字符串中的有效 Python 表达式,并返回一个对象
chr(x) 将整数 x 转换为一个字符
ord(x) 将一个字符 x 转换为它对应的整数值
hex(x) 将一个整数 x 转换为一个十六进制字符串
oct(x) 将一个整数 x 转换为一个八进制的字符串

 

 

[root@kube python]# cat demo19.py 
height=180

print("升高测试:"+ str(height))
[root@kube python]# py demo19.py 
升高测试:180
[root@kube python]# 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!