我想通过字符串对象分配一个类属性 - 但是如何?
例:
class test(object):
pass
a = test()
test.value = 5
a.value
# -> 5
test.__dict__['value']
# -> 5
# BUT:
attr_name = 'next_value'
test.__dict__[attr_name] = 10
# -> 'dictproxy' object does not support item assignment
Run Code Online (Sandbox Code Playgroud) 有没有一种标准的pythonic方法来处理python中的物理单位/数量?我从物理学或神经科学等不同领域看到了不同的模块特定解决方案.但我宁愿使用标准方法而不是"孤岛"解决方案,因为其他人应该能够轻松读取我的代码.
我想name在关系数据库中通过SQLAlchemy 存储带注释(例如)的numpy-arrays .为此,
DTONumpy作为其一部分MyNumpy)从数据中分离出numpy数组.Container.什么是一个很好的和pythonic方式修改Container(从下面的例子)以一种直接提供列表的方式MyNumpy-objects而不是DTONumpySQLAlchemy提供的?
以下是问题的说明:
import numpy as np
import zlib
import sqlalchemy as sa
from sqlalchemy.orm import relationship, scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.types import TypeDecorator, CHAR
DBSession = scoped_session(sessionmaker())
Base = declarative_base()
#### New SQLAlchemy-Type #####################
class NumpyType (sa.types.TypeDecorator):
impl = sa.types.LargeBinary
def process_bind_param(self, value, dialect):
return zlib.compress(value.dumps(), 9)
def process_result_value(self, value, dialect):
return np.loads(zlib.decompress(value))
##############################################
class DTONumpy(Base):
__tablename__ = …Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法来获得如下所示的轮廓线的(x,y)值:
import matplotlib.pyplot as plt
x = [1,2,3,4]
y = [1,2,3,4]
m = [[15,14,13,12],[14,12,10,8],[13,10,7,4],[12,8,4,0]]
cs = plt.contour(x,y,m, [9.5])
plt.show()
Run Code Online (Sandbox Code Playgroud) 为什么以下几行不能按预期工作?
import numpy as np
a = np.array([0,1,2,1,1])
a[a==1][1:] = 3
print a
>>> [0 1 2 1 1]
# I would expect [0 1 2 3 3]
Run Code Online (Sandbox Code Playgroud)
这是一个'错误'还是有另一种推荐方式?
另一方面,以下工作:
a[a==1] = 3
print a
>>> [0 3 2 3 3]
Run Code Online (Sandbox Code Playgroud)
干杯,菲利普
有没有人知道按文件名的降序订购toctree的任何选项?在升序的情况下,我们可以使用:glob:选项,如下所示:
.. toctree:
:glob:
2011*
Run Code Online (Sandbox Code Playgroud)
对于应在Sphinx文档中报告的重组文本中的日常注释,这将非常方便.
我正在为单个神经元编程模拟.因此我必须处理很多参数.现在的想法是我有两个类,一个用于SingleParameter,一个用于参数集合.我使用property()来轻松访问参数值并使代码更具可读性.这适用于sinlge参数,但我不知道如何为集合实现它,因为我想在SingleParameter之后命名Collection中的属性.这是一个例子:
class SingleParameter(object):
def __init__(self, name, default_value=0, unit='not specified'):
self.name = name
self.default_value = default_value
self.unit = unit
self.set(default_value)
def get(self):
return self._v
def set(self, value):
self._v = value
v = property(fget=get, fset=set, doc='value of parameter')
par1 = SingleParameter(name='par1', default_value=10, unit='mV')
par2 = SingleParameter(name='par2', default_value=20, unit='mA')
# par1 and par2 I can access perfectly via 'p1.v = ...'
# or get its value with 'p1.v'
class Collection(object):
def __init__(self):
self.dict = {}
def __getitem__(self, name):
return self.dict[name] # get the …Run Code Online (Sandbox Code Playgroud) 我编写了以下类,用于在额外窗口中生成"监视"输出.
这是代码:
import Tkinter
class Monitor(object):
@classmethod
def write(cls, s):
try:
cls.text.insert(Tkinter.END, str(s) + "\n")
cls.text.update()
except Tkinter.TclError, e:
print str(s)
mw = Tkinter.Tk()
mw.title("Message Window by my Software")
text = Tkinter.Text(mw, width = 80, height = 10)
text.pack()
Run Code Online (Sandbox Code Playgroud)
用法:
Monitor.write("Hello World!")
Run Code Online (Sandbox Code Playgroud) 我已经尝试过使用pgmex了.不幸的是它不适用于libpq5(matlab立即崩溃).
假设有一个具有唯一名称的对象.现在要切换两个对象的名称:
这是布局:
import sqlalchemy as sa
import sqlalchemy.orm as orm
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class MyObject(Base):
__tablename__ = 'my_objects'
id = sa.Column(sa.Integer, primary_key=True)
name = sa.Column(sa.Text, unique=True)
if __name__ == "__main__":
engine = sa.create_engine('sqlite:///:memory:', echo=True)
Session = orm.sessionmaker(bind=engine)
Base.metadata.create_all(engine)
session = Session()
Run Code Online (Sandbox Code Playgroud)
我想这样做:
a = MyObject(name="Max")
b = MyObject(name="Moritz")
session.add_all([a, b])
session.commit()
# Now: switch names!
tmp = a.name
a.name = b.name
b.name = tmp
session.commit()
Run Code Online (Sandbox Code Playgroud)
这引发了IntegrityError.有没有办法在一次提交中切换这些字段而没有此错误?
我想通过装饰器向类中添加许多虚拟属性,如下所示:
def addAttrs(attr_names):
def deco(cls):
for attr_name in attr_names:
def getAttr(self):
return getattr(self, "_" + attr_name)
def setAttr(self, value):
setattr(self, "_" + attr_name, value)
prop = property(getAttr, setAttr)
setattr(cls, attr_name, prop)
setattr(cls, "_" + attr_name, None) # Default value for that attribute
return cls
return deco
@addAttrs(['x', 'y'])
class MyClass(object):
pass
Run Code Online (Sandbox Code Playgroud)
不幸的是,decoarator似乎保留了引用attr_name而不是其内容.因此,MyClass.x并MyClass.y访问MyClass._y:
a = MyClass()
a.x = 5
print a._x, a._y
>>> None, 5
a.y = 8
print a._x, a._y
>>> None, …Run Code Online (Sandbox Code Playgroud) 如何用SQLAlchemy编写自己的聚合函数?作为一个简单的例子,我想使用numpy来计算方差.使用sqlite它看起来像这样:
import sqlite3 as sqlite
import numpy as np
class self_written_SQLvar(object):
def __init__(self):
import numpy as np
self.values = []
def step(self, value):
self.values.append(value)
def finalize(self):
return np.array(self.values).var()
cxn = sqlite.connect(':memory:')
cur = cxn.cursor()
cxn.create_aggregate("self_written_SQLvar", 1, self_written_SQLvar)
# Now - how to use it:
cur.execute("CREATE TABLE 'mytable' ('numbers' INTEGER)")
cur.execute("INSERT INTO 'mytable' VALUES (1)")
cur.execute("INSERT INTO 'mytable' VALUES (2)")
cur.execute("INSERT INTO 'mytable' VALUES (3)")
cur.execute("INSERT INTO 'mytable' VALUES (4)")
a = cur.execute("SELECT avg(numbers), self_written_SQLvar(numbers) FROM mytable")
print a.fetchall()
>>> [(2.5, …Run Code Online (Sandbox Code Playgroud) 看看下面的python示例:
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams['figure.figsize'] = [8.27, 11.69]
fig = plt.figure()
plt.show() # This line causes problems with figsize
fig.savefig('test.pdf')
Run Code Online (Sandbox Code Playgroud)
如果我使用"plt.show()",test.pdf的数字大小会发生很大变化(来自
为了保持不变,我该怎么做?
python ×11
sqlalchemy ×3
matplotlib ×2
numpy ×2
oop ×2
attributes ×1
class ×1
decorator ×1
interface ×1
ipython ×1
matlab ×1
parameters ×1
physics ×1
postgresql ×1
properties ×1
qt ×1
qt4 ×1
slice ×1
sqlite ×1
tkinter ×1