On 03/25/2015 10:29 AM, Manuel Graune wrote:
Hi,

I'm looking for a way to supply a condition to an if-statement inside a
function body when calling the function. I can sort of get what I want
with using eval (see code below) but I would like to achieve this in a
safer way. If there is a solution which is safer while being
less flexible, that would be fine. Also, supplying the condition as a
string is not necessary. What I want to do is basically like this:

def test1(a, b, condition="True"):
     for i,j in zip(a,b):
         c=i+j
         if eval(condition):
            print("Foo")

test1([0,1,2,3],[1,2,3,4],"i+j >4")
print("Bar")
test1([0,1,2,3],[1,2,3,4],"c >4")
print("Bar")
test1([0,1,2,3],[1,2,3,4],"a[i] >2")
print("Bar")
test1([0,1,2,3],[1,2,3,4])



This is nicely done with lambda expressions:

To pass in a condition as a function:
   test1([0,1,2,3],[1,2,3,4], lambda i,j: i+j<4)

To check the condition in the function:
    if condition(i,j):

To get the full range of conditions, you will need to include all the variables 
needed by any condition you can imagine.  So the above suggestions may need to 
be expanded to:
 ... lambda i,j,a,b: ... or whatever

and
  ... condition(i,j,a,b) ... or whatever

If any of your conditions gets too long/complex for a lambda (or you just don't 
like Python's lambda expressions), then just create a function for your 
condition:

  def cond1(i,j,a,b):
      return i+j>4

and do
   test1(..., cond1)
and
    if condition(i,j,a,b):




--
Dr. Gary Herron
Department of Computer Science
DigiPen Institute of Technology
(425) 895-4418

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to