我正在使用Flask-SQLAlchemy测试一个带有一些SQLAlchemy模型的Flask应用程序,并且我在尝试将一些模型模拟为某些接收某些模型作为参数的方法时遇到了一些问题.
我正在尝试做的玩具版本是这样的.假设我有一个模型给出:
// file: database.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
birthday = db.Column(db.Date)
Run Code Online (Sandbox Code Playgroud)
这是在使用应用工厂模式构建的应用中导入的:
// file: app.py
from flask import Flask
from database import db
def create_app():
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db.init_app(app)
Run Code Online (Sandbox Code Playgroud)
还有一些需要Useras参数的函数:
// file: actions.py
import datetime
SECONDS_IN_A_YEAR = 31556926
def get_user_age(user):
return (datetime.date.today() - user.birthday).total_seconds() // SECONDS_IN_A_YEAR
Run Code Online (Sandbox Code Playgroud)
此外,应用程序中应该导入app.py并注册的几个视图和蓝图,后者在get_user_age某处调用该函数.
我的问题是:我想测试这个功能 get_user_age而无需创建应用程序,注册假数据库等等.这不是必需的,该功能完全独立于它在Flask应用程序中使用的事实.
所以我尝试过:
import unittest
import datetime
import mock …Run Code Online (Sandbox Code Playgroud) 想象一下,我有一个包含许多不同命令的大型CLI应用程序(例如,想象一下image-magick).
我想将这个应用程序组织成模块等等.所以,click.group某个地方会有一个主人:
#main.py file
@click.group()
def my_app():
pass
if __name__ == "__main__":
my_app()
Run Code Online (Sandbox Code Playgroud)
可以在定义命令的每个模块中导入:
from main import my_app
# command_x.py
@my_app.command()
def command_x():
pass
Run Code Online (Sandbox Code Playgroud)
问题是我遇到了循环导入问题,因为main.py文件一无所知command_x.py,我必须在调用main部分之前导入它.
这也发生在Flask中,通常用app工厂模式处理.通常,您会在视图之前创建应用程序:
app = Flask("my_app")
@my_app.route("/")
def view_x():
pass
if __name__ == "__main__":
app.run()
Run Code Online (Sandbox Code Playgroud)
在app工厂模式中,您推迟了蓝图的"注册":
# blueprints.py
blueprint = Blueprint(yaddayadda)
@blueprint.route("/")
def view_x():
pass
Run Code Online (Sandbox Code Playgroud)
并建立一个知道如何构建应用程序并注册蓝图的工厂:
#app_factory.py
from blueprints import view_x
def create_app():
app = Flask()
view_x.init_app(app)
return app
Run Code Online (Sandbox Code Playgroud)
然后,您可以创建一个脚本来运行该应用程序:
#main.py
from app_factory import create_app
if __name__ == "__main__":
app = …Run Code Online (Sandbox Code Playgroud) python command-line-interface factory-pattern flask python-click
我试图理解nix是如何工作的.为此,我尝试创建一个简单的环境来运行jupyter笔记本.
当我运行命令时:
nix-shell -p "\
with import <nixpkgs> {};\
python35.withPackages (ps: [\
ps.numpy\
ps.toolz\
ps.jupyter\
])\
"
Run Code Online (Sandbox Code Playgroud)
我得到了我的期望 - 在python和安装的所有软件包的环境中的shell,以及路径中可访问的所有预期命令:
[nix-shell:~/dev/hurricanes]$ which python
/nix/store/5scsbf8z3jnz8ardch86mhr8xcyc8jr2-python3-3.5.3-env/bin/python
[nix-shell:~/dev/hurricanes]$ which jupyter
/nix/store/5scsbf8z3jnz8ardch86mhr8xcyc8jr2-python3-3.5.3-env/bin/jupyter
[nix-shell:~/dev/hurricanes]$ jupyter notebook
[I 22:12:26.191 NotebookApp] Serving notebooks from local directory: /home/calsaverini/dev/hurricanes
[I 22:12:26.191 NotebookApp] 0 active kernels
[I 22:12:26.191 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/?token=7424791f6788af34f4c2616490b84f0d18353a4d4e60b2b5
Run Code Online (Sandbox Code Playgroud)
因此,我创建了一个default.nix包含以下内容的单个文件的新文件夹:
with import <nixpkgs> {};
python35.withPackages (ps: [
ps.numpy
ps.toolz
ps.jupyter
])
Run Code Online (Sandbox Code Playgroud)
当我nix-shell在这个文件夹中运行时,似乎所有东西PATH都已安装但s未设置:
[nix-shell:~/dev/hurricanes]$ which python
/usr/bin/python
[nix-shell:~/dev/hurricanes]$ …Run Code Online (Sandbox Code Playgroud) 我在python中使用feedparser库从当地报纸上检索新闻(我的目的是在这个语料库上进行自然语言处理),并希望能够从RSS提要中检索许多过去的条目.
我不太熟悉RSS的技术问题,但我认为这应该是可能的(我可以看到,例如,当我移动滚动条时,Google Reader和Feedly可以"按需"执行此操作).
当我执行以下操作时:
import feedparser
url = 'http://feeds.folha.uol.com.br/folha/emcimadahora/rss091.xml'
feed = feedparser.parse(url)
for post in feed.entries:
title = post.title
Run Code Online (Sandbox Code Playgroud)
我只收到了十几个条目.我在考虑数百个.如果可能的话,也许是上个月的所有参赛作品.是否可以仅使用feedparser执行此操作?
我打算从rss中获取仅包含新闻项的链接,并使用BeautifulSoup解析整个页面以获取我想要的文本.另一种解决方案是跟踪页面中所有本地链接的爬虫,以获取大量新闻,但我想暂时避免这样做.
-
出现的一个解决方案是使用Google Reader RSS缓存:
但要访问它,我必须登录Google阅读器.谁知道我是如何从python那样做的?(我真的不知道关于网络的事情,我通常只讨论数值计算).
我正在寻找一个库来操作动态图。我有一个模拟,在对图的结构进行一些更改(添加和删除边,在无向图上,所有边具有相同的权重)之后,我必须重复计算图的平均测地线长度。
我在我制作的 igraph 上使用了一个快速的 C++ 包装。igraph 用于静态图形,因此每次更改图形时,我都会从头开始重新计算测地线距离。这是一个蒙特卡罗模拟,所以我必须这样做数百万次才能恢复一些统计数据。它开始变得非常缓慢。
所以我寻找带有动态图算法的库,它可以在我删除或添加一条边后重新计算更新平均长度。我找到了一些关于这个主题的论文,但我真的不是专家(我只是一个物理学家,我只是偶然在一个问题上使用图表......我几乎没有数据结构和算法的知识)所以我可以甚至不读论文,更不用说实现算法了。
我发现这个库 LEDA (http://www.algorithmic-solutions.com/leda/) 似乎有一个动态图扩展,但它似乎没有维护(下载免费版本的链接已损坏)并且它是专有的.
有没有其他选择?我正在寻找 C/C++ 库。如果必须的话,也许是 Haskell,我绝对绝望。
所以,我学会了如何在matplotlib中制作可爱的小动画.例如,这个:
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
plt.ion()
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim(0, 1)
ax.set_ylim(-2,2)
dt = 0.01
q = 0.01
t = np.arange(0,1,dt)
x = np.sin(2*np.pi*t)
line, = ax.plot(t,x, '-')
fig.canvas.draw()
for i in xrange(100):
x = (1-q) * x + q* np.random.normal(size = len(t))
line.set_ydata(x)
fig.canvas.draw()
Run Code Online (Sandbox Code Playgroud)
这很有效,非常好.但是我如何使用它制作一部我可以在pdf演示中展示的电影?我试图做,fig.savefig("test.gif")但有一条错误消息表明matplotlib不导出GIF.
有没有办法在不借助外部工具的情况下做到这一点(比如制作大量的png并将它们拼接在一起)?
有时我会让自己在Haskell中使用不同类型的树,我不知道它们的名称是什么,或者在哪里获得有关使用它们的算法或类实例的更多信息,甚至是一些预先存在的代码或库中的hackage.
例子:
标签在树叶或树枝上的二叉树:
data BinTree1 a = Leaf |
Branch {label :: a, leftChild :: BinTree1 a, rightChild :: BinTree1 a}
data BinTree2 a = Leaf {label :: a} |
Branch {leftChild :: BinTree2 a, rightChild :: BinTree2 a}
Run Code Online (Sandbox Code Playgroud)
类似地,树具有每个子节点的标签或所有子节点的通用标签:
data Tree1 a = Branch {label :: a, children :: [Tree1 a]}
data Tree2 a = Branch {labelledChildren :: [(a, Tree2 a)]}
Run Code Online (Sandbox Code Playgroud)
有时候我会开始使用Tree2并且在某种程度上开发它会被重构Tree1,这似乎更容易处理,但我从来没有考虑过它.这里有某种二元性吗?
此外,如果您可以发布一些您认为有用的其他树种,请这样做.
总结:你可以告诉我有关这些树的一切都很有用!:)
谢谢.
编辑:
澄清:这不是功课.只是我通常最终使用这些数据类型并创建实例(Functor,Monad等等),也许如果我新建他们的名字,我会发现有实现的库和更多的理论信息.
通常当Hackage上的库在名称中有Tree时,它实现了BinTree2或某些版本的非二叉树,只有叶子上有标签,所以在我看来,Tree2和BinTree2可能有一些其他名称或标识符.
此外,我觉得可能存在某种二元性或同构性,或者将使用Tree1的代码转换为使用Tree2进行某些转换的代码的方法.在那儿?可能只是一个印象.
我正在更新一些计算,其中我使用pymc2到pymc3,当我在模型上有一些离散的随机变量时,我在采样器行为方面遇到了一些问题.例如,请考虑使用pymc2的以下模型:
import pymc as pm
N = 100
data = 10
p = pm.Beta('p', alpha=1.0, beta=1.0)
q = pm.Beta('q', alpha=1.0, beta=1.0)
A = pm.Binomial('A', N, p)
X = pm.Binomial('x', A, q, observed=True, value=data)
Run Code Online (Sandbox Code Playgroud)
它并不代表任何东西,它只是一个模型,其中一个未观察到的变量是离散的.当我用pymc2对这个模型进行采样时,得到以下结果:
mcmc = pm.MCMC(model)
mcmc.sample(iter=100000, burn=50000, thin=100)
plot(mcmc)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用PYMC3时,我得到了这个:
with pm.Model() as model:
N = 100
p = pm.Beta('p', alpha=1.0, beta=1.0)
q = pm.Beta('q', alpha=1.0, beta=1.0)
A = pm.Binomial('A', N, p)
X = pm.Binomial('x', A, q, observed=10)
with model:
start = pm.find_MAP()
with model:
step = pm.NUTS() …Run Code Online (Sandbox Code Playgroud) 我正在进行模拟,我必须计算很多平均值,我认为使用boost :: accumulators是个好主意.问题是我想要平均的量之一是对称矩阵,其对角线事先已知.所以如果i <j,我只需要计算Q [i] [j]的平均值.
起初我得到的印象是我可以使用
using namespace boost::accumulators;
using namespace boost::numeric::ublas;
typedef accumulator_set<double, stats<tag::mean> > accumulator;
symmetric_matrix<accumulator, lower> foo; // a symmetric matrix of accumulators
Run Code Online (Sandbox Code Playgroud)
拿着我的蓄电池.但后来我发现这个symmetric_matrix结构可能只适用于保存数值(它们定义了算术运算)或者以某种方式针对这种数据进行了优化.这是正确的吗?
如果来自boost的symmetric_matrix不合适,我需要一个数据结构,它可以保持对称矩阵的下三角形而没有对角线,并且它必须适合保持累加器并具有类似矩阵的语法.这是从一些图书馆随处可用的吗?如果没有,这种结构是否容易实现?
我正在对字符串进行一系列预处理步骤,并且正在考虑使用HLists 来提高步骤的安全性。某些处理步骤必须在其他处理步骤之后运行,所以我正在考虑在类型系统中对其进行编码。我的第一次尝试是:
trait Step
trait Raw extends Step
trait A extends Step
trait B extends Step
trait DependsOnA extends Step
trait DependsOnB extends Step
case class ToBeProcessed[S <: Step](value: String)
object ToBeProcessed {
def raw(input: String): ToBeProcessed[Raw] = ...
def doA(input: ToBeProcessed[Raw]): ToBeProcessed[A] = ...
def doB(input: ToBeProcessed[A]): ToBeProcessed[B] = ...
def doDependsOnA(input: ToBeProcessed[B]): ToBeProcessed[DependsOnA] = ...
def doDependsOnB(input: ToBeProcessed[DependsOnA]): ToBeProcessed[DependsOnB] = ...
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为它迫使我按顺序调用所有内容doA> doB> doDependsOnA> doDependsOnB,这是它工作的可能顺序,但是:
doC我必须改变与它无关的事物的类型所以我开始阅读 …