- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python中functools模块的常用函数解析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1.partial 首先是partial函数,它可以重新绑定函数的可选参数,生成一个callable的partial对象:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
>>>
int
(
'10'
)
# 实际上等同于int('10', base=10)和int('10', 10)
10
>>>
int
(
'10'
,
2
)
# 实际上是int('10', base=2)的缩写
2
>>>
from
functools
import
partial
>>> int2
=
partial(
int
,
2
)
# 这里我没写base,结果就出错了
>>> int2(
'10'
)
Traceback (most recent call last):
File
"<stdin>"
, line
1
,
in
<module>
TypeError: an integer
is
required
>>> int2
=
partial(
int
, base
=
2
)
# 把base参数绑定在int2这个函数里
>>> int2(
'10'
)
# 现在缺省参数base被设为2了
2
>>> int2(
'10'
,
3
)
# 没加base,结果又出错了
Traceback (most recent call last):
File
"<stdin>"
, line
1
,
in
<module>
TypeError: keyword parameter
'base'
was given by position
and
by name
>>> int2(
'10'
, base
=
3
)
3
>>>
type
(int2)
<
type
'functools.partial'
>
|
从中可以看出,唯一要注意的是可选参数必须写出参数名.
2.update_wrapper 接着是update_wrapper函数,它可以把被封装函数的__name__、__module__、__doc__和 __dict__都复制到封装函数去:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#-*- coding: gbk -*-
def
thisIsliving(fun):
def
living(
*
args,
*
*
kw):
return
fun(
*
args,
*
*
kw)
+
'活着就是吃嘛。'
return
living
@thisIsliving
def
whatIsLiving():
"什么是活着"
return
'对啊,怎样才算活着呢?'
print
whatIsLiving()
print
whatIsLiving.__doc__
print
from
functools
import
update_wrapper
def
thisIsliving(fun):
def
living(
*
args,
*
*
kw):
return
fun(
*
args,
*
*
kw)
+
'活着就是吃嘛。'
return
update_wrapper(living, fun)
@thisIsliving
def
whatIsLiving():
"什么是活着"
return
'对啊,怎样才算活着呢?'
print
whatIsLiving()
print
whatIsLiving.__doc__
|
结果:
1
2
3
4
5
|
对啊,怎样才算活着呢?活着就是吃嘛。
None
对啊,怎样才算活着呢?活着就是吃嘛。
什么是活着
|
不过也没多大用处,毕竟只是少写了4行赋值语句而已.
3.wraps 再有是wraps函数,它将update_wrapper也封装了进来:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#-*- coding: gbk -*-
from
functools
import
wraps
def
thisIsliving(fun):
@wraps
(fun)
def
living(
*
args,
*
*
kw):
return
fun(
*
args,
*
*
kw)
+
'活着就是吃嘛。'
return
living
@thisIsliving
def
whatIsLiving():
"什么是活着"
return
'对啊,怎样才算活着呢?'
print
whatIsLiving()
print
whatIsLiving.__doc__
|
结果还是一样的:
1
2
|
对啊,怎样才算活着呢?活着就是吃嘛。
什么是活着
|
4.total_ordering 最后至于total_ordering函数则给予类丰富的排序方法,使用装饰器简化了操作。如果使用必须在类里面定义一个__lt__(),__le__(), __gt__(), 或__ge__()。应该给类添加一个__eq__() 方法.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
from
functools
import
total_ordering
@total_ordering
class
Student(
object
):
def
__init__(
self
, name):
self
.name
=
name
def
__eq__(
self
, other):
return
self
.name.lower()
=
=
other.name.lower()
def
__lt__(
self
, other):
return
self
.name.lower() < other.name.lower()
a
=
Student(
'dan'
)
b
=
Student(
'mink'
)
print
a > b
print
a
print
sorted
([b, a])
|
打印结果 。
1
2
3
|
False
<__main__.Student object at 0x7f16ecb194d0>
[<__main__.Student object at 0x7f16ecb194d0>, <__main__.Student object at 0x7f16ecb195d0>]
|
最后此篇关于Python中functools模块的常用函数解析的文章就讲到这里了,如果你想了解更多关于Python中functools模块的常用函数解析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
本文主要给大家介绍Mysql数据库分库和分表方式(常用),涉及到mysql数据库相关知识,对mysql数据库分库分表相关知识感兴趣的朋友一起学习吧 1 分库 1.1 按照功能分库 按照功能进行
在当前对象由其他包含对象操作的系统中,当传递对当前对象的引用时,链接似乎一直在继续......没有任何结束(对于下面的代码,Car ->myCurrentComponent->myCar_Brake-
我有一个密码 UIAlertView,我们要求用户提供。我需要根据情况在不同的 View 上询问它,从 downloadViewController (用户下载数据后),当他们切换到他们的数据时(如果
我正在尝试编写一个函数,使得对于任何整数 x 的 P(x) 都有一个包含三个元素的列表,即平方、立方和 n 的四次方,但我仍然不知道如何组合然后制作一个函数,例如我有平方、立方体和 4 次幂函数下面是
关闭。这个问题需要更多 focused .它目前不接受答案。 关闭4年前。 锁定。这个问题及其答案是locked因为这个问题是题外话,但具有历史意义。它目前不接受新的答案或交互。 我能否列出一份常见的
Python 常用 PEP8 编码规范 代码布局 缩进 每级缩进用4个空格。 括号中使用垂直隐式缩进或使用悬挂缩进。 EXAMPLE: ?
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 去年关闭。 Improve this questio
在经典 ui 中,您可以使用 xtype:cqinclude 包含来自不同路径的 rtePlugins,基本上为标准 RTE 插件创建一个位置,我如何在 Touch UI 中执行相同操作? 我尝试使用
在经典 ui 中,您可以使用 xtype:cqinclude 包含来自不同路径的 rtePlugins,基本上为标准 RTE 插件创建一个位置,我如何在 Touch UI 中执行相同操作? 我尝试使用
*strong text*我有多个网络应用程序使用了一些常见的依赖项,比如蒙戈连接器谷歌 Guava 乔达时间 我想到将它们从 webapp/WEB-INF/lib 中取出并放入一些 common-l
我正在编写一个 Web 服务器,我想知道哪些 HTTP 请求 header (由客户端发送)是最常见的,因此我应该重点实现。 目前,我只支持Accept 和Host。 最佳答案 不确定您的范围,但由于
我是一名优秀的程序员,十分优秀!