读书人

关于Python中函数作为参数的有关问题

发布时间: 2012-11-01 11:11:33 作者: rapoo

关于Python中函数作为参数的问题
最近在看关于Python关于图像处理方面的内容,我用的是PIL库(Python Image Library)。
在做灰度变换时,我用了Image类的eval函数,这个函数要求传入一个Image对象和一个function,其中function要带一个参数,eval可以将这个function用于计算所有的像素点。现在问题来了,比如我要做一个对数变换,用一个s = c * math.log(1 + r, base)这样的函数(其中r代表灰度值),我必须在函数内部定义好c和base的值,再把函数传递给eval才能正确运行。
如果我想将这个函数定义为带3个参数,第一个用于像素点操作,其它两个用于控制c和base,我该怎么进行传递?(我尝试了用foo(p,c=1,base=10)这样的传递方式,但输入后shell报错)希望各位牛人能帮帮我啊!!

[解决办法]
奇怪你为什么要用eval(),这是用来得到一个表达式的值的
有了PIL,可以将整个图像读入,你定义好变换函数,将像素值直接传递给函数即可
[解决办法]
输入后shell报错?
什么错?
[解决办法]
约定好1个参数的函数,不能改成3个吧,不过你可以动态生成一个函数,类似:

Python code
import mathdef foo(c=1, base=10):    def bar(x):        res= c * math.log(x, base)        print '%d x log%d(%d) = %g' % (c, base, x, res)            return bar    f1 = foo()f2 = foo(2, 5)f1(100)f2(25)
[解决办法]
out = Image.eval(im,log)

改为:
c,base = 1,2
out = Image.eval(im, int(c * math.log(r+1, base)))

需要事先定义下c和base还有r,当然,也可以一样当作默认参数传进父方法

读书人网 >perl python

热点推荐