小编Bog*_*dan的帖子

为什么我不能从一个列表理解中获得两个列表?

所以我有一个以下形式的数组:

[(1, u'first_type', u'data_gid_1'), 
 (2, u'first_type', u'data_gid_2'), 
 (3, u'first_type', u'data_gid_3'), 
 (4, u'first_type', u'data_gid_4')]
Run Code Online (Sandbox Code Playgroud)

现在我想将每个内部列表的第一个和最后一个元素提取到单独的列表中.所以,如果我这样做:

>>> ids = [dat[0] for dat in all_data]
>>> gds = [dat[2] for dat in all_data]
Run Code Online (Sandbox Code Playgroud)

这有点像我期望的那样.但是我试图将这两个合并为一个调用,例如:

 (ids, gds) = [(dat[0], dat[2]) for dat in all_data]
Run Code Online (Sandbox Code Playgroud)

然而,这失败了: ValueError: too many values to unpack

所以任何人都可以解释为什么会发生这种情况,如果我想做的话甚至是可能的.

此致,波格丹

python

5
推荐指数
1
解决办法
920
查看次数

python只获取类属性没有超类

那么是否有可能只为最具体的类获取属性的字典/列表?到目前为止我正在使用

   for attr, value in obj.__class__.__dict__.iteritems():
Run Code Online (Sandbox Code Playgroud)

但这也会给我在超类中定义的属性。有什么办法可以避免这种情况吗?

python

5
推荐指数
1
解决办法
2095
查看次数

sqlAlchemy模型的问题

所以我有以下情况.我有一个类DataTypes具有以下结构:

class DataType(Base):
    __tablename__ = 'DATA_TYPES'
    id = Column(Integer, primary_key=True)
    type_name = Column(String)
    fk_result_storage = Column(Integer, ForeignKey('DATA_STORAGES.id'))

    parentDataStorage = relationship("DataStorage", backref=backref("DataType",    cascade="all,delete"))

    def __init__(self, name, resultId):
       self.type_name = name
       self.fk_result_storage = resultId
Run Code Online (Sandbox Code Playgroud)

现在这里定义的关系有效.但是现在我有一些特定的数据类型,这些数据类型是通过内省动态创建的,并且需要同时删除级联.它们是这样创建的:

t = Table('DATA_' + obj.__name__.lower(), *t[:-1], **t[-1])
mapper(obj, t, *args, **kwargs)
model.Base.metadata.create_all(dao.Engine)   
Run Code Online (Sandbox Code Playgroud)

这很好,并根据需要创建表.但现在我想添加一个类似于DataType类的关系.所以我尝试了这个:

t = T('DATA_' + obj.__name__.lower(), *t[:-1], **t[-1])
M(obj,t,properties = {'children' : relationship('DataType', backref=backref(obj, cascade="all,delete"))} )   
model.Base.metadata.create_all(dao.Engine)
Run Code Online (Sandbox Code Playgroud)

但这给了我:

 sqlalchemy.exc.InvalidRequestError: One or more mappers failed to initialize - can't proceed with initialization of other mappers.  Original …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

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

在python中迭代的最快方法

到目前为止,我从来没有关心过这个问题,但现在我需要使用一些需要由PyOpenGL缓冲的大量顶点,而且似乎python迭代是瓶颈.情况就是这样.我有一个3D点阵列vertices,在每一步我必须为每个顶点计算一个4D颜色数组.到目前为止我的方法是:

upper_border = len(self.vertices) / 3
#Only generate at first step, otherwise use old one and replace values
if self.color_array is None:
     self.color_array = numpy.empty(4 * upper_border)  

for i in range(upper_border):
     #Obtain a color between a start->end color
     diff_activity = (activity[i] - self.min) / abs_diff  
     clr_idx = i * 4
     self.color_array[clr_idx] = start_colors[0] + diff_activity * end_colors[0]
     self.color_array[clr_idx + 1] = start_colors[1] + diff_activity * end_colors[1]
     self.color_array[clr_idx + 2] = start_colors[2] + diff_activity * end_colors[2]
     self.color_array[clr_idx + 3] …
Run Code Online (Sandbox Code Playgroud)

python numpy pyopengl

4
推荐指数
2
解决办法
2943
查看次数

python导入语句

我已经开始使用Python大约一个月了,我遇到了一些我想要更好理解的东西.它与进口有关.所以我有一个模块:root.core.connectivity

现在在这个模块中我定义了一个连接类.此模块也__main__仅用于测试目的(不确定这是否有任何差异).

如果我这样做:

from root.core.connectivity import Connectivity as class_name
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如果我尝试:

import root.core.connectivity.Connectivity as class_name
Run Code Online (Sandbox Code Playgroud)

这将失败:

ImportError: No module named Connectivity
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,为什么它失败了,这两个陈述之间有什么区别.

此致,波格丹

python

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

将matlab变量导出为python用法的文本

所以让我们开始说我是matlab的初学者.我正在使用python,现在我收到了matlab文件中的一些数据,我需要将其导出为可以与python一起使用的格式.

我google了一下,发现我可以使用以下方法将matlab变量导出到文本文件:

dlmwrite('my_text', MyVariable, 'delimiter' , ',');
Run Code Online (Sandbox Code Playgroud)

现在我需要导出的变量是16000 x 4000矩阵的双精度格式0.006747668446927.现在问题出现在这里.我需要导出每个double的完整值.尝试使用该功能可以让我以格式导出数字0.0067477.这是行不通的,因为我需要更多的精确度来做我正在做的事情.那么如何导出每个变量的完整值呢?或者如果你有更优雅的方式在python中使用那个巨大的matlab矩阵,请随意.

此致,波格丹

python file-io matlab

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

python ftplib奇怪的行为

