Как использовать лямбду при наличии входных данных?

#python

Вопрос:

Я новичок в python и у меня проблема с получением входных данных из лямбды. Я создал функцию для вычисления:

 def d_a():
    d_a_compute = lambda v_i, t, a: (v_i * t)   (0.5 * a) * (t ** 2)

    print("KINEMATIC EQUATIONS")
    print ("d_a = Displacement with acceleration")
    print ("v_f = Final velocity")
    print ("v_f_squared = Final velocity squared")
    print ("d = Displacement without acceleration")
    print ("t = Time")
    print ("a = Acceleration")
    print ("v_i = Initial velocity")
    print ("===================================")
    var = ["d_a", "v_f", "v_f_squared", "d", "t", "a","v_i"]
    print ("1.", var[0])
    print ("2.", var[1])
    print ("3.", var[2])
    print ("4.", var[3])
    print ("5.", var[4])
    print ("6.", var[5])
    print ("7.", var[6])
    print ("===================================")
    num = int(input("Input the number you want to compute: ")) - 1
    choice = (var[num])
    if choice == "d_a":
        float(input("Enter the initial velocity: "))
        float(input("Enter the time: "))
        float(input("Enter the acceleration: "))
 

Как вы можете видеть, я не вызывал функцию, потому что сначала хочу знать, как подключить мои входные данные к лямбде в моей функции. Я хочу , чтобы моя начальная скорость была связана с v_i и т. Д. Как я могу это сделать?

Комментарии:

1. Я отредактировал свою озабоченность. Я намеренно не вызываю эту функцию, потому что не знаю, как я могу подключить свои входные данные из лямбда.

2. Я не понял твоего вопроса. Почему бы вам просто не назначить три входных параметра переменным, а затем передать эти три переменные в качестве аргументов d_a_compute ?

Ответ №1:

Я думаю, ты сможешь это сделать … но вам, вероятно, не следует (см. PEP8 )

 # def d_a(): < you dont need(or want) this line ...
d_a_compute = lambda v_i, t, a: (v_i * t)   (0.5 * a) * (t ** 2)
...
if choice == "d_a":
   result = d_a_compute( # <- you need to actually call you lambda
     float(input("Enter the initial velocity: ")), # v_i
     float(input("Enter the time: ")),  # t
     float(input("Enter the acceleration: ")) # a
   )
   print("DA = ", result)
 

как указано в комментариях, почти наверняка более читабельно просто использовать обычную функцию здесь (на самом деле в PEP8 явно указано, что вы должны использовать определение обычной функции, а не присваивать лямбда переменной).

   def d_a_compute(v_i, t, a):
      return  (v_i * t)   (0.5 * a) * (t ** 2)
 

вместо

Комментарии:

1. Я попробовал ваш обновленный код, я не получил ошибки. Но за то, что я позвонил в d_a, я должен получить ответ или нет?

2. @TomKarzes, потому что он специально сказал, что хочет лямбду и реализовал лямбда-бит … пожалуйста, укажите, где вы видите «вы никогда не должны определять подобную функцию» … (Я в основном согласен, но я не думаю, что это какой-то смертный грех) sqrt = lambda x:x**0.5 это то, что я делал раньше

3. @JoranBeasley Привет, спасибо! Теперь я все понял! Большое вам спасибо! Ты спас меня

4. @JoranBeasley Если это так, то это вопрос x-y, и подходящим ответом является объяснение этого как такового, а не поощрение кода, который не имеет смысла.

5. @TomKarzes добавлен в мое редактирование, чтобы препятствовать этому …