小编kee*_*gan的帖子

python中缀前进管道

我正在尝试实现一个前向管道功能,比如bash |或R最近%>%.我已经看到了这个实现http://dev-tricks.net/pipe-in​​fix-syntax-for-python,但这要求我们事先定义可能与管道一起使用的所有函数.在寻找完全一般的东西时,这是我到目前为止所想到的.

此函数将其第一个参数应用于其第二个参数(函数)

def function_application(a,b):
    return b(a)
Run Code Online (Sandbox Code Playgroud)

例如,如果我们有一个平方函数

def sq(s):
    return s**2
Run Code Online (Sandbox Code Playgroud)

我们可以用这种繁琐的方式调用该函数function_application(5,sq).为了更接近前向管道,我们希望使用function_application中缀表示法.

由此绘制,我们可以定义一个Infix类,以便我们可以将函数包装在特殊字符中,例如|.

class Infix:
    def __init__(self, function):
        self.function = function
    def __ror__(self, other):
        return Infix(lambda x, self=self, other=other: self.function(other, x))
    def __or__(self, other):
        return self.function(other)
Run Code Online (Sandbox Code Playgroud)

现在我们可以定义我们的管道,它只是函数的中缀版本function_application,

p = Infix(function_application)
Run Code Online (Sandbox Code Playgroud)

所以我们可以做这样的事情

5 |p| sq
25
Run Code Online (Sandbox Code Playgroud)

要么

[1,2,3,8] |p| sum |p| sq
196
Run Code Online (Sandbox Code Playgroud)

在那个冗长的解释之后,我的问题是,是否有任何方法可以覆盖有效函数名称的限制.在这里,我已经命名了管道p,但是可以重载非字母数字字符吗?我可以命名一个功能,>所以我的管道是|>|

python infix-notation

4
推荐指数
1
解决办法
1242
查看次数

斯卡拉计数字母对

我是学习Scala的新手,我很欣赏任何有关惯用方法的想法.我想计算一个单词中连续字母对的出现次数.

例如,对于单词"home",输出可能是Map("ho"->1,"om"->1,"me"->1).对于'lulu',结果将是Map("lu"->2, "ul"->1 ).

因此,执行简单的单字母计数可能会完成

"abracadabra".map(s => s).groupBy(identity).mapValues(_.length)
Run Code Online (Sandbox Code Playgroud)

但我很难过如何添加这个问题的双字母组件.谢谢你的想法.

scala

3
推荐指数
1
解决办法
141
查看次数

正确使用Scala特征和案例对象

试图了解Scala类和特征,这是一个简单的例子.我想定义一个指定各种操作的类,可以通过多种方式实现.我可能会开始,

sealed trait Operations{
  def add
  def multiply
}
Run Code Online (Sandbox Code Playgroud)

因此,例如,我可以使用一个对象来实例化这个类add,multiply非常明智,

case object CorrectOperations extends Operations{
    def add(a:Double,b:Double)= a+b
    def multiply(a:Double,b:Double)= a*b
}
Run Code Online (Sandbox Code Playgroud)

而且,可能还有其他方法来定义这些操作,例如这显然是错误的方式,

case object SillyOperations extends Operations{
    def add(a:Double,b:Double)= a + b - 10
    def multiply(a:Double,b:Double)= a/b
}
Run Code Online (Sandbox Code Playgroud)

我想将这样的实例传递给一个以特定方式执行操作的函数.

 def doOperations(a:Double,b:Double, op:operations) = {
   op.multiply(a,b) - op.add(a,b)
 }
Run Code Online (Sandbox Code Playgroud)

我想doOperations采取任何类型的对象,operations以便我可以利用addmultiply,无论它们是什么.

我需要改变什么doOperations,以及我在这里误解了什么?谢谢

scala

3
推荐指数
1
解决办法
482
查看次数

python递归函数调用

我正在尝试实现一个递归函数并遇到一些困难,会很感激你的想法.作为一个例子,让我们尝试创建一个调用的函数sliding,这是否

sliding("python", 2)
["py", "yt", "th", "ho", "on"]
Run Code Online (Sandbox Code Playgroud)

也就是说,对于所选择的整数,我们沿着字符串滑动,抓取适当长度的子串,然后将它们全部返回到列表中.

现在,我可以(愚蠢地)尝试以递归方式定义此方法:

def sliding(string,k):
  return s if len(string)==k else [string[:k]].append(sliding(string[1:],k))
Run Code Online (Sandbox Code Playgroud)

这将工作,主要是因为list.append()在地方发生,并返回None.所以我的问题是 - 有没有办法做这种递归函数,即使有很多Python方法到位?

这是我迄今为止最好的,

def sliding(s,k):
    if len(s)==k:
        return s
    else:
        temp = [s[:k]]
        temp.append(sliding(s[1:],k) ) 
        return temp
Run Code Online (Sandbox Code Playgroud)

这导致了

sliding("python",k=2)
['py', ['yt', ['th', ['ho', 'on']]]]
Run Code Online (Sandbox Code Playgroud)

这显然不是理想的输出,但是方向正确.还有什么其他方法可以做到这一点?谢谢你的想法.

python recursion

3
推荐指数
1
解决办法
370
查看次数

GAE身份验证失败,启用安全性较低的应用程序

由于身份验证失败,我无法使用Google App Engine部署应用.最近几次讨论过这个问题,

GoogleAppEngine登录失败

在Google应用引擎中部署应用

通常的解决方案是您需要对Google帐户进行更改,以允许"安全性"较低的应用程序访问(https://www.google.com/settings/security/lesssecureapps).我相当肯定这是我的问题,因为我在尝试部署之后立即收到来自谷歌的消息,并发出"不太安全"的第三方应用试图登录我的帐户的警告.

我的问题是为什么来自GAE的应用程序被谷歌认为"不太安全"?我之前没有这个问题就部署了应用程序,所以我需要更新GAE吗?我是否应该犹豫是否要启用"不太安全"的应用程序,因为肯定存在风险?

google-app-engine

2
推荐指数
1
解决办法
606
查看次数

pyspark折叠方法输出

我对这个输出感到惊讶fold,我无法想象它在做什么.

我希望这something.fold(0, lambda a,b: a+1)将返回元素的数量something,因为折叠从每个元素开始0并添加1.

sc.parallelize([1,25,8,4,2]).fold(0,lambda a,b:a+1 )
8
Run Code Online (Sandbox Code Playgroud)

我来自斯卡拉,在那里折叠就像我描述的那样.那么如何折叠应该在pyspark中工作?谢谢你的想法.

apache-spark pyspark

2
推荐指数
1
解决办法
5230
查看次数