Fork me on GitHub

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)

 

posted @ 2018-11-19 09:17  法外狂徒  阅读(381)  评论(0编辑  收藏  举报