>>> car =
lambda
lst: lst[0]
>>> cdr =
lambda
lst: lst[1:]
>>> sum2 =
lambda
lst: car(lst)+car(cdr(lst))
>>> sum2(range(10))
1
>>> car =
lambda
lst: lst[2]
>>> sum2(range(10))
5
>>>
from
functional
import
*
>>> let = Bindings()
>>> let.car =
lambda
lst: lst[0]
>>> let.car =
lambda
lst: lst[2]
Traceback (innermost last):
File "<stdin>", line 1,
in
?
File "d:\tools\functional.py", line 976,
in
__setattr__
raise
BindingError, "Binding '%s' cannot be modified." % name
functional.BindingError: Binding 'car' cannot be modified.
>>> car(range(10))
0
>>> let = Bindings()
# "Real world" function names
>>> let.r10 = range(10)
>>> let.car =
lambda
lst: lst[0]
>>> let.cdr =
lambda
lst: lst[1:]
>>> eval('car(r10)+car(cdr(r10))', namespace(let))
>>> inv = Bindings()
# "Inverted list" function names
>>> inv.r10 = let.r10
>>> inv.car =
lambda
lst: lst[-1]
>>> inv.cdr =
lambda
lst: lst[:-1]
>>> eval('car(r10)+car(cdr(r10))', namespace(inv))
17
>>>
defa
(n):
... add7 = b(n)
...
return
add7
...
>>>
defb
(n):
... i = 7
... j = c(i,n)
...
return
j
...
>>>
defc
(i,n):
...
return
i+n
...
>>> a(10)
# Pass cargo value for use downstream
17
>>> N = 10
>>>
defaddN
(i):
...
global
N
...
return
i+N
...
>>> addN(7)
# Add global N to argument
17
>>> N = 20
>>> addN(6)
# Add global N to argument
26
全局变量 N 在任何希望调用 addN() 的时候起作用,但没有必要明确地传递全局背景“上下文”。另一个更 Python 专用的技术是将一个变量在定义时“冻结”入一个使用默认参数的函数:
清单 6. 显示冻结变量的 Python 部分
>>> N = 10
>>>
defaddN
(i, n=N):
...
return
i+n
...
>>> addN(5)
# Add 10
15
>>> N = 20
>>> addN(6)
# Add 10 (current N doesn't matter)
16
class
TaxCalc:
deftaxdue
(self):
return
(self.income-self.deduct)*self.rate
taxclass = TaxCalc()
taxclass.income = 50000
taxclass.rate = 0.30
taxclass.deduct = 10000
print
"Pythonic OOP taxes due =", taxclass.taxdue()
class
TaxCalc:
deftaxdue
(self):
return
(self.income-self.deduct)*self.rate
defsetIncome
(self,income):
self.income = income
return
self
defsetDeduct
(self,deduct):
self.deduct = deduct
return
self
defsetRate
(self,rate):
self.rate = rate
return
self
print
"Smalltalk-style taxes due =", \
TaxCalc().setIncome(50000).setRate(0.30).setDeduct(10000).taxdue()
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)))()
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有