小编Ben*_*Ben的帖子

python decorator中的变量范围

我在Python 3装饰器中遇到了一个非常奇怪的问题.

如果我这样做:

def rounds(nr_of_rounds):
    def wrapper(func):
        @wraps(func)
        def inner(*args, **kwargs):
            return nr_of_rounds
        return inner
    return wrapper
Run Code Online (Sandbox Code Playgroud)

它工作得很好.但是,如果我这样做:

def rounds(nr_of_rounds):
    def wrapper(func):
        @wraps(func)
        def inner(*args, **kwargs):
            lst = []
            while nr_of_rounds > 0:
                lst.append(func(*args, **kwargs))
                nr_of_rounds -= 1
            return max(lst)
        return inner
    return wrapper
Run Code Online (Sandbox Code Playgroud)

我明白了:

while nr_of_rounds > 0:
UnboundLocalError: local variable 'nr_of_rounds' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

换句话说,nr_of_rounds如果我在返回时使用它,我可以在内部函数中使用,但我不能用它做任何其他事情.这是为什么?

python decorator python-3.x python-decorators

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

Haskell中两个列表的元素的所有组合

给出两个列表,[a, b]并且[c, d],我想得到以下结果:

[(a,c), (a,d), (b,c), (b,d)]
Run Code Online (Sandbox Code Playgroud)

我怎么能在Haskell中做到这一点?是否有内置功能,或者我应该自己实现?

combinations haskell tuples list

17
推荐指数
5
解决办法
8117
查看次数

选择自动完成角度指令

我正在寻找一种方法让我选择一个自动完成字段.我知道angularJS指令可以为您提供自动完成功能,但这些指令不允许输入名称(用户看到的内容)和输入值(系统使用的内容)不同.但是,我需要一个选择框,因为选项名称(用户将看到)和选项值(系统将使用)是不同的.

我知道jQuery的这个插件,selectToAutocomplete,它非常整洁并且运行良好,但我更愿意尽可能多地使用AngularJS.是否有针对jQuery selectToAutocomplete的AngularJS替代方案?

javascript jquery autocomplete angularjs

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

Peewee中的字符串匹配(SQL)

我试图在Peewee中查询应该具有特定子字符串的结果.

例如,如果我只想在名称中包含"Physics"的活动:

schedule = Session.select().join(Activity).where(Activity.name % "%Physics%").join(Course).join(StuCouRel).join(Student).where(Student.id == current_user.id)
Run Code Online (Sandbox Code Playgroud)

上面的示例没有给出任何错误,但无法正常工作.

在python中,我会这样做if "Physics" in Activity.name,所以我正在寻找一个可以在查询中使用的等价物.

sql peewee

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

为什么这一点自由定义在Haskell中不起作用?

我试着做出以下函数定义:

relativelyPrime x y = gcd x y == 1
Run Code Online (Sandbox Code Playgroud)

点免费:

relativelyPrime = (== 1) . gcd
Run Code Online (Sandbox Code Playgroud)

但是,这给了我以下错误:

Couldn't match type ‘Bool’ with ‘a -> Bool’
Expected type: (a -> a) -> a -> Bool
  Actual type: (a -> a) -> Bool
Relevant bindings include
  relativelyPrime :: a -> a -> Bool (bound at 1.hs:20:1)
In the first argument of ‘(.)’, namely ‘(== 1)’
In the expression: (== 1) . gcd
In an equation for ‘relativelyPrime’:
    relativelyPrime = (== 1) …
Run Code Online (Sandbox Code Playgroud)

haskell pointfree

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

AngularJS ng-repeat over multiple tr

我正在尝试使用以下代码(数据来自API):

...
<tbody ng-repeat="verbinding in data.connection" style="border-bottom:2px solid black;">

    <tr>
        <td></td>
        <td></td>
        <td>{{verbinding.departure.time  * 1000 | date:'HH:mm'}}</td>
        <td>{{verbinding.departure.platform}}</td>
        <td><a href="/liveboard/{{verbinding.departure.stationinfo.id}}">{{verbinding.departure.station}}</td>
    </tr>

    <tr ng-if="verbinding.departure.vehicle == verbinding.arrival.vehicle">
        <td colspan = "5" style="text-align:center;">{{verbinding.departure.vehicle}}</td>
    </tr>
<span ng-if="verbinding.departure.vehicle != verbinding.arrival.vehicle" ng-repeat="via in verbinding.vias.via">
    <tr>
        <td>{{via.arrival.time * 1000 | date:'HH:mm'}}</td>
        <td>{{via.arrival.platform}}</td>
        <td>{{via.departure.time * 1000 | date:'HH:mm'}}</td>
        <td>{{via.departure.platform}}</td>
        <td><a href = "/liveboard/{{via.stationinfo.id}}">{{via.station}}</a></td>
    </tr>
    <tr>
        <td colspan = "5">{{via.vehicle.id}}</td>
    </tr>
</span>
...
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用.我使用它的原因span是因为我需要两个包含两个trs.以下工作:

