我正在学习Haskell.如果我理解正确,Haskell中的一个简单函数总是在引用透明.我认为这意味着它的输出仅取决于传递给它的参数.
但是函数f可以调用g外部作用域中定义的另一个函数.所以从这个意义上讲,f回归价值取决于其定义g.并且函数g不f作为参数传递- 至少不是显式的.这不会破坏参考透明度吗?
在我的程序结束时,没有真正需要发生的事情,CPython 3.2解释器花了将近2分钟进行垃圾收集.这是一个众所周知的问题.
幸运的是,在我的情况下,我不需要在程序结束之前进行任何垃圾收集.因此,我只需要找到一种在程序完成后退出程序的方法,而无需gc.collect()运行.
在Windows上按"CTRL + C"似乎是这样做的.我想我也可以找到python解释器的进程ID,并使用OS调用将其终止.
有没有办法使用纯Python(可能是异常或标准库调用)实现相同的效果,希望平台无关?
这是一个最小的情况。
def foo(x:int, y:int) -> tuple:
return (x*y, y//2)
Run Code Online (Sandbox Code Playgroud)
能够编写-> tuple(:int, :int)无效格式的格式非常诱人。在这种情况下是否有正确的方法,还是在python沿着类型注释之路进一步移动之前它仍然是灰色区域?
编辑:显然有可能做类似的事情
def bar(x, y) -> ((str, int), (str, int)):
return ("%s+%s" %(x,y), x+y), ("%s-%s" %(x,y), x-y)
Run Code Online (Sandbox Code Playgroud) 颜色图(根据contour许多其他绘图函数的要求)和简单的颜色列表有什么区别?如何将颜色列表(每种颜色应该代表相同大小的步骤)转换为颜色图?
就Spark DataFrame / SQL上下文而言,UDF和自定义表达式之间有什么区别?尤其是它们对Catalyst都是不透明的吗?使用一个vs另一个的原因是什么?
(例如,此处提到了自定义表达式-尽管在这种情况下不需要它们。)
(Scala特定的问题.)
虽然Spark文档鼓励尽可能使用DataFrame API,但如果DataFrame API不足,则通常选择回退到RDD API或使用UDF.这两种选择之间是否存在固有的性能差异?
RDD和UDF类似,因为它们都不能从Catalyst和Tungsten优化中受益.是否还有其他开销,如果存在,两种方法之间是否存在差异?
举一个具体的例子,假设我有一个DataFrame,它包含一列带有自定义格式的文本数据(不适合regexp匹配).我需要解析该列并添加一个包含结果标记的新向量列.
根据Pro Git Book:
\n\n\n\n\n\n\n在 Git 中,HEAD 是指向您当前所在的本地分支的指针。
\n
\n\n\nHEAD 引用的特殊之处在于它实际上指向另一个引用。它是指向当前活动分支的指针。
\n
但事实证明:
\n\n\n\n\nHEAD 不是最新版本,而是当前版本。通常,它是当前分支的最新版本,但不一定是。
\n
例如:
\n\n\n\n\n如果您签出较旧的内容(例如像 git checkout v1.1 这样的标签),那么您的 HEAD 会更改为该标签的提交。它可能不是最新的提交。
\n
所以 HEAD 可以指向一个分支或者。当 HEAD 引用分支 X 时,与 HEAD 引用分支 X 的实际头提交相比,git 命令的行为是否有不同?(在类似 C 的表示法中,我正在讨论当 **HEAD 引用某个提交时与 *HEAD 引用相同提交时的情况。)
\n[Python 3.1]
我正在跟进这个答案:
class prettyfloat(float):
def __repr__(self):
return "%0.2f" % self
Run Code Online (Sandbox Code Playgroud)
我知道我需要跟踪我的浮动文字(即替换3.0为 prettyfloat(3.0)等),这很好.
但每当我做任何计算时,prettyfloat对象都会被转换成float.
修复它的最简单方法是什么?
编辑:
我需要两个十进制数字; 我需要在整个代码中使用它,包括我float在里面打印带有值的字典.这使得任何格式化功能都难以使用.
我不能使用Decimal全局设置,因为我希望计算完全精确(只需打印2个小数点).
@Glenn Maynard:我同意我不应该凌驾__repr__; 如果有的话,那就是公正的__str__.但由于以下几点,这是一个有争议的问题.
@Glenn Maynard和@singularity:我不会继承float,因为我同意它最终看起来很难看.
我将停止尝试变得聪明,并且只是float在打印时调用函数.虽然我真的很难过,但我无法覆盖__str__内置课程float.
谢谢!
for element in container:
# some code here
temp_variable = f1(element)
# more code
# much later in the code
for element in container:
# some code
another_variable = g(temp_variable)
# more code
temp_variable = f2(element)
# more code
Run Code Online (Sandbox Code Playgroud)
在第二个for循环中,我temp_variable在分配之前意外使用了变量.通常情况下,我会得到NameError异常,但不幸的是,它从前一个循环中幸存,有效并初始化.
是否有任何编码实践,IDE工具等有助于防止此类错误?
顺便说一下,我觉得如果循环内的变量不能在循环结束后存活可能会更好.
编辑
@Ignacio Vazquez-Abrams:
如果我理解正确,建议不要在多个循环中使用相同的变量名作为局部变量.我有两个问题:
通常,在多个循环中使用的最具描述性的变量名称恰好相同.说,我用过类似的东西unique_visitor_count.我不想禁止这个变量在代码中进一步使用,在另一个循环中.
在处理现有代码时,检查我之前是否已经使用过任何新的变量名称是非常繁重的.
python ×6
python-3.x ×3
apache-spark ×2
scala ×2
coding-style ×1
debugging ×1
git ×1
git-branch ×1
haskell ×1
ide ×1
interrupt ×1
matplotlib ×1
namespaces ×1
performance ×1
rdd ×1
subclass ×1