尝试使用ftplib连接到ftp服务器时,我遇到了一些非常奇怪的行为.我在做的是:

import ftplib
ftp = ftplib.FTP('my-ftp-server')
ftp.login('user ', 'pass')
Run Code Online (Sandbox Code Playgroud)

现在,如果我从python解释器运行它,它工作正常,我得到:

'230 Login successful.'
Run Code Online (Sandbox Code Playgroud)

但我想用一个可以为我做的东西很好的脚本.当我把这些全部放在一些python脚本中并运行时:

 python my_ftp_stuff.py
Run Code Online (Sandbox Code Playgroud)

我明白了:

 ftplib.error_perm: 530 Login incorrect.
Run Code Online (Sandbox Code Playgroud)

我真的无能为力导致这种奇怪的行为.有没有人有什么提示尝试?

最好的祝福

python ftplib

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

python setuptools和easy_install numpy问题

所以我在这里遇到了一些困境.setuptools不使用easy_install来获取您在setup.py中指定的其他依赖项吗?我问,因为说我有一个setup.yp并且在install_requires = ["numpy"]中.现在如果我运行python setup.py install会出错:

_configtest.c:1:20: error: Python.h: No such file or directory
_configtest.c:1:20: error: Python.h: No such file or directory
lipo: can't figure out the architecture type of: /var/tmp//cciDxELX.out
_configtest.c:1:20: error: Python.h: No such file or directory
_configtest.c:1:20: error: Python.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行"easy_install numpy"的作品.什么可能导致这种行为?

此致,波格丹

python numpy setuptools

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

javascript选择输入事件

我正在尝试从javascript创建一个选择输入并将函数绑定到用户更改选项时.到目前为止,我有:

filter.change = function() {
    console.log("CHANGED");
}
Run Code Online (Sandbox Code Playgroud)

但在选择别的东西时没有任何反应.这段代码有什么问题.另外,如何在函数中获取新选择的值?就像是:

console.log(this.value + "has been selected")
Run Code Online (Sandbox Code Playgroud)

javascript

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

在Clojure中更改全局变量的值

我在Clojure中是一个完全的开始,我遇到了一个问题,我甚至不确定是否可以在Closure中完成.

所以问题如下.我已经实现了一个从一个区间(最多限度)计算素数的函数.

(defn gather_primes_in_range [range_start range_end target_number prime_list]
    (if (or (= 0 target_number) (> range_start range_end) (= FIND_MORE_PRIMES false)) 
        prime_list
        (do
            (if (is_prime? range_start)
                (gather_primes_in_range (+ range_start 1) range_end (- target_number 1) (conj, prime_list, range_start))
                (gather_primes_in_range (+ range_start 1) range_end target_number prime_list)
            )
        )
    )
)

(defn find_nr_of_primes_in_range [range_start range_end target_number]
    (if (< range_start 2)
        (gather_primes_in_range 2 range_end target_number [])
        (gather_primes_in_range range_start range_end target_number [])
    )
)
Run Code Online (Sandbox Code Playgroud)

这很好用.但我现在想要的是有一个全局变量应该存储在每个方法调用变量中找到的素数以便稍后查找.在其他语言中,如Python,Ruby或Scala,我只需要通过设置一个Set来添加条目,然后再从函数中退出.但是在Clojure中,我没有想到如何解决这个问题.

基本上我尝试的是,在某个地方宣布:

(def PRIMES_FOUND_SO_FAR #{})
Run Code Online (Sandbox Code Playgroud)

然后以某种方式返回时将条目添加到此变量中.在Clojure中这有可能吗?如果可以的话怎么样?我试过其他变量的改变或者使用他们的价值观swap!atom,或设置!但无论如何都无法在这里工作.

clojure

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

python方法变量和方法中创建的对象

所以我知道在Python中,在方法中声明的变量在它之外是不可见的.但他们的生命周期是什么?我希望每次调用该方法时都会创建一个在方法内声明的变量.

我问是因为以下情况.我有一个方法如下(这与cherrypy一起使用,可能不相关,但我仍然会添加它以便以任何方式影响它).

首先是我使用的自定义Filter类:

class Filter():
"""
Class used to filter tables displayed in UI, based on few criteria.
Initialize filter with a list of fields, and correspondinf values.
"""
def __init__(self, display_name= "", fields= [], values= [], operations= []):
    self.display_name = display_name
    self.fields = fields
    self.values = values
    self.selected = False 
    self.operations = operations
Run Code Online (Sandbox Code Playgroud)

现在我正在谈论的方法

@cherrypy.expose
@logged() 
def getfiltereddatatypes(self, name, filters, datatype):
    ...some mumbo jumbo...

    default_filter = self._get_default_filters(inputTree, name)

    #default_filter here can be a object of type Filter if defined …
Run Code Online (Sandbox Code Playgroud)

python

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

模块保存变量,可变与不可变

好的,情况就是这样.我需要一组变量是全局的,到目前为止还没有必要改变它们.现在有些情况发生在我需要做的事情时:

from config import some_var
some_var = new_var
Run Code Online (Sandbox Code Playgroud)

此后,此更改应在所有导入中可见.现在我尝试了一些虚拟模块:

所以在a.py中

x = 1
y = [1]

class A():
    x = 1
    y = [1]
Run Code Online (Sandbox Code Playgroud)

在b.py

from a import A, x, y

def change():
    x = 2
    y[0] = 2
    A.x = 2
    A.y = [2]
Run Code Online (Sandbox Code Playgroud)

主要测试:

from a import A, x, y
from b import change

print x
print A.x
print y
print A.y
change()
print x
print A.x
print y
print A.y
Run Code Online (Sandbox Code Playgroud)

输出是:

1 1 [1] [1] 1 2 …

python

0
推荐指数
1
解决办法
699
查看次数