相关疑难解决方法(0)

如何制作一系列功能装饰器?

如何在Python中创建两个装饰器来执行以下操作?

@makebold
@makeitalic
def say():
   return "Hello"
Run Code Online (Sandbox Code Playgroud)

...应该返回:

"<b><i>Hello</i></b>"
Run Code Online (Sandbox Code Playgroud)

我不是试图HTML在一个真实的应用程序中这样做 - 只是试图了解装饰器和装饰器链是如何工作的.

python decorator python-decorators

2647
推荐指数
17
解决办法
49万
查看次数

Python的time.clock()与time.time()的准确性?

哪个更适合用于Python中的计时?time.clock()或time.time()?哪一个提供更准确?

例如:

start = time.clock()
... do something
elapsed = (time.clock() - start)
Run Code Online (Sandbox Code Playgroud)

start = time.time()
... do something
elapsed = (time.time() - start)
Run Code Online (Sandbox Code Playgroud)

python time

416
推荐指数
11
解决办法
40万
查看次数

快速和pythonic的方式来找出一个字符串是一个回文

[编辑:有人指出我使用了不正确的palindrom概念,现在我已经编辑了正确的功能.我在第一个和第三个例子中也做了一些优化,其中for语句一直到它达到字符串的一半]

我已经为一个检查字符串是否为回文的方法编写了三个不同的版本.该方法实现为类"str"的扩展

该方法还将字符串转换为小写,并删除所有准时和空格.哪一个更好(更快,pythonic)?

以下是方法:

1)这是我想到的第一个解决方案:

    def palindrom(self):
        lowerself = re.sub("[ ,.;:?!]", "", self.lower())
        n = len(lowerself)
        for i in range(n//2):
            if lowerself[i] != lowerself[n-(i+1)]:
               return False
        return True
Run Code Online (Sandbox Code Playgroud)

我认为这个更快,因为没有字符串的转换或反转,并且for语句在第一个不同的元素处断开,但我不认为这是一种优雅和pythonic的方式

2)在第二个版本中,我使用在stackoverflow上创建的解决方案进行转换(使用高级切片字符串[:: - 1])

# more compact
def pythonicPalindrom(self):
    lowerself = re.sub("[ ,.;:?!]", "", self.lower())
    lowerReversed = lowerself[::-1]
    if lowerself == lowerReversed:
        return True
    else:
        return False
Run Code Online (Sandbox Code Playgroud)

但我认为切片和字符串之间的比较使这个解决方案变慢.

3)我想到的第三个解决方案,使用迭代器:

# with iterator
def iteratorPalindrom(self):
    lowerself = re.sub("[ ,.;:?!]", "", self.lower())
    iteratorReverse = reversed(lowerself)
    for char in lowerself[0:len(lowerself)//2]:
        if next(iteratorReverse) != char:
            return …
Run Code Online (Sandbox Code Playgroud)

python string optimization time-complexity

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

测量Jupyter Notebook代码单元的运行时

似乎在Spyder(IPython3 Kernel)中,可以通过在代码单元顶部运行%%timeor %%timeit命令来轻松计时代码单元:

#%%
%%time # or %%timeit which measures average runtime from multiple runs
....

#%% (the previous cell ends and the next begins)
Run Code Online (Sandbox Code Playgroud)

运行上面的代码可以获得由这对代码定义的单元格的运行时间#%%.这就是Spyder中的工作方式,但在Jupyter Notebook环境中并不常用.

在Jupyter中,代码单元格不是由#%%分隔符定义的,而是通过单击菜单栏中的按钮来创建.而据我试过了,命令%%time%%timeit既能提高编译错误.似乎Jupyter无法识别它们,但它很奇怪,因为我的Jupyter实际上使用了与Spyder相同的IPython内核.在Jupyter中有效的一点是%time%timeit命令,但它们只能测量一行代码的运行时间,即必须像

%time blah blah
Run Code Online (Sandbox Code Playgroud)

事实证明,我甚至无法测量for由多条线组成的循环.所以这种方法对我来说并不合适.是否有任何方法可以使用%time(it)Jupyter中的magic命令等来评估单元运行时?

(PS:如果在Spyder中我%time在一个单元格的顶部附加一个命令,它会给出,Wall time: 0 ns因为在同一行中没有任何跟随它的东西,它实际上没有测量任何东西.)

python time ipython spyder jupyter-notebook

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

对于int来说,比0更快!= 0?

哪种测试更快:平等还是不平等?

例如,在一个大while循环中,条件是否应该a>0而不是a!=0

python performance operators python-3.x

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