首页 / PYTHON / python中的内联回调函数
python中的内联回调函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python中的内联回调函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3097字,纯文字阅读大概需要5分钟。
内容图文
![python中的内联回调函数](/upload/InfoBanner/zyjiaocheng/750/c540472f2e6f483abfbb385e961f3fde.jpg)
我希望能够定义一个python函数,它执行某种数据结构遍历并在每一步执行一些操作(在回调中定义).这是一个简单的例子来说明.
def min_value(list):
m = 0
for i in range(0, len(list)):
if list[i] < m: m = list[i]
return m
这个例子很简单,但如果我遍历一个n维数组,一个numpy数组,或者我想定义一个更复杂的步进数据结构的方法,那么这个例子会变得更加复杂.
我正在寻找以下JavaScript的“pythonic”类似物,它做同样的事情.
traverse = function(list, callback) {
for(i = 0; i < list.length; i++) {
callback(list[i])
}
}
min_value = function(list) {
m = 0
traverse(list, function(element) {
if(element < m) m = element
});
}
如果我想要一个函数max_value(list),那么能够将一行调整为if(element> m)m = element而不必复制/粘贴我的遍历函数是很方便的.在python中执行此操作的最佳方法是什么?
编辑(答案):在这里,我使用下面接受的答案来说明我的原始JS示例如何在python 3中编写.显然有更好的方法来查找标量列表的最小值,但这是我的模式寻找.
def traverse(list, callback):
for i in range(0, len(list)):
callback(list[i])
def min_value(list):
m = 0
def update_min(val):
nonlocal m
if(val < m): m = val
traverse(list, update_min)
return m
编辑(复杂示例):这是我的用例的更复杂和直接的示例.我有一个图像,我想在图像的“焦点区域”进行一些处理.比方说,我想找到图像中最暗的10×10,20×20,30×30等像素区域.我的图像是一个numpy数组.我将使用“混蛋”多线lambda来说明我想做的事情,尽管据我所知,lambdas不能以这种方式使用.
在python中:
# find the coordinates and of darkest region
def darkest_region(image, fsize):
darkest_coords = [0, 0]
darkest_avg = 256
# illegal lambda
g = lambda x, y, r:
# r is an fsize x fsize region
avg_darkness = # blah blah, traverse and average pixels
if(avg_darkness < darkest_avg): darkest_coords = [x, y]
focus_scan(image, fsize, g)
return darkest_coords
# scan all regions of fsize x fsize
def focus_scan(image, fsize, callback):
height, width = image.shape[:2]
for y in range(0, height - fsize):
for x in range(0, width - fsize):
focus = image[y:y+fsize, x:x+fsize]
callback(x, y, focus)
鉴于我不能拥有这样的多行lambda,我认为我需要做的是使用focus_scan的参数和返回值,以便适应各种可能的输入/输出.在这个例子中,我可以传递焦点扫描darkest_avg并让它返回我正在寻找的坐标,但我可能想要传递除标量以外的其他东西,或者让它返回更复杂的数据结构.我想我必须做的事情如下:
def focus_scan(image, fsize, callback, args):
... # loopy loops
some_result = callback([x, y, focus], args)
return some_result
我喜欢我可以在其他编程语言中使用的内联函数方法,但它看起来不像是python中的常见模式.
解决方法:
只需使用普通函数而不是多行lambda.要访问darkest_coords变量,可以在Python 3中使用nonlocal关键字.在Python 2中,您必须改变列表,因为nonlocal关键字不可用.
def darkest_region(image, fsize):
"""Find the coordinates of darkest region."""
darkest_coords = [0, 0]
darkest_avg = 256
def g(x, y, r):
nonlocal darkest_coords
# r is an fsize x fsize region
avg_darkness = # blah blah, traverse and average pixels
if avg_darkness < darkest_avg:
darkest_coords = [x, y]
focus_scan(image, fsize, g)
return darkest_coords
def focus_scan(image, fsize, callback):
"""Scan all regions of fsize x fsize."""
height, width = image.shape[:2]
for y in range(0, height - fsize):
for x in range(0, width - fsize):
focus = image[y:y+fsize, x:x+fsize]
callback(x, y, focus)
内容总结
以上是互联网集市为您收集整理的python中的内联回调函数全部内容,希望文章能够帮你解决python中的内联回调函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。