# 数值类型

Python中数值类型包括整型,浮点型和复数。

# 整型

Python3 的整型支持各种大小的整数值,不用分成short,int,long等,这就是比较省心的地方。在处理特别大的数时,python2内部是当成long类型来处理,python3则是当成int类型处理。为了提高数值的可读性,python3可以在数值中使用下划线来作为分隔符分隔开数字,让它更清楚明白。

Python3中的数值在不同进制中有不同的前缀:

  • 二进制:以0b或0B开头。
  • 八进制:以0o或0O开头。
  • 十六进制:以0x或0X开头。

# 浮点型

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

  • 十进制带小数点。
  • 科学计数,比如3.14e3意味着3140。

# 复数

Python中支持复数,复数的虚部用j或J表示,一些操作需要引入cmath模块。

来看实例:

import cmath
one=1_000_000
print(one*2)

binary=0b001010
octal=0o12
hex=0xF4
print(binary)
print(octal)
print(hex)

nullNum=None
print(nullNum)

floatNum=2e5
print(floatNum)

print(cmath.sqrt(-1))

fu1=1+2j
fu2=1-2j
print(fu1*fu2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 字符类型

在python中字符串用双引号或单引号括起来。在python中转义字符用反斜线,这样就把特殊字符转换成普通字符,比如在单引号括起来的字符串中使用单引号。

下面是拼接字符串的几种方式:

s1="hello"
s2="world"

s3 = s1,s2
s4 = s1+s2
s5 = "hi \" ""world"

print(s3)
print(s4)
print(s5)
1
2
3
4
5
6
7
8
9
10

python不能直接连接字符串和数值类型,需要将数值类型先转换成字符串类型:

s1="hello "
s2=10

print(s1+str(s2))
print(s1+repr(s2))

print("str('abc') == 'abc' :",str('abc') == 'abc')
print("repr('abc') == 'abc' :",repr('abc') == 'abc')
1
2
3
4
5
6
7
8

# 字符串常见操作

字符串部分选择相关:

str="hello world!"
print(str[2])
print(str[-4])
print(str[2:])
print(str[2:-4])
print(str[-4:])
str2="123456789"
print(str2[1:-3:2])

myword="hello world"
print("最后一个字母:%s" % myword[-1])
print("倒转,从最后一个字母开始:%s" % myword[::-2])
# myword[0]='h'  # 会报错
1
2
3
4
5
6
7
8
9
10
11
12
13

字符串的其他函数:

# 判断一个字符串是否在另一个字符串中:
str="hello world!"
print("world" in str)
# 输出字符串的长度
print(len(str))
# 输出字符串中的ASCII码最大最小值:
print(max(str))
print(min(str))
# 将第一个字母改为大写
print(str.title())
# 将整个字符串改为小写
print(str.lower())
# 将整个字符串改为大写
print(str.upper())
# 首字母大写
print(str.capitalize())
# 将字符居中,两边用特定字符填充
print(str.center(30,"-"))
# 将字符中的大写变小写,小写变大写
print(str.swapcase())
#所有字的开头均为大写,且其他字母均为小写
print(str.istitle())

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

删除字符串两边的空格或其他字符:

str1="  hello world  "
print(str1.lstrip(),".")
print(str1.rstrip(),".")
print(str1.strip(),".")
print(str1.strip("h d"),".")
1
2
3
4
5

查找替换相关方法:

str1="hello world"
print(str1.startswith("hel"))
print(str1.endswith("kld"))
print(str1.find("or"))
print(str1.find("rr"))
print(str1.find("l",7))

print(str1.index("or"))
print(str1.index("l",7))
#print(str1.index("rr")) #找不到会抛出错误
print(str1.replace('l','d'))
print(str1.replace('l','d',2))
table={101:97,108:98,100:99}
print(str1.translate(table))
table2 = str.maketrans('low','123')
print(str1.translate(table2))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

分割连接的相关方法:

str="hello world,this is a test sentence"
print(str.split())
print('_'.join(str.split()))
print(str.split(None,3))
print(str.split(','))
1
2
3
4
5

# 转义字符

有一些字符加上\后就不是原来的含义了,这些都是转义字符,Python中支持的转义字符有:

转义字符 说明
\b 退格符
\n 换行符
\r 回车符
\t 制表符
\" 双引号
\' 单引号
\\ 反斜线

# 长字符串

Python中用三个引号(单引号或双引号)来表示多行字符串,这就是长字符串,长字符串中可以使用任意字符,包括使用\转义。看下例:

num = 1+2*3\
+6
print(num)
str1='''
hello world
this is a long str \
you need to know "everything
'''
print(str1)
1
2
3
4
5
6
7
8
9

# 原始字符串

python中在字符串前面以r开头为原始字符串,原始字符串自动将所有特殊字符转义,在很多时候很方便,比如要表示一个路径的字符串,不用在每个分隔符\后面添加上\来转义:

str1 = r"C:\windows\" \\"
str2 = r"C:\windows" "\\"
print(str1)
print(str2)
1
2
3
4

# bytes

跟字符串以字符为单位相对,bytes以字节为单位进行操作。bytes对象只负责以字节序列来记录数据,它和字符串能相互转换。

要将一个字符串转换成bytes对象,有三种方式:

  • 如果字符串都是ASCII字符,在字符串前添加b来构建。
  • 调用bytes()函数,将字符串按指定字符集转换成bytes,如果不指定默认使用UTF-8字符集。
  • 调用字符串本身的encode()方法将字符串按指定字符集转换成bytes,默认是使用UTF-8字符集。

看案例:

str1 = "hello world"
print(type(str1))

b1 = b"hello world"
#b2 = b"你好世界"
print(type(b1))
print(b1[2])

b2 = bytes(str1,encoding='utf-8')
print(type(b2))
print(b2[2])

b3 = str1.encode('utf-8')
print(type(b3))
print(b3[2])

str2 = b3.decode('utf-8')
print(type(str2))
print(str2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

注意计算机中存放的是二进制,是数字,不能直接保存字符,计算机使用的各种字符需要和数字对应起来,这就是字符-编号对应表,当读取或写入字符时操作的其实是该字符的编号,这张字符-编码对应表也叫码表,一个完整的码表就是一个字符集,早期美国人对各种符号进行编码,他们认为所有的字符加起来也就100多个,这就是ASCII字符集,后来各个国家纷纷为本国文字进行编号,制定本国的字符集,但这些字符集互不兼容,后来出现了一个兼容所有语言的字符集,这就是Unicode字符集,UTF-8,UTF-16都是它的编码方法。

# 输入

程序运行中会需要输入,比如:

info = input("输入一个值:")
print(type(info))
1
2

python3中会将所有的输入都认为是字符串类型。

# 运算符

# 赋值运算符

a=b=c=10
print(a)
a,b=1,2
print(a,b)
c,d=a,b
print(c,d)
c,d=d,c
print(c,d)
1
2
3
4
5
6
7
8

# 算术运算符

a=3.2
b=2
#正常除法
print(a/b)
#整除
print(a//b)

print(a%b)

c="hello"
d="world"
print(c+d)

print("a"*5)
print(3**2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 位运算符

这部分和二进制的运算相关,这就涉及了原码,反码和补码,正数的原码,反码和补码都是一样的,负数的反码是按原码的符号位(最高位)不变,其他位取反,负数的补码是反码加1(对于负数来说,补码为模减去绝对值),计算机中的所有数字运算是基于补码的。

a = 3
b = 6
c = 8
d = -5
print("a :",format(a,'b'))
print("b :",format(b,'b'))
print("c :",format(c,'b'))
print("d :",format(d,'b'))

print("a & b :",format(a & b,'b'))
print("a | b :",format(a | b,'b'))
print("a ^ b :",format(a ^ b,'b'))
print("~c    :",format(~c,'b'))
print("a << 2 :",format(a << 2,'b'),a<<2)
#左移n位相当于乘以2的n次方
print("c >> 2 :",format(c >> 2,'b'),c>>2)
#右移n位相当于除以2的n次方
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 比较运算符

print(1==True)
print(2==True)
print(0==False)
print(False-True)

import time

timeA = time.gmtime()
timeB = time.gmtime()
print(timeA)
print(timeA == timeB)
print("id of timeA:%s,id of timeB:%s" % (id(timeA),id(timeB)))
print(timeA is timeB)
1
2
3
4
5
6
7
8
9
10
11
12
13

# 逻辑运算符

a = 10
b = 5
if a < 11 and b < 7 :
    print("right")

if a < 12 or b < -3 :
    print("wrong")

if not False :
    print("True")
1
2
3
4
5
6
7
8
9
10

# 三目运算符

三目运算符的基本格式如下:

True_result if expression else False_result

a = 5
b = 0
print("First True" if a > 8 else "Second True" if b > 0 else "Second False")
print("First True" if a > 3 else "First False" )
result = "1","2" if a > 5 else "end"
print(result)
result = 1;2 if a > 3 else "end"
print(result)
1
2
3
4
5
6
7
8

# 运算符优先级

Python中的大部分运算符都是从左往右,除了单目运算符,赋值运算符和三目运算符。其优先级从高到低依次是:

运算符 表示
索引运算符 x[begin🔚step]
属性 x.attribute
乘方 **
按位取反 ~
正负号 + -
乘法,除法 * /
加,减 + -
位移 >>,<<
按位与 &
按位异或 ^
按位或 \
比较运算符 ==,!=,>,>=,<,<=
is 运算符 is,is not
in 运算符 in,not in
逻辑非 not
逻辑与 and
逻辑或 or