小编ElR*_*udi的帖子

单个angularjs promise上的多个`.then()` - 都使用_original_数据

我正在写一个依赖承诺的angularjs应用程序,虽然它正在工作,但我想知道我是否可以更优化地做到这一点.

在代码的开头,我正在创建一个获取一些数据的承诺.完成后,我想运行几个都使用这些数据的函数.这些函数附加在应用程序的不相关部分,因此我不知道它们附加到承诺的顺序.它们也不需要按顺序完成.

app.service("Fetch", function ($q){
    return function() {
        var def = $q.defer();
        somelibrary.asynccall(function(error, data){ //callback
            if (error) def.reject(error);
            else def.resolve(data);
        });
        return def.promise;
    };
});

app.controller("ctrl", function ($scope, Fetch) {
    var prom = Fetch();

    //somewhere:
    prom.then(function(data){$scope.var1 = data["VAR1"];});
    //somewhere else:
    prom.then(function(data){$scope.var2 = data["VAR2"]});
});
Run Code Online (Sandbox Code Playgroud)

这里的主要缺点是后者then只在前面的那些完成时执行,这在此不是必需的.

另外,我需要return data在每个内部添加function(data){...},否则以下then()没有data可用.

有没有其他方法可以做到这一点,更适合这种情况?


编辑:正如@jfriend00所提到的,我错了; 事实上,只要成功解决了承诺,这两个函数就会并行运行,并且它们不会被链接,因此不会相互依赖.谢谢你的帮助

javascript promise angularjs

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

就地更改熊猫系列/数据框列的类型

TL;DR:我想就地更改熊猫数据框列的数据类型。


我有一个熊猫数据框:

df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6.1]})
Run Code Online (Sandbox Code Playgroud)

默认情况下,它的列在我的系统上分配了“int64”和“float64”:

df.dtypes
Out[172]: 
a      int64
b    float64
dtype: object
Run Code Online (Sandbox Code Playgroud)

因为我的数据框会非常大,所以我想在创建数据框后将列数据类型设置为 int32 和 float32。我知道我怎么能做到这一点:

df['a'] = df['a'].astype(np.int32)
df['b'] = df['b'].astype(np.float32)
Run Code Online (Sandbox Code Playgroud)

或者,在一个步骤中:

df = df.astype({'a':np.int32, 'b':np.float32})
Run Code Online (Sandbox Code Playgroud)

我的数据框的 dtypes 确实是:

df.dtypes
Out[180]: 
a      int32
b    float32
dtype: object
Run Code Online (Sandbox Code Playgroud)

但是:这看起来很笨拙,必须重新分配系列,尤其是。因为许多inplacePandas方法都有一个kwarg。但是,使用它似乎不起作用(从顶部的相同数据框开始):

df['a'].astype(np.int32, inplace=True)

df.dtypes
Out[187]: 
a      int64
b    float64
dtype: object
Run Code Online (Sandbox Code Playgroud)

有什么我在这里俯瞰的吗?这是故意的吗?使用Series代替DataFrame对象时显示相同的行为。

非常感谢,

python pandas

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

d3创建对象而不附加

我正在使用d3进行图形化,我正在尝试创建一个svg对象,以便稍后添加到DOM中.

我曾经有过

var svg = d3.select(el).append("svg");
var graph = svg.append("g")
...etc...
Run Code Online (Sandbox Code Playgroud)

由于我不打算进入的原因,我想在将svg元素附加到DOM之前创建元素.

所以我做了

var svg = d3.select(document.createElementNS(d3.ns.prefix.svg, 'svg'))
var graph = svg.append("g")
...etc...
Run Code Online (Sandbox Code Playgroud)

,这是有效的,并且在调试时,我可以看到这svg是一个1元素的数组,孩子很好地附加.

问题来自于这append一步:

d3.select(el).append(svg);
Run Code Online (Sandbox Code Playgroud)

在那里,我得到一个错误Error: Failed to execute 'createElementNS' on 'Document': The qualified name provided ('[object SVGSVGElement]') contains the invalid name-start character '['.我已经看过这里:如何创建"svg"对象而不附加它?但似乎这正是他们的建议.

知道为什么会这样吗?我试过追加svg[0],但也没有运气.它似乎append()只需要字符串作为参数.


编辑:https : //github.com/mbostock/d3/wiki/Selections#append状态下的d3参考

selection.append(name)...... ......"可以将名称指定为常量字符串,也可以指定为返回要追加的DOM元素的函数."

因此我试过了

d3.select(el).append(function(){return svg;});
Run Code Online (Sandbox Code Playgroud)

