关于Python的一些问题

请问为什么我输入了四条提问的代码,但是结果却只有一个回答呀?

img

IDE的特性?IPYTHON CONSOLE是这样的。
正确的写法应该是

def is_year(y):
    r = False
    return r
print(is_year(4) is True)
print(is_year(200) is True)
print(is_year(2100) is False)
print(is_year(200) is True)

这样才能看到每个执行结果。。

img

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7732803
  • 这篇博客也不错, 你可以看下【Python获取相亲网站数据】马上都元宵节了,还在相亲,看看某相亲网站有没有那个有缘人。
  • 同时,你还可以查看手册:python- 走向编程的第一步 中的内容
  • 除此之外, 这篇博客: 由一个简单的Python合并字典问题引发的思考,如何优化我们的代码?中的 最后看看那些性能较差的实现方案 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 这些方法的性能较差,但是它们将提供正确的行为。它们的性能将不及copyupdate新的解包方式,因为它们在更高的抽象级别上遍历每个键值对,但它们确实遵循优先级的顺序(后者决定了优先级)

    • 我们可以在使用生成式来做:
    {k: v for d in dicts for k, v in d.items()} # iteritems in Python 2.7
    

    或在python 2.6中(也许在引入生成器表达式时早在2.4中):

    dict((k, v) for d in dicts for k, v in d.items())
    

    itertools.chain 迭代器的骚操作

    import itertools
    z = dict(itertools.chain(x.iteritems(), y.iteritems()))
    

    ChainMap骚操作

    >>> from collections import ChainMap
    >>> x = {'a':1, 'b': 2}
    >>> y = {'b':10, 'c': 11}
    >>> z = ChainMap({}, y, x)
    >>> for k, v in z.items():
            print(k, '-->', v)
    
    a --> 1
    b --> 10
    c --> 11
    

    ####我们做做时间分析
    我将仅对已知行为正确的用法进行性能分析。

    import timeit
    

    Ubuntu 18上完成以下操作
    Python 2.7(系统Python)中:

    >>> min(timeit.repeat(lambda: merge_two_dicts(x, y)))
    0.5726828575134277
    >>> min(timeit.repeat(lambda: {k: v for d in (x, y) for k, v in d.items()} ))
    1.163769006729126
    >>> min(timeit.repeat(lambda: dict(itertools.chain(x.iteritems(), y.iteritems()))))
    1.1614501476287842
    >>> min(timeit.repeat(lambda: dict((k, v) for d in (x, y) for k, v in d.items())))
    2.2345519065856934
    

    Python 3.5中:

    >>> min(timeit.repeat(lambda: {**x, **y}))
    0.4094954460160807
    >>> min(timeit.repeat(lambda: merge_two_dicts(x, y)))
    0.7881555100320838
    >>> min(timeit.repeat(lambda: {k: v for d in (x, y) for k, v in d.items()} ))
    1.4525277839857154
    >>> min(timeit.repeat(lambda: dict(itertools.chain(x.items(), y.items()))))
    2.3143140770262107
    >>> min(timeit.repeat(lambda: dict((k, v) for d in (x, y) for k, v in d.items())))
    3.2069112799945287
    
  • 您还可以看一下 黄棒清老师的Python实战量化交易理财系统课程中的 回测和实盘有差异的原因?小节, 巩固相关知识点