zoukankan      html  css  js  c++  java
  • 函数名 迭代器 任意表达式 插入表达式 等操作

    函数名的作用

    1.函数名的内存地址

    def func():   
        print("呵呵")
    print(func)
    
    结果: <function func at 0x1101e4ea0>
    

    2.函数名可以赋值给其他变量

    def func():   
        print("呵呵")
        print(func)
    a = func    # 把函数当成一个值赋值给另一个变量
    
    a()     # 函数调用 func()
    结果:
    呵呵
    <function func at 0x0000025089261E18>
    

    3.函数名可以当做容器类的元素

    def func1():   
        print("呵呵")
    def func2():   
        print("呵呵")
    def func3():   
        print("呵呵")
    def func4():  
         print("呵呵")
    
    lst = [func1, func2, func3]
    for i in lst:  
         i()
    结果:
    呵呵
    呵呵
    呵呵
    

    4.函数名可以当做函数的参数

    def func():   
        print("吃了么")
    def func2(fn):   
        print("我是func2")   
        fn()    # 执行传递过来的fn   
        print("我是func2")
    func2(func)     # 把函数func当成参数传递给func2的参数fn.
    结果:
    我是func2
    吃了么
    我是func2
    

    5.函数名可以作为函数的返回值

    def func_1():   
        print("这里是函数1")   
        def func_2():       
            print("这里是函数2")   
        print("这里是函数1")   
        return func_2
    fn = func_1()  
    # 执行函数1.  函数1返回的是函数2, 这时fn指向的就是上面函数2
    fn()    # 执行func_2函数
    结果:
    这里是函数1
    这里是函数1
    这里是函数2
    

    任意表达式

    num = "alexmeetwusir"
    print(f"全部大写:{num.upper()}")
    结果:
    全部大写:ALEXMEETWUSIR
    

    插入表达式

    def func(a,b,c):
    	d = a*b*c
    	return d
    print(f"最终结果为" + f"{func(5,5,5)}")
    结果:
    最终结果为125
    

    可迭代对象

    1. 在python中,但凡内部含有__iter__方法的对象,都是可迭代对象。
    如何查看呢?
    示例:
    sum = "sjkfhs"
    print(dir(sum)) 通过dir查看,如果输出列表内有iter方法就是可迭代对象
    

    2.什么是可迭代对象?

     从字面意思来说:可迭代对象就是一个可以重复取值的实实在在的东西。
    ​ 从专业角度来说:但凡内部含有__iter__方法的对象,都是可迭代对象。
    ​ 可迭代对象可以通过判断该对象是否有__iter__方法来判断。
    ​ 
    ​ 可迭代对象的优点:
    ​ 可以直观的查看里面的数据。
    ​ 
    ​ 可迭代对象的缺点:
    ​ 1.占用内存。
    ​ 2.可迭代对象不能迭代取值(除去索引,key以外)。
    

    迭代器

    1.在python中,内部含有__Iter__方法并且含有__next__方法的对象就是迭代器。

    2.迭代器的优点与缺点

    迭代器的优点:
    ​ 节省内存,迭代器在内存中相当于只占一个数据的空间:因为每次取值都上一条数据会在内存释放,加载当前的此条据。
    ​ 惰性机制, next一次,取一个值,绝不过多取值。
    ​ 有一个迭代器模式可以很好的解释上面这两条:迭代是数据处理的基石。扫描内存中放不下的数据集时,我们要找到种
    ​ 惰性获取数据项的方式,即按需一次获取一个数据项。这就是迭代器模式。
    
    迭代器的缺点:
    ​ 不能直观的查看里面的数据。
    ​ 取值时不走回头路,只能一直向下取值。
    

    3.迭代器的惰性机制,操作一次返回一个值,下次操作继续从上次位置向下执行。

    示例:
    l1 = [1, 2, 3, 4, 5, 6]
    obj = iter(l1)
    
    for i in range(2):
        print(next(obj))
    
    for i in range(2):
        print(next(obj))
    
    for i in range(2):
        print(next(obj))
    结果:
    第一次输出结果1,2
    第二次输出结果1,2,3,4
    第三次输出结果1,2,3,4,5,6      如果再加入一个for循环就会报错,因为列表中元素只到6.
    

    4可迭代对象与迭代器对比

    我们今天比较深入的了解了可迭代对象与迭代器,接下来我们说一下这两者之间比较与应用:
    ​ 可迭代对象:
    ​ 是一个私有的方法比较多,操作灵活(比如列表,字典的增删改查,字符串的常用操作方法等),比较直观,但是占用内存,而且不能直接通过循环迭代取值的这么一个数据集。
    ​ 应用:当你侧重于对于数据可以灵活处理,并且内存空间足够,将数据集设置为可迭代对象是明确的选择。
    
    ​ 迭代器:
    ​ 是一个非常节省内存,可以记录取值位置,可以直接通过循环+next方法取值,但是不直观,操作方法比较单一的数据集。
    ​ 应用:当你的数据量过大,大到足以撑爆你的内存或者你以节省内存为首选因素时,将数据集设置为迭代器是一个不错的选择。(可参考为什么python把文件句柄设置成迭代器)。
    
  • 相关阅读:
    HTTP Handlers and HTTP Modules Overview
    NTLM Detail
    How to get report service instance name by wmi
    How to remove the history credential in IE8 .(OP is Win 7 64)
    Session 机制详解
    ES6map对象,for of 遍历,class类,extends继承
    MongoDB 安装及命令指令符基本操作
    nodeIO,path,http , url模块
    ES6promise
    node模块化简介, process全局对象, fs模块,Buffer对象 ,
  • 原文地址:https://www.cnblogs.com/biyunfeng/p/11934616.html
Copyright © 2011-2022 走看看