Проблема при использовании набора инструментов Python xoltar, ошибка, возникающая при использовании закрытия - PullRequest
1 голос
/ 09 июля 2011

Недавно я читал некоторые материалы о функциональном программировании на Python, один из них здесь: http://www.ibm.com/developerworks/linux/library/l-prog2/index.html

Я набираю код:

from functional import *

taxdue        = lambda: (income-deduct)*rate
incomeClosure = lambda income,taxdue: closure(taxdue)
deductClosure = lambda deduct,taxdue: closure(taxdue)
rateClosure   = lambda rate,taxdue: closure(taxdue)

taxFP = taxdue
taxFP = incomeClosure(50000,taxFP)
taxFP = rateClosure(0.30,taxFP)
taxFP = deductClosure(10000,taxFP)

print"Functional taxes due =",taxFP()

print"Lisp-style taxes due =", \
      incomeClosure(50000,
          rateClosure(0.30,
              deductClosure(10000, taxdue)))()

, но в итогеСледующая информация об ошибке:

Functional taxes due =
Traceback (most recent call last):
  File "E:/Study/python/FP/FP1.py", line 16, in <module>
    print"Functional taxes due =",taxFP()
  File "E:/Study/python/FP/FP1.py", line 5, in <lambda>
    taxdue =        lambda: (income-deduct)*rate
NameError: global name 'income' is not defined

Я использую Python 2.7.1, я хочу знать, в чем проблема, заранее спасибо.

1 Ответ

0 голосов
/ 09 июля 2011

Проблема в том, что переменные income, deduct и rate нигде не определены, когда вы делаете lambda: (income-deduct)*rate.

Может быть, вы намеревались сделать их параметрами лямбды?

...