您如何向知道其所包含概念的人(例如函数,变量等)解释JavaScript闭包,但不了解闭包本身?
我已经看过维基百科上给出的Scheme示例,但遗憾的是它并没有帮助.
如何在Python中创建两个装饰器来执行以下操作?
@makebold
@makeitalic
def say():
return "Hello"
Run Code Online (Sandbox Code Playgroud)
...应该返回:
"<b><i>Hello</i></b>"
Run Code Online (Sandbox Code Playgroud)
我不是试图HTML在一个真实的应用程序中这样做 - 只是试图了解装饰器和装饰器链是如何工作的.
我想弄清楚Python lambdas.lambda是现实生活中应该被遗忘的"有趣"语言项目之一吗?
我确信有一些可能需要它的边缘情况,但考虑到它的模糊性,它在未来版本中重新定义的可能性(我基于它的各种定义的假设)和降低的编码清晰度 - 应该是要避免吗?
这让我想起C类型的溢出(缓冲区溢出) - 指向顶部变量并重载以设置其他字段值.感觉就像是一种技术表演,但维护编码器的噩梦.
我问了一个关于Currying和关闭的问题.什么是关闭?它与currying有什么关系?
computer-science glossary functional-programming terminology
这似乎发生了很多,并且想知道这是否是Python语言中的要求,还是仅仅是常规问题?
此外,有人可以命名并解释哪些功能倾向于具有下划线,以及为什么(__init__例如)?
我无法理解functools中的部分工作原理.我从这里得到以下代码:
>>> sum = lambda x, y : x + y
>>> sum(1, 2)
3
>>> incr = lambda y : sum(1, y)
>>> incr(2)
3
>>> def sum2(x, y):
return x + y
>>> incr2 = functools.partial(sum2, 1)
>>> incr2(4)
5
Run Code Online (Sandbox Code Playgroud)
现在就行了
incr = lambda y : sum(1, y)
Run Code Online (Sandbox Code Playgroud)
我得到的是,无论我传递给incr它的任何论点都将被传递y给lambda哪个将返回sum(1, y)ie 1 + y.
我明白那个.但我不明白这一点incr2(4).
如何在部分函数中4传递x?对我来说,4应该更换sum2.x和之间有什么关系 …
在Python中,如果我在父函数中有子函数,那么每次调用父函数时子函数是否"初始化"(创建)?将函数嵌套在另一个函数中是否存在任何开销?
当我尝试为函数(遗留代码)编写测试用例时,我遇到了这个"模拟嵌套函数"问题.
此函数使用了非常复杂的嵌套函数,并且对其他模块具有很强的依赖性.
我想知道是否有可能用它来模拟嵌套函数mock.
我想知道如何访问另一个函数内的函数.我看到这样的代码:
>>> def make_adder(x):
def adder(y):
return x+y
return adder
>>> a = make_adder(5)
>>> a(10)
15
Run Code Online (Sandbox Code Playgroud)
那么,还有另一种方法来调用adder 函数吗?我的第二个问题是为什么在最后一行我adder不打电话adder(...)?
很好的解释非常感谢.
给定一个球员评分列表,我需要尽可能公平地将球员(即评分)分成两组。目标是最小化团队累积评分之间的差异。我如何将球员分成几队没有限制(一支球队可以有 2 名球员,另一支球队可以有 10 名球员)。
例如:[5, 6, 2, 10, 2, 3, 4]应该返回([6, 5, 3, 2], [10, 4, 2])
我想知道解决这个问题的算法。请注意,我正在参加在线编程入门课程,因此将不胜感激简单的算法。
我正在使用以下代码,但由于某种原因,在线代码检查器说它不正确。
def partition(ratings):
set1 = []
set2 =[]
sum_1 = 0
sum_2 = 0
for n in sorted(ratings, reverse=True):
if sum_1 < sum_2:
set1.append(n)
sum_1 = sum_1 + n
else:
set2.append(n)
sum_2 = sum_2 + n
return(set1, set2)
Run Code Online (Sandbox Code Playgroud)
更新:我联系了导师,被告知我应该在函数中定义另一个“帮助”函数来检查所有不同的组合,然后我需要检查最小差异。
我开始意识到python中lambda表达式的价值,特别是涉及函数式编程map,函数返回函数等等.但是,我也一直在函数中命名lambdas,因为:
当我遇到满足上述标准的情况时,我一直在编写一个名为lambda的表达式,以便干燥并缩小范围功能.例如,我正在编写一个在某些numpy数组上运行的函数,我需要对传递给函数的所有数组进行适度的繁琐索引(可以很容易地放在一行上).我编写了一个名为lambda的表达式来进行索引,而不是编写整个其他函数,或者在整个函数定义中多次复制/粘贴索引.
def fcn_operating_on_arrays(array0, array1):
indexer = lambda a0, a1, idx: a0[idx] + a1[idx]
# codecodecode
indexed = indexer(array0, array1, indices)
# codecodecode in which other arrays are created and require `indexer`
return the_answer
Run Code Online (Sandbox Code Playgroud)
这是滥用python的lambdas吗?我应该吮吸它并定义一个单独的功能吗?
可能值得链接功能内部功能.
我在某处读到了在python中定义函数内部的函数是不好的,因为它使得python在调用外部函数的时候创建了一个新的函数对象.有人基本上这样说:
#bad
def f():
def h():
return 4
return h()
#faster
def h():
return 4
def f(h=h):
return h()
Run Code Online (Sandbox Code Playgroud)
这是真的?另外,当我有这么多常量的情况怎么样:
x = # long tuple of strings
# and several more similar tuples
# which are used to build up data structures
def f(x):
#parse x using constants above
return parse dictionary
Run Code Online (Sandbox Code Playgroud)
如果我将所有常量放在f的定义中,它会更快吗?或者我应该将它们留在外面并将它们绑定到关键字参数中的本地名称?不幸的是,我没有任何数据可以做时间,所以我想我问的是你有类似事情的经历.
因此,我遇到了较大代码段的问题,当我在类内部的另一个函数内部调用函数时,我收到错误消息。在代码中:
#Test program to solve problems.
class Foo(object):
def __init__(self, number):
self.number = number
def run(self):
print "I will now square your number"
print "Your number squared is: "
print self.calculate()
#This squares the number
def calculate(self):
return self.number**2
if __name__ == "__main__":
test = Foo(input("Choose a number: "))
print test.run()
Run Code Online (Sandbox Code Playgroud)
我提出“AttributeError:Foo没有属性calculate”,但我不明白为什么?我是否调用calculate错误来引发此错误?
编辑
所以我知道,如果我改变缩进或者calculate它可以工作,但我想知道是否有办法让它像目前calculate缩进一样工作run,或者 python 类不能那样工作。