...
<tr ng-if="verbinding.departure.vehicle != verbinding.arrival.vehicle" ng-repeat="via in verbinding.vias.via">
    <td>{{via.arrival.time * 1000 …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs angularjs-ng-repeat

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

orderBy 可以与 AngularUI typeahead 一起使用吗?

这个问题与我问的另一个问题有关

我已经设法让 AngularUI Typeahead 正常工作。但是,我的 orderBy 过滤器似乎没有执行任何操作。

此选择框正确排序所有内容(距离是自定义函数):

<select ng-model="fromStation"
ng-options="item.name for item in stations.station | orderBy:distance">
Run Code Online (Sandbox Code Playgroud)

但是这个提前输入:

<input type="text" ng-model="fromStation" 
typeahead="item as item.name for item in stations.station 
| filter:$viewValue | limitTo:8 | orderBy:distance">
Run Code Online (Sandbox Code Playgroud)

根本不改变顺序(即它仍然按字母顺序排序)。我想要实现的是,当用户输入火车站的第一个字母(在本例中)时,距离他最近且包含该字母的车站将首先出现。是否可以实现此功能,或者此功能尚不可用?

angularjs angular-ui angular-ui-bootstrap angular-ui-typeahead

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

将大型python文件拆分为具有公共依赖关系的模块

在Flask中进行开发时,我想将所有模型,控制器......放在他们自己的独立文件中.这样,我就不必在大文件中查找任何控制器,模型; 它可以保持一切清洁.它看起来如下:

/controllers
    __init__.py
    login.py
    logout.py
    profile.py
Run Code Online (Sandbox Code Playgroud)

所有这些文件都具有(几乎)相同的依赖关系.我不想一遍又一遍地将所有依赖项放在每个文件中.我提出的一个解决方案是使用一个depencies.py文件,它导入所有依赖项,然后我将其包含在每个单独的文件中.

 /controllers
    __init__.py
    dependencies.py (all the imports)
    login.py (import dependencies.py)
    logout.py (import dependencies.py)
    profile.py (import dependencies.py)
Run Code Online (Sandbox Code Playgroud)

但是,这不是一个非常优雅的解决方案.我想知道是否可以做一些__init__.py具有依赖性的东西,然后"包含"单独的文件,并且所有内容都以这种方式运行,这样你实际上不需要在每个文件中包含公共依赖项.

我想做什么的例子(不起作用):

#common dependencies
from app import mail
from flask import session
...
#actual models (which depend on these dependencies)
from user import User
from code import Code
from role import Role
Run Code Online (Sandbox Code Playgroud)

python module

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

在vue.js中重新加载或关闭之前执行一些操作

我有一个Vue.JS应用程序,该beforeDestroy方法试图在关闭或重新加载应用程序之前将一些数据存储在本地存储中。仅供参考:

beforeDestroy: function() {
  localStorage.setItem('preference', this.preference);
  ...
}
Run Code Online (Sandbox Code Playgroud)

但是,关闭或重新加载应用程序实际上都不会调用此方法。如何确保在关闭应用程序之前调用此方法?

javascript vue.js

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

为什么我不能在Haskell中匹配比例?

我正在尝试根据比例模式匹配:

isValid :: Ratio Int -> Bool
isValid (num % den) = ...
Run Code Online (Sandbox Code Playgroud)

但是,这会产生:

Parse error in pattern: num % den
Run Code Online (Sandbox Code Playgroud)

有趣的是,Data.Ratio包以这种方式定义numeratordenominator功能,但与:%运营商:

numerator   (x :% _)    =  x
denominator (_ :% y)    =  y
Run Code Online (Sandbox Code Playgroud)

但是,我无法访问后一种运营商.

任何人都可以解释为什么我的模式匹配不起作用以及我如何解决它?

haskell pattern-matching pattern-synonyms

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

自动化深层嵌套函数python

我有一个深度嵌套子项的数据库模型.我试图添加所有底层ID(所有级别)添加到字典条目.我目前的代码如下:

children = obj.children
    for child in children:
        data["children_ids"].append(child.id)
        for child in child.children:
            data["children_ids"].append(child.id)
            for child in child.children:
                data["children_ids"].append(child.id)
                for child in child.children:
                    data["children_ids"].append(child.id)
Run Code Online (Sandbox Code Playgroud)

这段代码功能齐全,但问题相当明显.我不想一遍又一遍地编写相同的代码:它很丑陋,不切实际且不易维护.我该怎么做?

python

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

为什么这个Haskell代码失败了?

我有以下代码(与Project Euler的问题34相关):

fac :: Int -> Int
fac = foldr1 (*) . enumFromTo 1

fe :: Int -> Bool
fe = (==) =<< (sum . map fac . digits 10)

fes :: [Int]
fes = filter fe [3..]
Run Code Online (Sandbox Code Playgroud)

fac工作正常,fe工作正常,但fes给出:

*** Exception: Prelude.foldr1: empty list
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果我用145开始列表(fe在这里返回True),它适用于该数字,然后引发异常.

为什么这段代码失败了?这似乎是一个完全正常的应用程序,filter具有明显有效的功能和单独使用该功能的常规数字列表.

haskell

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