我想在python中重载*运算符.在C++中,您可以重载取消引用运算符,以便您可以创建一个具有自定义响应方式的类*alpha.
这个问题的一部分是我完全不知道,我的意思是,*运算符(我称之为解包运算符)的确如此.
那么如何重载它,或模拟它的重载.
最终我希望能够:*alpha使用自定义响应和返回值.
编辑:
感谢Joe Kington的评论,我找到了解决方案.作为*alpha根据解压缩__iter__,所以我定义了一个可以继承的简单类来允许这个.
顺便说一句,我希望能够做到这一点的原因是因为我想要一个漂亮的界面.
class Deref:
def __deref__(self):
pass
def __iter__(self):
yield self.__deref__()
class DerefTest(Deref):
def __deref__(self):
return '123cat'
if __name__ == '__main__':
print(*DerefTest()) # prints '123cat'
Run Code Online (Sandbox Code Playgroud)
最后我只是决定使用另一个一元运算符,因为我给出的实现在所有情况下都不起作用,所以我很失望.
我有一个包含三列和n行的数据集.第1列包含name,第2列value1和第3列value2(rank2).
我想用显示名称的异常值绘制散点图.
R我使用的命令是:
tiff('scatterplot.tiff')
data<-read.table("scatterplot_data", header=T)
attach(data)
reg1<-lm(A~B)
plot(A,B,col="red")
abline(reg1)
outliers<-data[which(2^(data[,2]-data[,3]) >= 4 | 2^(data[,2]-data[,3]) <=0.25),]
text(outliers[,2], outliers[,3],labels=outliers[,1],cex=0.50)
dev.off()
Run Code Online (Sandbox Code Playgroud)
我得到一个这样的数字: 
我想要的是下半部分的标签应该是一种颜色,上半部分的标签应该是另一种颜色,分别是绿色和红色.
任何建议,或调整命令?
使用pythons itertools,我想在一堆列表的所有排列的外积上创建一个迭代器.一个明确的例子:
import itertools
A = [1,2,3]
B = [4,5]
C = [6,7]
for x in itertools.product(itertools.permutations(A),itertools.permutations(B),itertools.permutations(C)):
print x
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但我想将其推广到任意列表列表.我试过了:
for x in itertools.product(map(itertools.permutations,[A,B,C])):
print x
Run Code Online (Sandbox Code Playgroud)
但它并没有按照我的意图行事.预期的产出是:
((1, 2, 3), (4, 5), (6, 7))
((1, 2, 3), (4, 5), (7, 6))
((1, 2, 3), (5, 4), (6, 7))
((1, 2, 3), (5, 4), (7, 6))
((1, 3, 2), (4, 5), (6, 7))
((1, 3, 2), (4, 5), (7, 6))
((1, 3, 2), (5, 4), (6, 7))
((1, 3, 2), …Run Code Online (Sandbox Code Playgroud) 通常你可以在右上角看到你的项目存在的东西,PHP的多少%,JS的多少%等等.
在我当前的项目中,这是不可见的,我已经尝试删除并在Github上再次添加它,但没有运气.它最初是从另一个回购分支出来的,但现在不再存在那个回购.


我正在尝试创建一个与withPython中的关键字很好地匹配的对象.我知道你必须创建__enter__和__exit__方法,但我不太确定如何操纵对象.作为一个具体的例子,我写了一个创建本地空间的类,并在退出时清理:
import tempfile, os, shutil
class temp_workspace(object):
def __enter__(self):
self.local_dir = os.getcwd()
self.temp_dir = tempfile.mkdtemp()
os.chdir(self.temp_dir)
def __exit__(self, exc_type, exc_value, traceback):
os.chdir(self.local_dir)
shutil.rmtree(self.temp_dir)
def __repr__(self):
return self.temp_dir
Run Code Online (Sandbox Code Playgroud)
这工作正常,但当我尝试打印本地目录名称时:
with temp_workspace() as T:
print "Temp directory name is ", T
Run Code Online (Sandbox Code Playgroud)
它显示为None和__repr__不甚至被称为!这T也很令人困惑NoneType.我究竟做错了什么?
当我尝试使用套装时,它显示没有任何名为set的东西.
from sets import set
> ImportError: cannot import name set
Run Code Online (Sandbox Code Playgroud)
我如何解决它?
我需要这个来快速安装memcached作为Fabric脚本设置测试服务器的一部分.想我会在这里记录下来以备将来参考.
我有一个简单的pyparsing语法来匹配由空格分隔的数字:
from pyparsing import *
NUMBER = Word( nums )
STATEMENT = ZeroOrMore( NUMBER )
print( STATEMENT.parseString( "1 2 34" ) )
Run Code Online (Sandbox Code Playgroud)
给定1 2 34测试字符串,它返回 3 个已解析标记的字符串。但是如何在原始字符串中找到每个标记的位置?我需要它来进行“某种”语法高亮显示。
尽管有以前问题的建议:
使用numpy.genfromtxt()将-9999作为缺失值
我仍然无法处理以缺失值结尾的文本文件,
A.TXT:
1 2 3
4 5 6
7 8
Run Code Online (Sandbox Code Playgroud)
我已经尝试了多种选项安排missing_values,filling_values并且无法使其工作:
import numpy as np
sol = np.genfromtxt("a.txt",
dtype=float,
invalid_raise=False,
missing_values=None,
usemask=True,
filling_values=0.0)
print sol
Run Code Online (Sandbox Code Playgroud)
我想得到的是:
[[1.0 2.0 3.0]
[4.0 5.0 6.0]
[7.0 8.0 0.0]]
Run Code Online (Sandbox Code Playgroud)
但相反,我得到:
/usr/local/lib/python2.7/dist-packages/numpy/lib/npyio.py:1641: ConversionWarning: Some errors were detected !
Line #3 (got 2 columns instead of 3)
warnings.warn(errmsg, ConversionWarning)
[[1.0 2.0 3.0]
[4.0 5.0 6.0]]
Run Code Online (Sandbox Code Playgroud) 该功能scipy.optimize.fmin_bfgs允许用户输入目标函数和渐变.由于我的桌面上有一台8核机器,我想我可以通过运行来并行化解算器
from scipy import optimize
import itertools
import numpy as np
def single_grad_point((idx,px)):
p = px.copy()
epsilon = 10**(-6.0)
p[idx] += epsilon
d1 = err_func(p)
p[idx] -= 2*epsilon
d2 = err_func(p)
return (d1-d2)/(2*epsilon)
def err_func_gradient(p):
P = multiprocessing.Pool()
input_args = zip(*(xrange(len(p)), itertools.cycle((p,))))
sol = P.imap(single_grad_point, input_args)
return np.array(list(sol))
optimize.fmin_bfgs(err_func, p0, fprime=err_func_gradient)
Run Code Online (Sandbox Code Playgroud)
简而言之,我正在使用多处理来计算渐变的每个方向.如果目标函数err_func很昂贵,这似乎可以获得大幅加速.然而,我的问题是关于所有的使用和控制/破坏multiprocessing.Pools.因为有可能err_func_gradient被称为成千上万次,这会导致某个地方的减速或泄漏吗?
python ×9
debian ×1
fabric ×1
genfromtxt ×1
github ×1
numpy ×1
overloading ×1
parsing ×1
permutation ×1
pyparsing ×1
python-2.7 ×1
r ×1
scatter-plot ×1
scipy ×1
set ×1
ubuntu ×1
unpack ×1