小编Hoo*_*ked的帖子

python中的重载*运算符(或模拟它)

我想在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)

最后我只是决定使用另一个一元运算符,因为我给出的实现在所有情况下都不起作用,所以我很失望.

python overloading unpack operator-keyword

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

R或python中的双色散点图

我有一个包含三列和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)

我得到一个这样的数字: 在此输入图像描述

我想要的是下半部分的标签应该是一种颜色,上半部分的标签应该是另一种颜色,分别是绿色和红色.

任何建议,或调整命令?

python r scatter-plot

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

itertools:排列的笛卡尔乘积

使用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)

python permutation cartesian-product python-itertools

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

Github项目语言(语言学家)信息不可见?

通常你可以在右上角看到你的项目存在的东西,PHP的多少%,JS的多少%等等.

在我当前的项目中,这是不可见的,我已经尝试删除并在Github上再次添加它,但没有运气.它最初是从另一个回购分支出来的,但现在不再存在那个回购.

Github repo包含有关项目文件的信息

我目前的Github回购没有关于项目文件的信息

github github-linguist

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

对于在python中使用`with`关键字的类,我可以自己使用__repr __(print)吗?

我正在尝试创建一个与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.我究竟做错了什么?

python with-statement

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

在python中导入集

当我尝试使用套装时,它显示没有任何名为set的东西.

from sets import set

> ImportError: cannot import name set
Run Code Online (Sandbox Code Playgroud)

我如何解决它?

python set python-2.7

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

在Fabric中,如何检查是否存在Debian或Ubuntu软件包,如果不存在则安装它?

我需要这个来快速安装memcached作为Fabric脚本设置测试服务器的一部分.想我会在这里记录下来以备将来参考.

python ubuntu debian fabric

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

pyparsing:如何获取令牌位置?

我有一个简单的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 个已解析标记的字符串。但是如何在原始字符串中找到每个标记的位置?我需要它来进行“某种”语法高亮显示。

python pyparsing

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

使用numpy.genfromtxt填充缺失值

尽管有以前问题的建议:

使用numpy.genfromtxt()将-9999作为缺失值

使用genfromtxt导入numpy中缺少值的csv数据

我仍然无法处理以缺失值结尾的文本文件,

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)

python parsing numpy genfromtxt

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

scipy.optimize.fmin的朴素并行化

该功能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 parallel-processing multiprocessing scipy

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