小编car*_*mom的帖子

在烧瓶应用程序启动后运行代码

我的目标是在Flask应用程序启动后运行任意代码.这是我得到的:

def run():
    from webapp import app
    app.run(debug=True, use_reloader=False)
Run Code Online (Sandbox Code Playgroud)

理想情况下,我可以这样做:

def run():
    from webapp import app
    app.run(debug=True, use_reloader=False)
    some_code()
Run Code Online (Sandbox Code Playgroud)

但代码不会继续app.run(),所以some_code()永远不会运行.

我目前正在处理的解决方案是在app.run()的一个单独的线程中运行some_code(),创建一个设置它的第一个请求函数:

app.is_running = True
Run Code Online (Sandbox Code Playgroud)

然后获取some_code()以向app发送基本请求,以便"在第一次请求之前"代码运行.这相当复杂,难以记录.我宁愿使用已经在Flask中提供的app.is_running参数,或者使用@app.after_server_start装饰器,但据我所知,这些都不存在.

帮我改进这段代码?


遗腹:每当我想到这个问题,它都会让我希望@app.after_server_start装饰品存在.

python flask flask-script

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

日期时间对象需要深层复制吗?

所以我注意到了另一周通过运行实验,尽管是一种高级语言,你可以通过像这样分配变量来复制变量:

a = 5    
b = a
print(b) # 5
b = 3
print(b) # 3
print(a) # 5
Run Code Online (Sandbox Code Playgroud)

...如果你对待词典或者可能以相同的方式列出词典,它就会失败!我在我的代码中创建了一个错误,另一周认为字典以相同的方式工作.发现要制作一个正确的,深层的副本你需要去:

b = dict(a)
Run Code Online (Sandbox Code Playgroud)

无论如何,我忙于使用日期时间对象而我正在操纵它们就好像它们是整数一样,现在开始对这是否合适感到有些紧张.在它工作的地方看起来有点武断,在它没有的地方,我是否每次只是为了检查它的行为而进行实验?可以猜测字符串可能像整数一样工作,但不确定行为在哪里发生变化.

可以看到有人问过这个用于PHP但是对于Python我倾向于认为任何datetime对象的赋值都是正确的,深度复制并且不会意外地与原始变量混淆.有人有确切消息么?

python datetime python-3.x

18
推荐指数
2
解决办法
9827
查看次数

将%matplotlib笔记本后端的输出包含在ipynb中作为SVG

从几年前的回答显示了如何做jupyter笔记本创建图形为SVG.解决方案是告诉InlineBackend使用svg输出.

import matplotlib.pyplot as plt
%matplotlib inline
%config InlineBackend.figure_format = 'svg'
plt.plot(...)
Run Code Online (Sandbox Code Playgroud)

这将导致所有图像在笔记本内部以及生成的ipynb文件中以svg格式显示; 该文件将有一行像

