2.3 变量和赋值
【例子】比较的两个变量均指向不可变类型
a = "hello"
b = "hello"
print(a is b, a == b)
# True True
【例子】比较的两个变量均指向可变类型
a = ["hello"]
b = ["hello"]
print(a is b, a == b)
# False True
注意:is, is not 对比的是两个变量的内存地址
==, != 对比的是两个变量的值
即:假如比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
假如对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。
2.4 数据类型与转换整型
【例子】找到一个整数的二进制表示,再返回其长度。a = 1031
print(bin(a)) # 0b10000000111
print(a.bit_length()) # 11
2. 浮点型
有时候我们想保留浮点型的小数点后 n 位。可以用 decimal 包里的 Decimal 对象和 getcontext() 方法来实现。
import decimal
from decimal import Decimal
Python 里面有很多用途广泛的包 (package),用什么你就引进 (import) 什么。包也是对象,也可以用上面提到的dir(decimal) 来看其属性和方法。比如 getcontext() 显示了 Decimal 对象的默认精度值是 28 位 ( prec=28 ),展示如下:
a = decimal.getcontext()
print(a)
# Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=
[], traps=[InvalidOperation, DivisionByZero, Overflow])
让我们看看 1/3 的保留 28 位长什么样?
b = Decimal(1) / Decimal(3)
print(b)
# 0.3333333333333333333333333333
那保留 4 位呢?用 getcontext().prec 来调整精度。
decimal.getcontext().prec = 4
c = Decimal(1) / Decimal(3)
print(c)
# 0.3333
3. 布尔型
除了直接给变量赋值 True 和 False ,还可以用 bool(X) 来创建变量,其中 X 可以是基本类型:整型、浮点型、布尔型
容器类型:字符、元组、列表、字典和集合
【例子】bool 作用在基本类型变量: X 只要不是整型 0 、浮点型 0.0 , bool(X) 就是 True ,其余就是 False 。
print(type(0), bool(0), bool(1))
# False True
print(type(10.31), bool(0.00), bool(10.31))
# False True
print(type(True), bool(False), bool(True))
# False True
【例子】bool 作用在容器类型变量: X 只要不是空的变量, bool(X) 就是 True ,其余就是 False 。
print(type(''), bool(''), bool('python'))
# False True
print(type(()), bool(()), bool((10,)))
# False True
print(type([]), bool([]), bool([1, 2]))
# False True
print(type({}), bool({}), bool({'a': 1, 'b': 2}))
# False True
print(type(set()), bool(set()), bool({1, 2}))
# False True
确定bool(X) 的值是 True 还是 False ,就看 X 是不是空,空的话就是 False ,不空的话就是 True 。对于数值变量, 0 , 0.0 都可认为是空的。
对于容器变量,里面没元素就是空的。
4. 获取类型信息
type(object)
print(type(1)) #
print(type(5.2)) #
print(type(True)) #
print(type('5.2')) #
isinstance(object, classinfo)
print(isinstance(1, int)) # True
print(isinstance(5.2, float)) # True
print(isinstance(True, bool)) # True
print(isinstance('5.2', str)) # True
注:type() 不会认为子类是一种父类类型,不考虑继承关系。
isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance() 。
5. 类型转换转换为整型 int(x, base=10)
转换为字符串 str(object='')
转换为浮点型 float(x)
【例子】
print(int('520')) # 520
print(int(520.52)) # 520
print(float('520.52')) # 520.52
print(float(520)) # 520.0
print(str(10 + 10)) # 20
print(str(10.1 + 5.2)) # 15.3
2.5 print() 函数
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)将对象以字符串表示的方式格式化输出到流文件对象file里。其中所有非关键字参数都按str() 方式进行转换为字符串输出;
关键字参数sep 是实现分隔符,比如多个参数输出时想要输出中间的分隔字符;
关键字参数end 是输出结束时的字符,默认是换行符\n ;
关键字参数file 是定义流输出的文件,可以是标准的系统输出sys.stdout ,也可以重定义为别的文件;
关键字参数flush 是立即把内容输出到流文件,不作缓存。
【例子】每次输出结束都用end 设置的参数& 结尾,并没有默认换行。
shoplist = ['apple', 'mango', 'carrot', 'banana']
print("This is printed with 'end='&''.")
for item in shoplist:
print(item, end='&')
print('hello world')
# This is printed with