Python(函数名,可迭代对象,迭代器)

一、默认参数的坑

# 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是.
def func(a,l=[]):
l.append(a)
return l
print(func(1)) # [1]
print(func(2)) # [1,2]
print(func(3)) # [1,2,3]

二、函数名的应用

  1. 函数名指向的是函数的内存地址,加上()就执行这个函数

    def func(args):
    return args
    print(func) # <function func at 0x00000000024656A8>
    print(func(1)) # 1
  2. 函数名是一个变量

    def age1(a):
    return a
    age2=age1
    age3=age2
    print(age3(1)) # 1
  3. 函数名可以作为容器类类型的元素

    def func1():
    print("in func1")
    def func2():
    print("in func2")
    def func3():
    print("in func3")
    l=[func1,func2,func3]
    print(l) # [<function func1 at 0x00000000024956A8>, <function func2 at 0x0000000002495730>, <function func3 at 0x00000000024957B8>]
    for i in l:
    i()
    # in func1
    # in func2
    # in func3
  4. 函数名可以作为函数的实参进行传参

    def func(argv):
    print(argv)
    def func1():
    print("in func1")
    def func2(argv):
    argv()
    print("in func2")
    a=1
    func(a) # 1
    func2(func1)
    # in func1
    # in func2
  5. 函数名可以作为函数的返回值

    def func1():
    print("in func1")
    def func2(argv):
    print("in func2")
    return argv
    ret=func2(func1)
    print(ret)
    # in func2
    # <function func1 at 0x0000000001DF56A8>

三、可迭代对象

  1. 字面意思分析 : 可以重复迭代的实实在在的东西,list,dict,keys(),values(),tuple,str,set,range,文件句柄这些都属于可迭代对象

  2. 专业角度分析 : 内部含有'_ iter _'方法的对象,就是可迭代对象

    内置函数 : dir()用来获取对象内部属性的方法,可用来判断对象是否符合可迭代要求.

  3. 优点 : 直观,操作方法较多

  4. 缺点 : 占用内存(字典除外),不能迭代取值,索引,字典key

四、迭代器

  1. 字面意思分析 : 可以重复迭代的工具

  2. 专业角度分析 : 内部含有'_ iter_ '并且含有'_ next _'方法的对象,就是迭代器

    可迭代对象转化成迭代器用iter(),迭代器可以迭代取值,利用next()进行取值,迭代器一条路走到底,不走回头路

  3. 优点 : 非常节省内存,惰性机制

  4. 缺点 : 不直观,操作不灵活,效率相对低

    l1=[1,2,3,4,5]
    obj=iter(l1)
    print(next(obj)) # 1
    print(next(obj)) # 2
    print(next(obj)) # 3
    print(next(obj)) # 4
    print(next(obj)) # 5
    print(next(obj)) # 报错

利用while循环,模拟for循环内部循环可迭代对象机制

  1. 先要将可迭代对象转化成迭代器

  2. 利用next()对迭代器进行取值

  3. 利用异常处理try,处理报错

    l1=[1,2,3,4,5]
    l2=iter(l1)
    while 1:
    try:
    print(next(l2))
    except StopIteration:
    pass

五、可迭代对象与迭代器对比

  1. 可迭代对象是一个操作比较灵活,直观,效率相对较高,但是比较占用内存的数据集
  2. 迭代器是一个非常节省内存,满足惰性机制,但是效率相对较低,操作不灵活的数据集

