1.数字
Python内置支持复数类型及其运算,并且形式与数学上的复数完全一致。
>>> x = 3 + 4j #使用j或J表示复数虚部
>>> y = 5 + 6j
>>> x + y #支持复数之间的加、减、乘、除以及幂乘等运算
(8+10j)
>>> x * y
(-9+38j)
>>> abs(x) #内置函数abs()可用来计算复数的模
5.0
>>> x.imag #虚部
4.0
>>> x.real #实部
3.0
>>> x.conjugate() #共轭复数
(3-4j)
Python 3.6.x支持在数字中间位置使用单个下划线作为分隔来提高数字的可读性,类似于数学上使用逗号作为千位分隔符。
在Python数字中单个下划线可以出现在中间任意位置,但不能出现开头和结尾位置,也不能使用多个连续的下划线。
>>> 1_000_000
1000000
>>> 1_2_3_4
1234
>>> 1_2 + 3_4j
(12+34j)
>>> 1_2.3_45
12.345
2.字符串
在Python中,没有字符常量和变量的概念,只有字符串类型的常量和变量,单个字符也是字符串。使用单引号、双引号、三单引号、三双引号作为定界符(delimiter)来表示字符串,并且不同的定界符之间可以互相嵌套。
Python 3.x全面支持中文,中文和英文字母都作为一个字符对待,甚至可以使用中文作为变量名。
除了支持使用加号运算符连接字符串以外,Python字符串还提供了大量的方法支持格式化、查找、替换、排版等操作。
>>> x = 'Hello world.' #使用单引号作为定界符
>>> x = "Python is a greatlanguage." #使用双引号作为定界符
>>> x = '''Tom said, "Let'sgo."''' #不同定界符之间可以互相嵌套
>>> print(x)
Tom said, "Let's go."
>>> x = 'good ' + 'morning' #连接字符串
>>> x
'good morning'
>>> x = 'good ''morning' #连接字符串,仅适用于字符串常量
>>> x
'good morning'
>>> x = 'good '
>>> x = x'morning' #不适用于字符串变量
SyntaxError:
invalid syntax
>>> x = x + 'morning' #字符串变量之间的连接可以使用加号
>>> x
'good morning'
3.python运算符及表达式
在Python中,单个常量或变量可以看作最简单的表达式,使用除赋值运算符之外的其他任意运算符和函数调用连接的式子也属于表达式。
运算符优先级遵循的规则为:算术运算符优先级最高,其次是位运算符、成员测试运算符、关系运算符、逻辑运算符等,算术运算符遵循“先乘除,后加减”的基本运算原则。
虽然Python运算符有一套严格的优先级规则,但是强烈建议在编写复杂表达式时使用圆括号来明确说明其中的逻辑来提高代码可读性。
(1)+运算符除了用于算术加法以外,还可以用于列表、元组、字符串的连接,但不支持不同类型的对象之间相加或连接。
>>> [1, 2, 3] + [4, 5, 6] #连接两个列表
[1, 2, 3, 4, 5, 6]
>>> (1, 2, 3) + (4,) #连接两个元组
(1, 2, 3, 4)
>>> 'abcd' +'1234' #连接两个字符串
'abcd1234'
>>> 'A' + 1 #不支持字符与数字相加,抛出异常
TypeError:
Can't convert 'int'
object to str implicitly
>>> True + 3 #Python内部把True当作1处理
4
>>> False + 3 #把False当作0处理
3
(2)*运算符除了表示算术乘法,还可用于列表、元组、字符串这几个序列类型与整数的乘法,表示序列元素的重复,生成新的序列对象。字典和集合不支持与整数的相乘,因为其中的元素是不允许重复的。
>>>
True * 3
3
>>>
False * 3
0
>>>
[1, 2, 3] * 3
[1,
2, 3, 1, 2, 3, 1, 2, 3]
>>>
(1, 2, 3) * 3
(1,
2, 3, 1, 2, 3, 1, 2, 3)
>>>
'abc'
* 3
'abcabcabc'
(3)运算符/和//在Python中分别表示算术除法和算术求整商(floor division)。
>>> 3 / 2 #数学意义上的除法
1.5
>>> 15 // 4 #如果两个操作数都是整数,结果为整数
3
>>> 15.0 // 4 #如果操作数中有实数,结果为实数形式的整数值
3.0
>>> -15//4 #向下取整
-4
(4)%运算符可以用于整数或实数的求余数运算,还可以用于字符串格式化,但是这种用法并不推荐。
>>>789 % 23 #余数
7
>>>123.45 % 3.2 #可以对实数进行余数运算,注意精度问题
1.849999999999996
>>>'%c, %d' % (65, 65) #把65分别格式化为字符和整数
'A,
65'
>>>
'%f,%s'% (65, 65) #把65分别格式化为实数和字符串
'65.000000,65'
(5)**运算符表示幂乘:
>>> 3 ** 2 #3的2次方,等价于pow(3, 2)
9
>>> pow(3,2, 8) #等价于(3**2)
% 8
1
>>> 9 ** 0.5 #9的0.5次方,平方根
3.0
>>> (-9) ** 0.5 #可以计算负数的平方根
(1.8369701987210297e-16+3j)
4.关系运算符
Python关系运算符最大的特点是可以连用。使用关系运算符的一个最重要的前提是,操作数之间必须可比较大小。
>>> 1 < 3 < 5 #等价于1 < 3 and 3 < 5
True
>>> 3 < 5 > 2
True
>>> 1 > 6 < 8
False
>>> 1 > 6 < math.sqrt(9) #具有惰性求值或者逻辑短路的特点
False
>>> 1 < 6 < math.sqrt(9) #还没有导入math模块,抛出异常
NameError:
name 'math' is not defined
>>> import math
>>> 1 < 6 < math.sqrt(9)
False
>>> 'Hello' > 'world' #比较字符串大小
False
>>> [1, 2, 3] < [1, 2,4] #比较列表大小
True
>>> 'Hello' > 3 #字符串和数字不能比较
TypeError:
unorderable types: str()
> int()
>>> {1, 2, 3} < {1, 2, 3,4} #测试是否子集
True
>>> {1, 2, 3} == {3, 2, 1} #测试两个集合是否相等
True
>>> {1, 2, 4} > {1, 2,3} #集合之间的包含测试
False
>>> {1, 2, 4} < {1, 2, 3}
False
>>> {1, 2, 4} == {1, 2, 3}
False
4.成员测试运算符in
成员测试运算符in用于成员测试,即测试一个对象是否为另一个对象的元素。
>>> 3 in [1, 2, 3] #测试3是否存在于列表[1, 2, 3]中
True
>>> 5 in range(1, 10, 1) #range()是用来生成指定范围数字的内置函数
True
>>> 'abc' in
'abcdefg' #子字符串测试
True
>>> for iin(3, 5, 7): #循环,成员遍历
print(i,
end='\t')
3 5 7
�5.集合运算符
集合的交集、并集、对称差集等运算借助于&、|、^来实现,而差集则使用减号运算符实现(注意,并集运算符不是加号)。
>>> {1, 2, 3} | {3, 4, 5} #并集,自动去除重复元素
{1, 2, 3, 4, 5}
>>> {1, 2, 3} & {3, 4,5} #交集
{3}
>>> {1, 2, 3} ^ {3, 4, 5} #对称差集
{1, 2, 4, 5}
>>> {1, 2, 3} - {3, 4, 5} #差集
{1, 2}
6.逻辑运算符
逻辑运算符and、or、not常用来连接条件表达式构成更加复杂的条件表达式,并且and和or具有惰性求值或逻辑短路的特点,当连接多个表达式时只计算必须要计算的值。
另外要注意的是,运算符and和or并不一定会返回True或False,而是得到最后一个被计算的表达式的值,但是运算符not一定会返回True或False。
>>> 3>5 and a>3 #注意,此时并没有定义变量a
False
>>> 3>5 or a>3 #3>5的值为False,所以需要计算后面表达式
NameError:
name 'a' is not defined
>>> 3<5 or a>3 #3<5的值为True,不需要计算后面表达式
True
>>> 3 and 5 #最后一个计算的表达式的值作为整个表达式的值
5
>>> 3 and 5>2
True
>>> 3 not in [1, 2, 3] #逻辑非运算not
False
>>> 3 is not 5 #not的计算结果只能是True或False之一
True
>>> not 3
False
>>> not 0
True
Python还有赋值运算符=和+=、-=、*=、/=、//=、**=、|=、^=等大量复合赋值运算符。
Python不支持++和--运算符,虽然在形式上有时候似乎可以这样用,但实际上是另外的含义,要注意和其他语言的区别。
>>> i = 3
>>> ++i #正正得正
3
>>> +(+3) #与++i等价
3
>>> i++ #Python不支持++运算符,语法错误
SyntaxError:
invalid syntax
>>> --i #负负得正,等价于-(-i)
3
>>> ---i #等价于-(-(-i))
-3
>>> i-- #Python不支持--运算符,语法错误
SyntaxError:
invalid syntax