zoukankan      html  css  js  c++  java
  • python生成器、迭代器、__call__、闭包简单说明

    1.生成器

    这种一边循环一边计算的机制,称为生成器:generator,最简单的方法是把生成式的[]改为().

    >>> l=(x * x for x in range(1, 11) if x % 2 == 0)
    >>> l
    <generator object <genexpr> at 0x7fb6ca32fca8>
    定义生成器的另一种方法:如果一个函数定义中包含yield关键字,
    那么这个函数就不再是一个普通函数,而是一个生成器:
    def fib(max):
        n, a, b = 0, 0, 1
        while n < max:
            yield b
            a, b = b, a+b
            n += 1
        return 'done'
    任何一个循环都得有一个结束条件,n在这个函数中就是结束条件,
    b是主角a是配角,循环一次生成器就改变一次.
    

    2.迭代器

    凡是可作用于for循环的对象都是Iterable类型(可迭代对象);
    凡是可作用于next()函数的对象都是Iterator类型;它们表示一个惰性计算的序列;
    集合数据类型如list、dict、str等是Iterable但不是Iterator,
    不过可以通过iter()函数获得一个Iterator对象;
    Python的for循环本质上就是通过不断调用next()函数实现的.
    

    3.在页脚html代码添加如下内容,会增加打赏功能:

    <script>
            window.tctipConfig = {
                staticPrefix: "http://static.tctip.com",
                buttonImageId: 5,
                buttonTip:  "zanzhu",
                list:{
                    alipay: { qrimg: "https://files.cnblogs.com/files/fawaikuangtu123/weichat.bmp"},    //修改1
                    weixin: { qrimg: "https://files.cnblogs.com/files/fawaikuangtu123/zfb.bmp"},      //修改2
                }
            };
    </script>
    

    4.在页首html代码添加如下代码,右上角会出现藏着github地址的a标签图片:

    <a href="https://github.com/LiXiang-LiXiang" title="Fork me on GitHub" target="_blank">
    <img style="position: absolute; top: 72px; right: 1px; border: 0" alt="Fork me on GitHub" 
    src="http://images.cnblogs.com/cnblogs_com/fawaikuangtu123/1343168/o_Fuck-me-on-GitHub.png"></a>
    

    5.Python __call__ 方法

    实现了__call__方法的对象,相当于重载了(),可以实现调用功能.

    class A():
        def __call__(self,name):
            print("%s is running!" % name)
    >>> a = A()
    >>> a("people")
    people is running!
    

    实现斐波纳契数列的类:

    class Fib(object):
        def __call__(self, *args, **kwargs):
            ret = [1,1]
            num = int(args[0])
            if num == 1:
                return [1, ]
            else:
                while len(ret) < num:
                    ret.append(ret[-1] + ret[-2])
                return ret
    hehe = Fib()
    print(hehe(5))
    

    6.部署完一个网站后,想统计用户总访问量、日访问量、用户ip地址和该ip地址的访问次数,

    定义一个函数,也可以是装饰器,在视图中调用,

    这种做法只适合简单页面访问量统计,不适合统计高并发页面访问量,而且会降低性能,

    等以后水平高了再来想这个问题.

    参考地址:https://blog.csdn.net/Duke10/article/details/81273741

    Django2.0整合markdown编辑器并实现代码高亮

    参考地址:https://blog.csdn.net/Duke10/article/details/81033686

    7.闭包

    闭包:在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,

    并且外函数的返回值是内函数的引用,这样就构成了一个闭包.

    def test(number):
        print("--1--")
    
        def test_in(number2):
            print("--2--")
            print(number + number2)
    
        print("--3--")
        return test_in
    
    ret = test(100)
    ret(1)
    
  • 相关阅读:
    将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
    placeholder的兼容处理(jQuery下)
    滚动条滚动到页面底部继续加载的处理实例
    html/css基础篇——html代码编写过程中的几个警惕点
    多iframe使用tab标签方式添加、删除、切换的处理实例
    iframe的内容增高或缩减时设置其iframe的高度的处理方案
    IE9父容器overflow:auto时,子容器状态更改导致滚动条下出现额外空间的问题探讨
    C语言基本类型之long long int
    VIM使用技巧总结
    Ineedle驱动方式dpdk测试性能
  • 原文地址:https://www.cnblogs.com/fawaikuangtu123/p/9981379.html
Copyright © 2011-2022 走看看