python中函数的应用_在Python中,部分函数应用程序(curring)与显式函数定义

在Python中,是否认为更好的样式是:明确定义有用的函数,使其更通用,可能是内部使用;或者

使用部分函数应用程序显式描述函数curring?

我将用一个捏造的例子来解释我的问题。

假设有人编写了一个函数�sort�by�u scoring,它接受两个参数:scoring函数和项目列表。它返回原始列表的副本,该副本根据每个项目在原始列表中的位置按分数排序。还提供了两个示例评分函数。def _sort_by_score(scoring, items_list):

unsorted_scored_list = [(scoring(len(items_list), item_position), item) for item_position, item in enumerate(items_list)]

sorted_list = [item for score, item in sorted(unsorted_scored_list)]

return sorted_list

def _identity_scoring(items_list_size, item_position):

return item_position

def _reversed_scoring(items_list_size, item_position):

return items_list_size - item_position

函数sort_by_score从不直接调用;而是由其他单参数函数调用,这些函数将一个评分函数及其单独的参数(项目列表)传递给sort_by_score并返回结果。# Explicit function definition style

def identity_ordering(items_list):

return _sort_by_score(_identity_scoring, items_list)

def reversed_ordering(items_list):

return _sort_by_score(_reversed_scoring, items_list)

显然,这个意图最好用函数curring来表达。# Curried function definition style

import functools

identity_ordering = functools.partial(_sort_by_score, _identity_scoring)

reversed_ordering = functools.partial(_sort_by_score, _reversed_scoring)

用法(在任何情况下):>>> foo = [1, 2, 3, 4, 5]

>>> identity_ordering(foo)

[1, 2, 3, 4, 5]

>>> reversed_ordering(foo)

[5, 4, 3, 2, 1]

显式函数定义样式的明显优点:有用的函数可以在更一般的函数之前定义,而不会引起命名错误

帮助函数(例如,评分函数)可以在函数定义体中定义

可能更容易调试

由于“显式优于隐式”,代码看起来不错

当前函数定义样式的明显优势:习惯地表达函数式编程的意图

代码简洁,看起来不错。

为了定义“有用的”函数,两种样式中哪一种是首选的?有没有其他的风格更像是惯用的/Python式的/等等。?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值