相关疑难解决方法(0)

为什么Python不适合函数式编程?

我一直认为函数式编程可以用Python完成.因此,我很惊讶Python在这个问题上没有得到很多提及,当提到它时,它通常不是很积极.然而,没有给出很多理由(没有提到模式匹配和代数数据类型).所以我的问题是:为什么Python不适合函数式编程?是否有更多的原因,而不是缺乏模式匹配和代数数据类型?或者这些概念对函数式编程如此重要,以至于不支持它们的语言只能被归类为二级函数式编程语言?(请记住,我在函数式编程方面的经验非常有限.)

python functional-programming

319
推荐指数
9
解决办法
12万
查看次数

Python 3中是否有'foreach'功能?

当我遇到这种情况时我可以用javascript来做,我总是认为如果有一个foreach功能就会方便.通过foreach我的意思是下面描述的功能:

def foreach(fn,iterable):
    for x in iterable:
        fn(x)
Run Code Online (Sandbox Code Playgroud)

他们只是在每个元素上做它并且没有产生或返回一些东西,我认为它应该是一个内置函数,并且应该比用纯Python编写它更快,但我没有在列表中找到它,或者它只是叫另一个名字?或者我在这里错过了一些观点?

也许我错了,因为调用Python中的函数成本很高,对于这个例子来说绝对不是一个好习惯.该函数不应该是一个out循环,而应该在它的正文中执行循环,如下所示,在许多python的代码建议中已经提到过:

def fn(*args):
    for x in args:
       dosomething
Run Code Online (Sandbox Code Playgroud)

但我认为foreach仍然受到以下两个事实的欢迎:

  1. 在正常情况下,人们只是不关心性能
  2. 有时API不接受可迭代对象,您无法重写其源.

python foreach python-3.x

115
推荐指数
8
解决办法
36万
查看次数

如何在python中乘以函数?

def sub3(n):
    return n - 3

def square(n):
    return n * n
Run Code Online (Sandbox Code Playgroud)

在python中组合函数很容易:

>>> my_list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [square(sub3(n)) for n in my_list]
[9, 4, 1, 0, 1, 4, 9, 16, 25, 36]
Run Code Online (Sandbox Code Playgroud)

不幸的是,当想要使用合成作为关键时,它有点蹩脚:

>>> sorted(my_list, key=lambda n: square(sub3(n)))
[3, 2, 4, 1, 5, 0, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)

这真的应该是sorted(my_list, key=square*sub3),因为heck,函数__mul__不用于其他任何事情:

>>> square * sub3
TypeError: unsupported operand type(s) for *: 'function' and 'function'
Run Code Online (Sandbox Code Playgroud)

好吧,让我们来定义吧!

>>> …
Run Code Online (Sandbox Code Playgroud)

python monkeypatching function function-composition

31
推荐指数
1
解决办法
1762
查看次数

'lambda'关键字的缩写替代方案?

背景:

Python是关于简单易读的代码.它比版本更好,我是一个巨大的粉丝!但是,l a m b d a每次我必须键入lambda时输入并不好玩(你可能不同意).问题是,l a m b d a当我在maps和filters中嵌入几个lambdas时,这6个字符使我的语句更长(我没有嵌套超过2或3,因为它消除了python的可读性 - 这里没有参数!)

实际问题(评论中):

# How to rename/alias a keyword to a nicer one? 
lines = map(lmbd x: x.strip(), sys.stdin)

# OR, better yet, how to define my own operator like -> in python?
lines = map(x -> x.strip(), sys.stdin)
# Or may be :: operator is pythonic
lines = map(x :: x.strip(), sys.stdin)

# INSTEAD of this ugly one. Taking …
Run Code Online (Sandbox Code Playgroud)

python lambda programming-languages keyword

10
推荐指数
3
解决办法
1910
查看次数