但是失败了 Error: Failed to execute 'appendChild' on 'Node': The new …

javascript svg d3.js

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

当基类返回可导入模块中的子类实例时,避免循环导入

概括

TLDR:当基类在可导入模块中返回子类实例时,如何避免循环导入错误?

我从其他位置/问题收集了一些解决方案(参见下面的 AD),但恕我直言,没有一个是令人满意的。

初始点

基于这个这个问题,我有以下假设的工作示例作为起点:

# onefile.py

from abc import ABC, abstractmethod

class Animal(ABC):
    def __new__(cls, weight: float):
        if cls is Animal:
            # Try to return subclass instance instead.
            for subcls in [Dog, Cat]:
                try:
                    return subcls(weight)
                except ValueError:
                    pass
            raise NotImplementedError("No appropriate subclass found.")
        return super().__new__(cls)

    @property
    @abstractmethod
    def weight(self) -> float:
        """weight of the animal in kg."""
        ...


class Dog(Animal):
    def __init__(self, weight: float = 5):
        if not (1 < weight < …
Run Code Online (Sandbox Code Playgroud)

python inheritance circular-dependency

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

Excel 中与区域设置无关的文本函数

我需要在 excel 中格式化日期,并且我正在尝试使用该TEXT公式。问题在于 Excel 对参数的解释会随着语言环境的变化而变化。

例如:如果我在单元格 A1 中有一个日期,我想以年月日格式转换为文本,=TEXT(A1, "yyyy-mm-dd")如果我的电脑有英语语言环境,我必须使用,但是=TEXT(A1, "jjjj-MM-tt")(我孩子你不是,M必须是大写)如果它有德语语言环境。这使得文档不可移植。(第二个参数是纯文本,因此在更改区域设置时不会转换。)

评论:

  • 这只是一个例子,我知道=YEAR(A1) & "-" & TEXT(MONTH(A1), "00") & "-" & TEXT(DAY(A1), "00")在这种情况下我可以做很长时间。我想知道更一般的情况。

  • 日期不应该只是以某种格式显示,它实际上应该是一个字符串。对于查看文件的人来说,这没有什么区别,但是在其他公式中使用它时,它确实如此。

  • 我可以用 VBA 写一个 UDF 来解决这个问题,但我不能在这个文档中使用 VBA。

  • 我不在乎更改月份的名称等。如果月份的名称是 June 或 Juni,这取决于语言环境。

  • 我想强调的是,该问题是由 PC 的语言环境引起的 - 而不是由于 MS Office 版本的 GUI 语言。在上面的例子中,Excel 的 GUI 和公式在两个例子中都是英文的;我刚刚更改了机器上的语言环境。

非常感谢

excel

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

在 github 上测试超时但在本地完成

我的 python 项目中有pytest单元测试,每次推送到 github 时都会运行该测试。最近,(windows, python 3.9) 和 (windows, python 3.10) 上的测试即使在 6 小时后也没有完成,我试图找出原因。

对于上下文:

  • 这不仅仅是 python 版本,因为 python 3.9 和 3.10 在 mac 和 linux 上完成。另外,它不仅仅是 Windows 版本,因为 Windows 已经完成了 python 3.8。他们都最多在 1 小时内完成。

    在此输入图像描述

  • 在本地,使用 python 3.9 的 Windows 在 <1 小时内完成。在全新的 conda 虚拟环境中也是如此。

    在此输入图像描述

  • 即使推送以前不会造成问题的代码版本,现在也会遇到超时。所以我认为这不是我的代码中的东西,而是依赖项或 github 操作的设置方式(?)。我对此了解不够,无法做出明智的评估。

非常感谢任何调试方面的帮助。

是该项目,是测试结果的示例。


编辑:我查看了 3 个 Windows 案例中的每一个的安装日志并进行了比较。以下是差异:

{'missing': {'typing-extensions': {'38': '4.4.0', '39': '4.4.0'}},
 'different': {'setuptools': {'38': '56.0.0', '39': '58.1.0', '310': '63.2.0'}}}
Run Code Online (Sandbox Code Playgroud)

如果这是罪魁祸首,我会感到惊讶setuptools- 它不是只在安装软件包时使用吗?此外,Mac 上的 3.9 …

python numpy pytest pandas github-actions

7
推荐指数
0
解决办法
769
查看次数

数组中所有对象之间的javascript函数共享

我正在尝试向每个对象都可以访问的对象数组添加一个函数,但不需要将它们分别添加到每个对象中.

让我举个简短的例子.

假设我有一个包含类似对象的数组,每个对象都有一个属性x和一个属性y:

var objects = [{x:1, y:2},
               {x:0, y:5},
               {x:3, y:14}
              ];
Run Code Online (Sandbox Code Playgroud)

我想计算任何对象的x和的总和y.

第一种方法:

为了计算给定对象的总和,可以将此对象传递给预定义函数,如下所示:

function xySum1(o) {return o.x + o.y;}

objects[0].x       //--> returns 1
objects[0].y       //--> returns 2
xySum1(objects[0]) //--> returns 3
Run Code Online (Sandbox Code Playgroud)

这是非常丑陋和不令人满意的,因为访问xy属性是不同的.此外,我的代码位于不同的位置,并且该函数xySum1不易被识别为被创建以对数组中的对象进行操作.

第二种方法:

可以循环遍历数组并将函数作为属性添加到每个对象:

for (var i=0; i < objects.length; i++) {
    objects[i].xySum2 = function() {return this.x + this.y;};
}
Run Code Online (Sandbox Code Playgroud)

现在,总和是通过

objects[0].x        //--> returns 1
objects[0].y        //--> returns 2
objects[0].xySum2() //--> returns 3
Run Code Online (Sandbox Code Playgroud)

这要好得多.

问题

但是,这种方法存在问题.首先,当我向数组添加一个新元素时

objects.push({x:5,y:21}); …
Run Code Online (Sandbox Code Playgroud)

javascript

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

Pandas:将每小时值重新采样为带有偏移量的每月值

我想将pandas.Series每小时DatetimeIndex到每月的值聚合起来 - 同时考虑到午夜的偏移。

例子

考虑以下跨度约为 1.5 个月的(统一)时间序列。

import pandas as pd
hours = pd.Series(1, pd.date_range('2020-02-23 06:00', freq = 'H', periods=1008))
hours
# 2020-02-23 06:00:00    1
# 2020-02-23 07:00:00    1
#                       ..
# 2020-04-05 04:00:00    1
# 2020-04-05 05:00:00    1
# Freq: H, Length: 1000, dtype: int64
Run Code Online (Sandbox Code Playgroud)

我想将这些总结为几个月,同时考虑到在此用例中这些日子从 06:00 开始。结果应该是:

2020-02-01 06:00:00    168
2020-03-01 06:00:00    744
2020-04-01 06:00:00     96
freq: MS, dtype: int64
Run Code Online (Sandbox Code Playgroud)

我怎么做??


我尝试过的方法以及有效的方法

python datetime pandas pandas-resample

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

包装Python超类的所有方法

如果我无法更改超类的代码,有没有办法包装超类的所有方法?

作为一个最小的工作示例,考虑这个基类Base,它有许多返回自身新实例的方法,以及派生类Child

class Base:
    
    def __init__(self, val):
        self.val = val
        
    def newinst_addseven(self):
        return Base(self.val + 7)
    
    def newinst_timestwo(self):
        return Base(self.val * 2)
    
    # ...

class Child(Base):
    
    @property
    def sqrt(self):
        return math.sqrt(self.val)
Run Code Online (Sandbox Code Playgroud)

这里的问题是调用返回, 而不是 的childinstance.newinst_addseven()实例。BaseChild

有没有办法包装Base类的方法以强制返回该类型的值Child

有了这样的包装:

def force_child_i(result):
    """Turn Base instance into Child instance."""
    if type(result) is Base:
        return Child(result.val)
    return result

def force_child_f(fun):
    """Turn from Base- to Child-instance-returning function."""
    def wrapper(*args, **kwargs):
        result = fun(*args, **kwargs)
        return force_child_i(result) …
Run Code Online (Sandbox Code Playgroud)

python inheritance class

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

在新的索引级别下合并熊猫数据框

我有2个pandas DataFrame小号actexp我想结合成一个单一的数据帧df

import pandas as pd
from numpy.random import rand
act = pd.DataFrame(rand(3,2), columns=['a', 'b'])
exp = pd.DataFrame(rand(3,2), columns=['a', 'c'])
Run Code Online (Sandbox Code Playgroud)
act #have

          a         b
0  0.853910  0.405463
1  0.822641  0.255832
2  0.673718  0.313768

exp #have

          a         c
0  0.464781  0.325553
1  0.565531  0.269678
2  0.363693  0.775927
Run Code Online (Sandbox Code Playgroud)

Dataframedf应该包含比actand多一个列索引级别exp,并且每个都包含在自己的级别 0 标识符下,如下所示:

df  #want

        act                 exp          
          a         b         a         c
0  0.853910  0.405463  0.464781  0.325553
1  0.822641  0.255832  0.565531 …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

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