专业编程基础技术教程

网站首页 > 基础教程 正文

Python3 operator 模块 python中operator模块

ccvgpt 2024-10-31 12:34:49 基础教程 7 ℃

平时我们使用+-*、来实现加法减少乘法除法,用><=来 实现比较 操作,其实在Python中这些运算符都有对应 的函数替代写法。


Python3 operator 模块 python中operator模块

operator 模块包含的方法

 
import operator 
a =1
b =3 
result =  operator.lt(a, b)
print(result)
result =     operator.le(a, b)
print(result)
result =     operator.eq(a, b)
print(result)
result =     operator.ne(a, b)
print(result)
result =     operator.ge(a, b)
print(result)
result =    operator.gt(a, b)
print(result)
result =    operator.__lt__(a, b)
print(result)
result =   operator.__le__(a, b)
print(result)
result =    operator.__eq__(a, b)
print(result)
result =    operator.__ne__(a, b)
print(result)
result =    operator.__ge__(a, b)
print(result)
result =    operator.__gt__(a, b)
print(result)
True
True
False
True
False
False
True
True
False
True
False
False

比较两个列表:

# 导入 operator 模块
import operator
a = [1, 2]
b = [2, 3]
c = [2, 3]
print("operator.eq(a,b): ", operator.eq(a,b))
print("operator.eq(c,b): ", operator.eq(c,b))

运算符函数

operator 模块提供了一套与 Python 的内置运算符对应的高效率函数。例如,operator.add(x, y) 与表达式 x+y 相同。

实际上平时很多运算符可以用对应的函数替换

运算

语法

函数

加法

a + b

add(a, b)

字符串拼接

seq1 + seq2

concat(seq1, seq2)

包含测试

obj in seq

contains(seq, obj)

除法

a / b

truediv(a, b)

除法

a // b

floordiv(a, b)

按位与

a & b

and_(a, b)

按位异或

a ^ b

xor(a, b)

按位取反

~ a

invert(a)

按位或

a | b

or_(a, b)

取幂

a ** b

pow(a, b)

标识

a is b

is_(a, b)

标识

a is not b

is_not(a, b)

索引赋值

obj[k] = v

setitem(obj, k, v)

索引删除

del obj[k]

delitem(obj, k)

索引取值

obj[k]

getitem(obj, k)

左移

a << b

lshift(a, b)

取模

a % b

mod(a, b)

乘法

a * b

mul(a, b)

矩阵乘法

a @ b

matmul(a, b)

取反(算术)

- a

neg(a)

取反(逻辑)

not a

not_(a)

正数

+ a

pos(a)

右移

a >> b

rshift(a, b)

切片赋值

seq[i:j] = values

setitem(seq, slice(i, j), values)

切片删除

del seq[i:j]

delitem(seq, slice(i, j))

切片取值

seq[i:j]

getitem(seq, slice(i, j))

字符串格式化

s % obj

mod(s, obj)

减法

a - b

sub(a, b)

真值测试

obj

truth(obj)

比较

a < b

lt(a, b)

比较

a <= b

le(a, b)

相等

a == b

eq(a, b)

不等

a != b

ne(a, b)

比较

a >= b

ge(a, b)

比较

a > b

gt(a, b)

接着我们写代码对比一下

>>> import operator
>>> operators = {
...     "+": operator.add,
...     "-": operator.sub,
...     "*": operator.mul,
...     "/": operator.truediv,
... }

>>> def perform_operation(op_string, number1, number2):
...     return operators[op_string](number1, number2)
...

>>> perform_operation("-", 10, 5)
5

也可以自己实现四则运算

>>> operators = {
...     "+": lambda a, b: a + b,
...     "-": lambda a, b: a - b,
...     "*": lambda a, b: a * b,
...     "/": lambda a, b: a / b,
... }

使用 methodcaller(调用对象的方法

>>> from dataclasses import dataclass

>>> @dataclass
... class Musician:
...     id: int
...     fname: str
...     lname: str
...     group: str
...
...     def get_full_name(self, last_name_first=False):
...         if last_name_first:
...             return f"{self.lname}, {self.fname}"
...         return f"{self.fname} {self.lname}"

调用 get_full_name方法的推优,不通过ojb.methondname()的方式

>>> import operator
>>> first_last = operator.methodcaller("get_full_name")
>>> for person in group_members:
...     print(first_last(person))
...
Brian Wilson
Carl Wilson
Dennis Wilson
Bruce Johnston
Hank Marvin
Bruce Welch

如果大家用过这种方式,其实有点像Java编程语言的反射

Tags:

最近发表
标签列表