- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python中operator模块的操作符使用示例总结由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
operator模块是python中内置的操作符函数接口,它定义了一些算术和比较内置操作的函数。operator模块是用c实现的,所以执行速度比python代码快.
逻辑操作 。
1
2
3
4
5
6
7
8
9
10
11
12
|
from
operator
import
*
a
=
[
1
,
2
,
3
]
b
=
a
print
'a ='
, a
print
'b ='
, b
print
print
'not_(a) :'
, not_(a)
print
'truth(a) :'
, truth(a)
print
'is_(a, b) :'
, is_(a, b)
print
'is_not(a, b) :'
, is_not(a, b)
|
打印结果:
1
2
3
4
5
6
|
a = [1, 2, 3]
b = [1, 2, 3]
not_(a) : False
truth(a) : True
is_(a, b) : True
is_not(a, b): False
|
可以通过结果知道,operator的一些操作函数与原本的运算是相同的.
比较操作符 operator提供丰富的比较操作.
1
2
3
4
5
6
7
8
|
a
=
3
b
=
5
print
'a ='
, a
print
'b ='
, b
print
for
func
in
(lt, le, eq, ne, ge, gt):
print
'{0}(a, b):'
.
format
(func.__name__), func(a, b)
|
打印结果 。
1
2
3
4
5
6
7
8
9
|
a = 3
b = 5
lt(a, b): True
le(a, b): True
eq(a, b): False
ne(a, b): True
ge(a, b): False
gt(a, b): False
|
这些函数等价于<、<=、==、>=和>的表达式语法.
算术操作符 处理数字的算术操作符也得到支持.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
a, b, c, d
=
-
1
,
2
,
-
3
,
4
print
'a ='
, a
print
'b ='
, b
print
'c ='
, c
print
'd ='
, d
print
'\nPositive/Negative:'
print
'abs(a):'
,
abs
(a)
print
'neg(a):'
, neg(a)
print
'neg(b):'
, neg(b)
print
'pos(a):'
, pos(a)
print
'pos(b):'
, pos(b)
|
打印结果 。
1
2
3
4
5
6
7
8
9
10
11
|
a = -1
b = 2
c = -3
d = 4
Positive/Negative:
abs(a): 1
neg(a): 1
neg(b): -2
pos(a): -1
pos(b): 2
|
abs返回值得绝对值,neg返回(-obj), pos返回(+obj).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
a
=
-
2
b
=
5.0
print
'a ='
, a
print
'b ='
, b
print
'\nArithmetic'
print
'add(a, b) :'
, add(a, b)
print
'div(a, b) :'
, div(a, b)
print
'floordiv(a, b) :'
, floordiv(a, b)
print
'mod(a, b) :'
, mod(a, b)
print
'mul(a, b) :'
, mul(a, b)
print
'pow(a, b) :'
,
pow
(a, b)
print
'sub(a, b) :'
, sub(a, b)
print
'truediv(a, b) :'
, truediv(a, b)
|
打印结果 。
1
2
3
4
5
6
7
8
9
10
11
12
|
a = -2
b = 5.0
Arithmetic
add(a, b) : 3.0
div(a, b) : -0.4
floordiv(a, b) : -1.0
mod(a, b) : 3.0 # 查看负数取模
mul(a, b) : -10.0
pow(a, b) : -32.0
sub(a, b) : -7.0
truediv(a, b) : -0.4
|
mod表示取模, mul 表示相乘,pow是次方, sub表示相减 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
a
=
2
b
=
6
print
'a ='
, a
print
'b ='
, b
print
'\nBitwise:'
print
'and_(a, b) :'
, and_(a, b)
print
'invert(a) :'
, invert(a)
print
'lshift(a, b) :'
, lshift(a, b)
print
'or_(a, b) :'
, or_(a, b)
print
'rshift(a, b) :'
, rshift(a, b)
print
'xor(a, b) :'
, xor(a, b)
|
打印结果 。
1
2
3
4
5
6
7
8
9
10
|
a = 2
b = 6
Bitwise:
and_(a, b) : 2
invert(a) : -3
lshift(a, b) : 128
or_(a, b) : 6
rshift(a, b) : 0
xor(a, b) : 4
|
and 表示按位与, invert 表示取反操作, lshift表示左位移, or表示按位或, rshift表示右位移,xor表示按位异或.
原地操作符 即in-place操作, x += y 等同于 x = iadd(x, y), 如果复制给其他变量比如z = iadd(x, y)等同与z = x; z += y.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
a
=
3
b
=
4
c
=
[
1
,
2
]
d
=
[
'a'
,
'b'
]
print
'a ='
, a
print
'b ='
, b
print
'c ='
, c
print
'd ='
, d
print
a
=
iadd(a, b)
print
'a = iadd(a, b) =>'
, a
print
c
=
iconcat(c, d)
print
'c = iconcat(c, d) =>'
, c
|
属性和元素的获取方法 operator模块最特别的特性之一就是获取方法的概念,获取方法是运行时构造的一些可回调对象,用来获取对象的属性或序列的内容,获取方法在处理迭代器或生成器序列的时候特别有用,它们引入的开销会大大降低lambda或Python函数的开销.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
from
operator
import
*
class
MyObj(
object
):
def
__init__(
self
, arg):
super
(MyObj,
self
).__init__()
self
.arg
=
arg
def
__repr__(
self
):
return
'MyObj(%s)'
%
self
.arg
objs
=
[MyObj(i)
for
i
in
xrange
(
5
)]
print
"Object:"
, objs
g
=
attrgetter(
"arg"
)
vals
=
[g(i)
for
i
in
objs]
print
"arg values:"
, vals
objs.reverse()
print
"reversed:"
, objs
print
"sorted:"
,
sorted
(objs, key
=
g)
|
结果:
1
2
3
4
|
Object: [MyObj(0), MyObj(1), MyObj(2), MyObj(3), MyObj(4)]
arg values: [0, 1, 2, 3, 4]
reversed: [MyObj(4), MyObj(3), MyObj(2), MyObj(1), MyObj(0)]
sorted: [MyObj(0), MyObj(1), MyObj(2), MyObj(3), MyObj(4)]
|
属性获取方法类似于 。
1
|
lambda
x, n
=
'attrname'
:
getattr
(x,nz)
|
元素获取方法类似于 。
1
|
lambda
x,y
=
5
:x[y]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from
operator
import
*
l
=
[
dict
(val
=
-
1
*
i)
for
i
in
xrange
(
4
)]
print
"dictionaries:"
, l
g
=
itemgetter(
"val"
)
vals
=
[g(i)
for
i
in
l]
print
"values: "
, vals
print
"sorted:"
,
sorted
(l, key
=
g)
l
=
[(i,i
*
-
2
)
for
i
in
xrange
(
4
)]
print
"tuples: "
, l
g
=
itemgetter(
1
)
vals
=
[g(i)
for
i
in
l]
print
"values:"
, vals
print
"sorted:"
,
sorted
(l, key
=
g)
|
结果如下:
1
2
3
4
5
6
|
dictionaries: [{'val': 0}, {'val': -1}, {'val': -2}, {'val': -3}]
values: [0, -1, -2, -3]
sorted: [{'val': -3}, {'val': -2}, {'val': -1}, {'val': 0}]
tuples: [(0, 0), (1, -2), (2, -4), (3, -6)]
values: [0, -2, -4, -6]
sorted: [(3, -6), (2, -4), (1, -2), (0, 0)]
|
除了序列之外,元素获取方法还适用于映射.
结合操作符和定制类 operator模块中的函数通过相应操作的标准Python接口完成工作,所以它们不仅适用于内置类型,还适用于用户自定义类型.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
from
operator
import
*
class
MyObj(
object
):
def
__init__(
self
, val):
super
(MyObj,
self
).__init__()
self
.val
=
val
return
def
__str__(
self
):
return
"MyObj(%s)"
%
self
.val
def
__lt__(
self
, other):
return
self
.val < other.val
def
__add__(
self
, other):
return
MyObj(
self
.val
+
other.val)
a
=
MyObj(
1
)
b
=
MyObj(
2
)
print
lt(a, b)
print
add(a,b)
|
结果如下所示:
1
2
|
True
MyObj(3)
|
类型检查 operator 模块还包含一些函数用来测试映射、数字和序列类型的API兼容性.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
from
operator
import
*
class
NoType(
object
):
pass
class
MultiType(
object
):
def
__len__(
self
):
return
0
def
__getitem__(
self
, name):
return
"mapping"
def
__int__(
self
):
return
0
o
=
NoType()
t
=
MultiType()
for
func
in
[isMappingType, isNumberType, isSequenceType]:
print
"%s(o):"
%
func.__name__, func(o)
print
"%s(t):"
%
func.__name__, func(t)
|
结果如下:
1
2
3
4
5
6
|
isMappingType(o): False
isMappingType(t): True
isNumberType(o): False
isNumberType(t): True
isSequenceType(o): False
isSequenceType(t): True
|
但是这些测试并不完善,因为借口没有严格定义.
获取对象方法 使用methodcaller可以获取对象的方法.
1
2
3
4
5
6
7
8
9
10
11
12
|
from
operator
import
methodcaller
class
Student(
object
):
def
__init__(
self
, name):
self
.name
=
name
def
getName(
self
):
return
self
.name
stu
=
Student(
"Jim"
)
func
=
methodcaller(
'getName'
)
print
func(stu)
# 输出Jim
|
还可以给方法传递参数:
1
2
3
4
5
6
7
8
|
f
=
methodcaller(
'name'
,
'foo'
, bar
=
1
)
f(b)
# return b.name('foo', bar=1)
methodcaller方法等价于下面这个函数:
def
methodcaller(name,
*
args,
*
*
kwargs):
def
caller(obj):
return
getattr
(obj, name)(
*
args,
*
*
kwargs)
return
caller
|
最后此篇关于Python中operator模块的操作符使用示例总结的文章就讲到这里了,如果你想了解更多关于Python中operator模块的操作符使用示例总结的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我最近在我的机器上安装了 cx_Oracle 模块,以便连接到远程 Oracle 数据库服务器。 (我身边没有 Oracle 客户端)。 Python:版本 2.7 x86 Oracle:版本 11.
我想从 python timeit 模块检查打印以下内容需要多少时间,如何打印, import timeit x = [x for x in range(10000)] timeit.timeit("
我盯着 vs 代码编辑器上的 java 脚本编码,当我尝试将外部模块包含到我的项目中时,代码编辑器提出了这样的建议 -->(文件是 CommonJS 模块;它可能会转换为 ES6 模块。 )..有什么
我有一个 Node 应用程序,我想在标准 ES6 模块格式中使用(即 "type": "module" in the package.json ,并始终使用 import 和 export)而不转译为
我正在学习将 BlueprintJS 合并到我的 React 网络应用程序中,并且在加载某些 CSS 模块时遇到了很多麻烦。 我已经安装了 npm install @blueprintjs/core和
我需要重构一堆具有这样的调用的文件 define(['module1','module2','module3' etc...], function(a, b, c etc...) { //bun
我是 Angular 的新手,正在学习各种教程(Codecademy、thinkster.io 等),并且已经看到了声明应用程序容器的两种方法。首先: var app = angular.module
我正在尝试将 OUnit 与 OCaml 一起使用。 单元代码源码(unit.ml)如下: open OUnit let empty_list = [] let list_a = [1;2;3] le
我在 Angular 1.x 应用程序中使用 webpack 和 ES6 模块。在我设置的 webpack.config 中: resolve: { alias: { 'angular':
internal/modules/cjs/loader.js:750 return process.dlopen(module, path.toNamespacedPath(filename));
在本教程中,您将借助示例了解 JavaScript 中的模块。 随着我们的程序变得越来越大,它可能包含许多行代码。您可以使用模块根据功能将代码分隔在单独的文件中,而不是将所有内容都放在一个文件
我想知道是否可以将此代码更改为仅调用 MyModule.RED 而不是 MyModule.COLORS.RED。我尝试将 mod 设置为变量来存储颜色,但似乎不起作用。难道是我方法不对? (funct
我有以下代码。它是一个 JavaScript 模块。 (function() { // Object var Cahootsy; Cahootsy = { hello:
关闭。这个问题是 opinion-based 。它目前不接受答案。 想要改进这个问题?更新问题,以便 editing this post 可以用事实和引文来回答它。 关闭 2 年前。 Improve
从用户的角度来看,一个模块能够通过 require 加载并返回一个 table,模块导出的接口都被定义在此 table 中(此 table 被作为一个 namespace)。所有的标准库都是模块。标
Ruby的模块非常类似类,除了: 模块不可以有实体 模块不可以有子类 模块由module...end定义. 实际上...模块的'模块类'是'类的类'这个类的父类.搞懂了吗?不懂?让我们继续看
我有一个脚本,它从 CLI 获取 3 个输入变量并将其分别插入到 3 个变量: GetOptions("old_path=s" => \$old_path, "var=s" =
我有一个简单的 python 包,其目录结构如下: wibble | |-----foo | |----ping.py | |-----bar | |----pong.py 简单的
这种语法会非常有用——这不起作用有什么原因吗?谢谢! module Foo = { let bar: string = "bar" }; let bar = Foo.bar; /* works *
我想运行一个命令: - name: install pip shell: "python {"changed": true, "cmd": "python <(curl https://boot
我是一名优秀的程序员,十分优秀!