《Python参考手册》4 运算符与表达式

4.0

以下内容是Python内置的运算符、表达式和求值规则。

4.1 数值操作

所有数值操作都支持:

操作描述底层
x + y__add__
x - y__sub__
x * y__mul__
x / y除法,结果浮点数__truediv__
x // y除法,整数部分__floordiv__
x ** y x y x^y xy__pow__
x % y除法的余数__mod__
-x__neg__
+x__pos__

只有整数支持的操作:

操作描述底层
x << y左移__lshift__
x >> y右移__rshift__
x & y按位与__and__
xy按位或
x ^ y按位异或__xor__
-x按位求反__invert__

一些内置函数支持所有数值类型:

操作描述底层
abs(x)绝对值__abs__
divmod(x,y)返回(x//y,x%y)__divmod__
pow(x,y [,modulo])返回(x ** y) % modulo
round(x[,n])四舍五入位接近 1 0 − n 10^{-n} 10n的倍数,n即有效数字

python3中四舍五入优先选择偶数倍:

0.5 -> 0
1.5 -> 2

4.2 序列操作

序列类型(字符串,列表,元组)都支持以下操作:

操作描述
s+r连接
s*n制作s的n个副本
v1,v2,..,vn=s解包,个数要严格匹配
s[i]索引
s[i:j [,stride]]切片,默认i=0,j=-1,stride=1
x in s,x not in s成员关系
for x in s:迭代
all(s)如果s中所有项都为True,则返回True
len(s)长度
min(s)
max(s)
sum(s [,init])求和

请注意扩展切片nums[::stride]:

  • stride>0,默认i=0,j=-1
  • stride<0,默认i=-1,j=0

举一例:

nums=[1,2,3]

print(nums[:]) # [1,2,3]
print(nums[::-1]) #[3,2,1] 

copyc=nums*2
nums[0]=2
print(copyc) #[1, 2, 3, 1, 2, 3]

b=[nums]
copyd=b*2
nums[0]=3
print(copyd) #[[3, 2, 3], [3, 2, 3]]

除非使用copy.deepcopy序列的副本都是浅复制。copyc[0]之所以不变,是因为数字1不是一个可变对象。对象b是一个列表,长度为1,它的元素是一个列表,可以认为copyd的元素也没有发生变化,而元素的元素发生了变化。
通常这不符合开发人员本意,通常要使用以下方式(手动复制):


copyd=[list(nums) for j in range(4)]

修改操作:

操作描述
s[i]=x赋值
s[i:j [,stride] ]=r切片赋值,r必须是一个序列
del s[i]删除
del s[i:j [,stride]]删除切片
a=[0,1,2,3,4]
# 请注意以下两种操作的区别
a[0]=[0,0,0]
print(a) # [[0, 0, 0], 1, 2, 3, 4]

a[0:1]=[0,0,0]
print(a) # [0, 0, 0, 1, 2, 3, 4]

当切片赋值时,会根据右侧序列的的元素插入序列中。

序列支持比较操作(>,<,>=,<=,==,!=):
他们的比较方式是遍历按元素比较。类似于字符串比较的方式。

4.3 字符串格式化

s % d可生成格式化的字符串。其中s是一个格式字符串,d是一个对象元组或映射对象(字典)。
请注意转换字符的类型也是以%开头,如Her name is %s % ('Lucy')

d={
    "name":"lucy",
    "age":18
}

print("Her name is %(name)s" % d )


name='Lily'
print("Her name is %(name)s" % vars()) 

vars()会返回当前定义的变量

4.4 高级字符串格式化

高级字符串就是使用s.format(* args,**kwargs)方法。用法非常多,主要的形式举例说明.

d={
    "name":"lucy",
    "age":18
}
e_dict={
    "name":"tom",
    "age":18
}

# 1 按照参数顺序对应
s="{0}{1}{2}".format(1,2,3)
print(s)
# 2 按照字典的key对应
s="name is {name}".format(name='lucy')
print(s)
# 3 按照参数顺序对应一个字典对象
s="name is {0[name]} , {1[name]}".format(d,e_dict)
print(s)
# 4 根据参数顺序对应一个序列,然后根据序号索引
s="name is {0[1]}".format(["Lily","Lucy"])

4.4 字典操作

字典dict支持的操作如下:

操作描述
x=d[key]索引
d[key]=x赋值
del d[key]删除
key in d某键是否在字典中
len(d)
d={}
d[1,2,3]="foo" # 1,2,3 就是元组
print(d)

>>
{(1, 2, 3): 'foo'}

4.5 集合操作

setfrozenset支持大量常见集合操作:

操作描述
s | t并集
s & t交集
s-t差集
s^t对称差集
len(s)
max(s)
min(s)

s | t:结果与s具有相同的类型。

4.6 增量赋值

万恶的缩写:

操作描述
x += yx = x + y
x -= yx = x - y
x *= yx =x * y
x /= yx =x / y
x //= yx =x // y
x **= yx =x ** y
x %= yx =x % y
x &= yx =x & y
x |= yx = x | y
x ^= yx =x ^ y
x >>= yx = x >> y
x <<= yx =x << y

注意:增量赋值不回违反可变性,也不会原地修改对象。x+y是创建一个新的对象。

4.7 属性(.)运算

访问对象的属性:

print(foo.x)

4.8 函数调用()运算符

import functools
def foo(x,y,z):
    return x+y+z

f=functools.partial(foo,1,2)
print(f(3))

>>
6

4.9 转换函数

函数描述
in(x[,base])x转换为一个整数,basex的进制
float(x)
Complex(real[,imag])创建一个复数
str(x)对象的字符串表示
repr(x)对象的表达式字符串
format(x[,format_spec])对象的格式化字符串
eval(str)字符串转化为对象
tuple(s)s转化成元组
list(s)
set(s)
dict(d)
frozenset(s)
chr(x)转化成字符
ord(x)字符转化成整数值
hex(x)整数转化成16进制字符串
bin(x)
oct(x)

4.10 bool表达式与真值

运算符描述
x or y
x and y
not x

python不用|,&等构建布尔表达式。

4.11 对象等同性与标识

python中表达对象是否相同有不同的含义:

  • x==y,它用于判断对象的值是否相等(equal)
  • x is y,x is not y,它用于判断是否内存中同一个对象。

4.12 简化条件表达式

values=[1,11,25,23,17,2,3,4,5,6,7,8,9]

new_values=[x if x<10 else 10 for x in values]

print(new_values)

>>
[1, 10, 10, 10, 10, 2, 3, 4, 5, 6, 7, 8, 9]
x=9
if x>10:
    y=10
else :
    y=x

z=10 if x>10 else x
print(y==z)

>>
True
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值