小编use*_*743的帖子

__enter__和__exit__如何在Python装饰器类中工作?

我正在尝试创建一个装饰器类来计算调用函数的次数,但是我收到一条错误消息:

    "TypeError: __exit__() takes exactly 1 argument (4 given)"
Run Code Online (Sandbox Code Playgroud)

我真的不知道我是怎么给它四个论点的.我的代码看起来像这样:

class fcount2(object):
    __instances = {}
    def __init__(self, f):
        self.__f = f
        self.__numcalls = 0
        fcount2.__instances[f] = self

    def __call__(self, *args, **kwargs):
        self.__numcalls += 1
        return self.__f(*args, **kwargs)

    def __enter__(self):
        return self

    def __exit__(self):
        return self

    @staticmethod
    def count(f):
        return fcount2.__instances[self.__f].__numcalls


@fcount2
def f(n):
    return n+2

for n in range(5):
    print f(n)   
print 'f count =',f.count

def foo(n):
    return n*n

with fcount2(foo) as g:
    print g(1)
    print g(2)
print 'g count …
Run Code Online (Sandbox Code Playgroud)

python class count decorator exit

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

CSS 网格行仅在必要时扩展高度?

我正在尝试创建一个包含两行的 CSS 网格。我希望底部的行固定为 47px 高。这很容易。最上面一排给我带来了麻烦。

我希望 CSS 网格的顶行高度至少为 250 像素,即使该行中没有内容也是如此。但如果内容在那里,我希望该行将其高度扩展至最大 303 像素高。也就是说,只有当内容需要时,我才希望行高增长。

从我所看到的类似 的情况来看grid-template-rows: minmax(250px, 303px),如果有足够的空间,它会扩展到 303px。

即使有足够的空间,除非迫不得已,我也不希望它扩展 - 也就是说,它只会因为有高于 250px 的内容而扩展。

我有一个像这样的简单网格:

<div class="myGrid">
    <div class="left"></div>
    <div class="right"></div>
    <div class="bottom"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

使用这样的CSS:

.myGrid {
    display: grid;
    max-height: 350px;
    grid-template-rows: minmax(250px, 303px) 47px;
    grid-template-columns: 1fr 2.5fr;
    grid-template-areas: "a b" "c c";
}

.left {
    grid-area: a;
}

.right {
    grid-area: b;
}

.bottom {
    grid-area: c;
}
Run Code Online (Sandbox Code Playgroud)

使用此代码,顶行始终为 303px,大概是因为有足够的空间扩展到该高度。但我只希望它能够扩展到那个高度,如果它的内容有必要的话。

html css css-grid

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

Python函数可以有属性吗?

我是Python的新手,我不明白函数本身看起来有什么属性.在下面的代码中,有一个名为f的函数,稍后在代码中引用了名为f.count的函数.一个函数,即f,如何有一个.count?我收到一条错误消息:'NoneType'对象在该行上没有属性'count',所以它显然还没有该属性.我该如何赋予它属性?

def fcount(n):
    print n.__name__


@fcount
def f(n):
    return n+2

for n in range(5):
    print n
    #print f(n)

print 'f count =',f.count #THE LINE CAUSING THE ERROR MENTIONED ABOVE

@fcount
def g(n):
    return n*n

print 'g count =',g.count
print g(3)
print 'g count =',g.count
Run Code Online (Sandbox Code Playgroud)

编辑:添加了fcount(),它没有做任何事情,还有关于错误的详细信息.

python attributes function decorator

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

标签 统计

decorator ×2

python ×2

attributes ×1

class ×1

count ×1

css ×1

css-grid ×1

exit ×1

function ×1

html ×1