"data": {  "image/svg+xml": [  "<?xml  .....
Run Code Online (Sandbox Code Playgroud)

在里面.

问题是,如果使用%matplotlib notebook后端,这不起作用.%config InlineBackend不会更改笔记本后端的任何内容,因此输出文件包含PNG图像

"data": { "text/html": [  "<img src=\"data:image/png;base64,iVBORw0....
Run Code Online (Sandbox Code Playgroud)

所以问题是:如何让ipynb文件包含使用%matplotlib notebook后端创建的SVG图像的静态版本?

@mark jay从一个月前发表了一个小评论,他想做我现在想做的事情,但没有回答或暗示这个评论.

在我的代码中,我直接从数据框绘制:

%matplotlib notebook
import pandas as pd
df = pd.read_sql(sql1, connection)
...
...
df.plot(subplots=True, kind='bar')
Run Code Online (Sandbox Code Playgroud)

这个功能非常好,无需导入,matplotlib.pyplot但也无法强制将图形创建为svg.我想如果基本情况可行,我可以修改绘图代码,因此它不涉及pandas或数据帧.

python matplotlib pandas jupyter-notebook

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

在课堂上运行所有功能

我试图在我的课程中运行所有的功能,而不是单独输入它们.

class Foo(object):
    def __init__(self,a,b):
        self.a = a
        self.b=b

    def bar(self):
        print self.a

    def foobar(self):
        print self.b
Run Code Online (Sandbox Code Playgroud)

我想这样做但是有一个循环,因为我的实际类有大约8-10个函数.

x = Foo('hi','bye')
x.bar()
x.foobar()
Run Code Online (Sandbox Code Playgroud)

python class

9
推荐指数
3
解决办法
9696
查看次数

理解 json.loads() 中的 object_pairs_hook

在此处的文档中 - https://docs.python.org/3/library/json.html

它说object_pairs_hook

object_pairs_hook 是一个可选函数,它将使用任何用有序对列表解码的对象文字的结果调用。将使用 object_pairs_hook 的返回值而不是 dict。此功能可用于实现自定义解码器。如果还定义了 object_hook,则 object_pairs_hook 优先。

这个答案中有一个相当令人印象深刻的例子。

我不明白什么是“钩子”或者这个功能是如何工作的。文档并没有真正清楚地解释它。我现在想写一个(否则我正在解析的字符串上会出现一堆字符串方法)

有没有人知道有关此功能的教程或对其有足够的了解以详细解释它的工作原理?他们似乎在文档中假设您知道黑匣子中发生了什么json.loads()

python parsing json python-3.x

8
推荐指数
2
解决办法
7737
查看次数

jupyter 不使用 pyenv 设置的版本

所以这一切都在不同的机器上完美运行。不得不让它在我的桌面上工作。pyenv在那里安装了我刚刚添加的不同版本miniconda3-latest,它们在提示中很好地显示(.python-version下面的目录中有一个文件)然后pip install pymysql在该提示后运行。当我现在在该提示下运行 python 时,它可以正常导入:

(miniconda3-latest) cardamom@pegasus ~/Desktop/Project $ python
Python 3.6.0 |Continuum Analytics, Inc.| (default, Dec 23 2016, 12:22:00) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymysql
>>> 
Run Code Online (Sandbox Code Playgroud)

...但是如果我启动 jupyter notebook

(miniconda3-latest) cardamom@pegasus ~/Desktop/Project $ jupyter notebook
[I 13:38:28.714 NotebookApp] [nb_conda_kernels] enabled, 2 kernels found
[I 13:38:29.216 NotebookApp] The port 8888 is already in use, trying another port.
[I …
Run Code Online (Sandbox Code Playgroud)

python pyenv jupyter-notebook

7
推荐指数
2
解决办法
8559
查看次数

如何有效地计算文档流中的文档之间的相似性

我收集Text文档(在Node.js中),其中一个文档i表示为单词列表.考虑到新文档是作为一种文档流出现的,计算这些文档之间相似性的有效方法是什么?

我目前在每个文档中的单词的标准化频率上使用cos相似性.由于可扩展性问题,我不使用TF-IDF(术语频率,反向文档频率),因为我收到的文档越来越多.

原来

我的第一个版本是当前可用的文件开始,计算一个大项-文档矩阵A,再计算S = A^T x A,这样S(i, j)是后(通过归一化后norm(doc(i))norm(doc(j)))文档之间的余弦相似性ij词频率分别为doc(i)doc(j).

对于新文件

收到新文件后我该怎么办doc(k)?好吧,我必须计算这个文档与之前所有文档的相似性,这不需要构建一个完整的矩阵.我可以把doc(k) dot doc(j)所有以前的内在产品j,结果S(k, j),这是伟大的.

麻烦

  1. S在Node.js中计算真的很长.实际上太长了!所以我决定创建一个C++模块,它可以更快地完成整个过程.它确实如此!但我不能等待它,我应该能够使用中间结果.而我所说的"不等待它"就是两者

    一个.等待计算完成,但也
    b.等待矩阵A建立(这是一个很大的矩阵).

  2. 计算new S(k, j)可以利用文档比所有给定单词(我用来构建整个矩阵A)的单词少得多的事实.因此,在Node.js中执行它看起来更快,避免了大量额外资源来访问数据.

但有没有更好的方法呢?

注意:我开始计算的原因S是我可以轻松地A在Node.js中构建我可以访问所有数据的地方,然后在C++中进行矩阵乘法并将其返回到Node.js中,这会加速整个事情的发展. .但是现在计算S变得不切实际,它看起来毫无用处.

注2:是的,我不必计算整体S,我可以计算右上角的元素(或左下角的元素),但这不是问题.时间计算问题不是那个顺序.

nlp stream node.js cosine-similarity term-document-matrix

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

statsmodels seasonal_decompose - 什么是天真的呢?

一直在使用Python中的时间序列,并使用sm.tsa.seasonal_decompose.在文档中,他们介绍了这样的函数:

我们添加了一个天真的季节性分解工具,与R的相同decompose.

以下是文档及其输出的代码副本:

import statsmodels.api as sm

dta = sm.datasets.co2.load_pandas().data
# deal with missing values. see issue
dta.co2.interpolate(inplace=True)

res = sm.tsa.seasonal_decompose(dta.co2)
res.plot()
Run Code Online (Sandbox Code Playgroud)

季节性分解图

他们说这是天真的,但没有关于它有什么问题的免责声明.有人知道吗?

python r time-series statsmodels

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

两个pandas数据帧中共有的列列表

我正在考虑对数据帧进行合并操作,每个数据帧都有大量列.不希望结果具有两个具有相同名称的列.我试图查看两个框架之间共同的列名列表:

import pandas as pd

a = [{'A': 3, 'B': 5, 'C': 3, 'D': 2},{'A': 2,  'B': 4, 'C': 3, 'D': 9}]
df1 = pd.DataFrame(a)
b = [{'F': 0,  'M': 4,  'B': 2,  'C': 8 },{'F': 2,  'M': 4, 'B': 3, 'C': 9}]
df2 = pd.DataFrame(b)

df1.columns
>> Index(['A', 'B', 'C', 'D'], dtype='object')
df2.columns
>> Index(['B', 'C', 'F', 'M'], dtype='object')

(df2.columns).isin(df1.columns)
>> array([ True,  True, False, False])
Run Code Online (Sandbox Code Playgroud)

如何在Index对象上操作NumPy布尔数组,以便它只返回一个共同列的列表?

python python-3.x pandas

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

装饰在单击命令之上

我正在尝试装饰一个已经由@click命令行装饰和调用的函数。

大写输入的正常装饰可能如下所示:

标准装饰.py

def capitalise_input(f):
    def wrapper(*args):
        args = (args[0].upper(),)
        f(*args)
    return wrapper

@capitalise_input
def print_something(name):
    print(name)

if __name__ == '__main__':
    print_something("Hello")
Run Code Online (Sandbox Code Playgroud)

然后从命令行:

$ python standard_decoration.py
HELLO
Run Code Online (Sandbox Code Playgroud)

单击文档中的第一个示例如下所示:

你好.py

import click

@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
              help='The person to greet.')
def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for x in range(count):
        click.echo('Hello %s!' % name)

if __name__ == '__main__':
    hello()
Run Code Online (Sandbox Code Playgroud)

从命令行运行时:

$ python hello.py --count=3
Your …
Run Code Online (Sandbox Code Playgroud)

python command-line-arguments python-3.x python-decorators python-click

6
推荐指数
2
解决办法
2397
查看次数