11.Python初窥门径(函数名,可迭代对象,迭代器)的更多相关文章

  1. Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器

    Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器 一丶关键字:global,nonlocal global 声明全局变量: ​ 1. 可以在局部作用域声明一 ...

  2. 8、如何实现可迭代对象和迭代器对象 9、如何使用生成器函数实现可迭代对象 10、如何进行反向迭代以及如何实现反向迭代 11、如何对迭代器做切片操作 12、如何在一个for语句中迭代多个可迭代对象

    8.如何实现可迭代对象和迭代器对象 PS:注意重载Iterator方法的时候,需要和原来的方法名一样,否则创建实例时会报错 from collections import Iterator,Itera ...

  3. Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归

    Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 目录 Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 内容纲要 1.函数名的第一类对象及使用 2.f ...

  4. python迭代-如何使用生成器函数实现可迭代对象

    如何使用生成器函数实现可迭代对象 问题举例: 实现一个可迭代对象的类,它能迭代出给定范围内 的所有素数: pn = PrimeNumbers(1, 30) for x in pn: print(x) ...

  5. python 迭代器(一):迭代器基础(一) 语言内部使用 iter(...) 内置函数处理可迭代对象的方式

    简介 在 Python 中,所有集合都可以迭代.在 Python 语言内部,迭代器用于支持: 1.for 循环2.构建和扩展集合类型3.逐行遍历文本文件4.列表推导.字典推导和集合推导5.元组拆包6. ...

  6. python27期day10:函数的动态参数、函数的注释、函数的名称空间、函数的嵌套、global(修改全局的)、nonlocal(修改局部的)、函数名的第一类对象及使用、作业题。

    1.动态参数的作用: 能够接收不固定长度参数 位置参数过多时可以使用动态参数 * args是程序员之间约定俗称(可以更换但是不建议更换) * args获取的是一个元组 ** kwargs获取的是一个字 ...

  7. day12 python函数名的应用 闭包 迭代器

    day12 python   一.函数名的应用(是第一类对象)     函数名的命名规范和变量是一样的     函数名其实就是变量名 def func():     print('i am funct ...

  8. python 可迭代对象 迭代器 生成器总结

    可迭代对象 只要有魔法方法__iter__的就是可迭代对象  list和tuple和dict都是可迭代对象 迭代器 只要有魔法方法__iter__和__next__的就是可迭代对象 生成器 只要含有y ...

  9. python14 1.带参装饰器 | wrapper 了了解 # 2.迭代器 ***** # 可迭代对象 # 迭代器对象 # for迭代器 # 枚举对象

    ## 复习 '''函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.验证执行 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 ...

随机推荐

  1. ListView多选和单选模式重新整理

    超简单的单选和多选ListView 在开发过程中,我们经常会使用ListView去呈现列表数据,比如商品列表,通话记录,联系人列表等等,在一些情况下,我们还需要去选择其中的一些列表数据进行编辑.以前, ...

  2. web 全栈 学习 1 工程师成长思路图

    第一部分: 技术的三个阶段 实现 ---> 借鉴 ---> 优化 实现:为了实现功能,不考虑可读性.借鉴:阅读开源代码,开源程序,学到编程思想.优化:可读性,可执行. 阶段一:实现多做事, ...

  3. Canvas动画按钮

    在线演示 本地下载

  4. Contiki Network Stack

    一.协议栈 主要有两大网络协议栈,uIP和Rime这两大协议栈(network stack): The uIP TCP/IP stack, which provides us with IPv4 ne ...

  5. 4.7 希尔(shell)排序法

    4-7 ShellSort.c #include <stdio.h> #include "4-1 CreateData.c" //生成随机数的函数 #define AR ...

  6. 分享知识-快乐自己:Oracle 创建序列 及 使用序列

    1.创建序列语法: create sequence 序列名 [可选参数] 序列名常定义为‘seq_XXX’的形式,创建序列不能使用replace 可选参数说明: increment by: 序列每次增 ...

  7. centos7下面搭建lnmp环境

    参考大神博客: http://www.linuxzen.com/lnmphuan-jing-da-jian-wan-quan-shou-ce-si-lnmpda-jian-yuan-ma-an-zhu ...

  8. find命令的基础用法以及按文件修改时间查找文件

    一般文件查找方法: find 命令学好是一件很有趣的事情,也可以帮你在查找系统文件的时候事倍功半,还可以与正则表达式结合使用,功能强大,是一个很好的查找工具.可以整体提高你的系统管理能力. 基础用法 ...

  9. 用rem适配移动端

    常见方式: 1. 固定宽度(320)做法:这样前端倒是爽了,可是大页面两边有留白,小页面图标文字又会缩的很小,用户体验极其不好. 2. 流式布局:其实就是用%,这样宽度倒还差不多,高度怎么搞?所以这种 ...

  10. 1087 All Roads Lead to Rome (30)(30 分)

    Indeed there are many different tourist routes from our city to Rome. You are supposed to find your ...