Python提供了整数和浮点数。还允许我们使用16进制、8进制、2进制常量来表示,提供了复数类型,还允许整数有无穷的精度。
40 + 3.14 自动转换成float类型
4 / 2 #在python3的结果为2.0,而要做整除需要用到//符号
>>> b / (2.0 + a)
0.800000000000000004
>>> print(b / (2.0 + a)) #在这里交互模式下会比打印的位数多
>>> 2 == 2.0
True
>>> 2 > 1 < 3
True #与c/c++不同,python的比较符号可以连续使用
X / Y #在python2.x中是传统除法,即对于整数结果只保留整数部分。在python3中是真除法,无论任何类型都保留小数部分
X // Y #在python3中是Floor除法,省略小数部分
>>> 1 // (-2)
-1 #这是Floor的特点,去小于结果的最大整数
>>> 1j + 2J
3j #j/J表示虚数单位
由于浮点数有误差,我们在表示精确的有限小数时,是使用小数对象。
>>> from decimal import Decimal
>>> Decimal('0.1') + Decimal('0.1') + Decimal('0.1') - Decimal('0.3')
Decimal('0.0')
>>> 0.1 + 0.1 + 0.1 - 0.3
5.551115123125783e-17
分数类型可以使用fraction库里面的额Fraction来声明,分数可以保持精度。可以直接使用类型转换来转换成float或int型。
>>> x = Fraction(1,3)
>>> y = Fraction(4, 6)
>>> x
Fraction(1, 3)
>>> y
Fraction(2, 3)
>>> float(y)
0.6666666666666666
集合的创建方法:
>>> set([1, 2, 3, 5, 1, 2])
{1, 2, 3, 5}
>>> 1 == True
True
>>> 1 is True
False
- 变量是一个系统的元素,拥有指向对象的连接空间
- 对象是一块分配内存
- 引用是自动形成的从变量到对象的指针
Remark:对象可能引用自身,或者引用另一个引用了自身的对象,形成循环引用。这样的引用计数器不会清零,要谨慎对待。
a = 3
b = a
在这里a和b指向同一个对象3,而当a改变时,对象3没有改变。考虑下面的语句
a = 3
b = a
a = a + 2
在这里对象3是不会发生改变的,实际上整数对象不可改变,而是创建了一个新对象5。
>>> L1 = [1, 2, 3]
>>> L2 = L1
这样L1和L2指向同一个对象,一个改变另一个也改变
>>> L2 = L1[:]
这样就可以指向不同对象了
这种分片技术不会应用在其他核心类型中(字典、集合),复制这样一个类型应该使用X.copy方法调用。
import copy
X = copy.copy(Y)
X = copy.deepcopy(Y)
出于完整性考虑,对于前面介绍的垃圾收集,某些类型需要慎重。参照下面语句:
>>> x = 42
>>> x = ‘shrubbery’
在这里42并不是直接回收,而是缓存了,它可能保存在一个系统表中,等待下次使用。但大部分对象都会在非引用状态下直接回收。
>>> L = [1, 2, 3]
>>> M = L
>>> L == M
True
>>> L is M
True
在这里is语句是判断两个变量引用的对象是否相同,而"=="是判断两对象的value是否相等。
python的字符串中没有单个字符的概念,是一种不可变类型。
>>> a = 'aaaa'
>>> a[0] = '1'
Traceback (most recent call last):
File "", line 1, in
TypeError: 'str' object does not support item assignment
s = ‘’
s.split(’,’)
s.rstrip()
s.rplace(‘aa’, ‘ss’)
s.isdigit()
s.lower()
‘spam’ in s
[s * 2 for s in txt]
s.find(‘sa’)
除了核心系列的操作,python还提供了标准库re模块(正则表达式)支持更高级的基于模式的字符串处理。
>>> s = ["hello", 'hello']
>>> s
['hello', 'hello']
python自动在任意的表达式中合并相邻的字符串常量。
>>> s = 'hello' "world"
>>> s
'helloworld'
增加逗号“,”会变成二元组
>>> s = 'hello' ,"world"
>>> s
('hello', 'world')
略
myfile = open('C:\new\text.dat', 'w')
在这里\n是换行符,而raw字符串正好解决这个问题。如果字母R/r出现在字符串之前,则关闭转义。
>>> path = r'C:\new\text.dat'
>>> path
'C:\\new\\text.dat'
>>> print(path)
C:\new\text.dat
>>> len(path)
15
在这里每个反斜杠只占用一个位置
>>> s = """oh
... my
... god"""
>>> s
'oh\nmy \ngod'
>>> print('-' * 10)
----------
>>> print('abc' + 'def')
abcdef
>>> s = 'spam'
>>> s[0], s[-2]
('s', 'a')
在切片s[i:j]中,上界不包括在内。j可以是负数。
>>> s[:-1]
'spa'
>>> s = 'abcdefghijklmn'
>>> s[:-1:2]
'acegikm'
>>> s[::-1]
'nmlkjihgfedcba'
切片s[i:j:k],k为正整数表示步长,而为负数时表示逆过来。
python的座右铭之一是拒绝猜的诱惑。在python中不能让数字和字符相加。
>>> '1'+1
Traceback (most recent call last):
File "", line 1, in
TypeError: must be str, not int
>>> ord('s')
115
>>> chr(115)
's'
字符串对象不可改变,但可以通过切片、索引、合并来建立新的对象。
>>> s = 'spam'
>>> s = s + 'SPAM'
>>> s
'spamSPAM'
>>> s = s[:4]+'Burger'+s[4:]
>>> s
'spamBurgerSPAM'
可以通过replace函数来实现
>>> s = 'splot'
>>> s = s.replace('pl', 'pamal')
>>> s
'spamalot'
也可以通过字符格式化表达式来创建新的文本值,结果是一个新的对象值,而不是改变后的对象。
>>> 'That is %d %s bird' % (1, 'dead')
'That is 1 dead bird'
>>> 'That is {0} {1} bird!'.format(1, 'dead')
'That is 1 dead bird!'
略
格式化字符串:
>>> 'That is %d %s bird' % (1, 'dead')
'That is 1 dead bird'
转换目标的通用结构:
%[(name)][flags][width][.precision]typecode
操作:放置字典的键;罗列出左对齐(-)、正负号(+)和补零(0)的标志位;给出数字的整体长度和小数点后的位数等。width和precision都可以编码为一个*,以指定它们应该从输入值的下一项中取值。
>>> "%(n)d %(x)s" % {"n":1, "x":'spam'}
'1 spam'
format方法使用主体字符串作为模板,花括号通过位置或关键字指出要替换的目标及插入的参数。
>>> template = '{0}, {1} and {2}'
>>> template.format('spam', 'ham', 'eggs')
'spam, ham and eggs'
字符串也可以临时的常量。