一、函数名的应用(第一类对象)

  函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数变量。

  1.函数名的内存地址

  1. def func():
  2. print("哈哈")
  3. print(func) #<function func at 0x000002750A7998C8>

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

  1. def func():
  2. print("哈哈")
  3. print(func)
  4. a = func  #把函数当成一个变量赋值给另一个变量
  5. a()     #函数调用 func()
  6. #<function func at 0x00000211E56198C8>
  7. #哈哈

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

  1. def func1():
  2. print("哈哈")
  3. def func2():
  4. print("哈哈")
  5. def func3():
  6. print("哈哈")
  7. def func4():
  8. print("哈哈")
  9. lst = [func1,func2,func3]
  10. for i in lst:
  11. i()
  12. # 哈哈
  13. # 哈哈
  14. # 哈哈

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

  1. def func():
  2. print("吃了么")
  3. def func2(fn):
  4. print("我是func2")
  5. fn()
  6. print("我是func2")
  7. func2(func) #把函数func当成参数传递给func2的参数fu
  8. # 我是func2
  9. # 吃了么
  10. # 我是func2

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

 

  1. def func_1():
  2. print("这里是函数1")
  3. def func_2():
  4. print("这里是函数2")
  5. print("这里是函数1")
  6. return func_2
  7. fn = func_1() #执行函数1,函数1返回的是函数2,这时fn指向的就是上面的函数2
  8. fn() #执行上面返回的函数
  9. # 这里是函数1
  10. # 这里是函数1
  11. # 这里是函数2

二、闭包

  闭包:在内层函数中访问外层函数的局部变量

  优点:

        1保护你的变量不受外界影响

        2.可以让变量常驻内存

   写法:

      def outer():

        a = 10

        def inner():

          print(a)

        retunt inner

   判断方法:

  1. def func():
  2. a = 10
  3. def inner():
  4. print(a)
  5. print(inner.__closure__) # 如果打印的是None. 不是闭包. 如果不是None, 就是闭包
  6.  
  7. func()

三、迭代器

    使用dir来查看该数据包含了哪些方法

  1. print(dir(str))
  2. #结果
  3. ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

    用来遍历列表,字符串,元组...等等可迭代对象

    可迭代对象:Iterable,里面有__iter__()可以获取迭代器,没有__next__()

    迭代器:  Iterable,里面有__iter__()可以获取迭代器,还有__next__()

    迭代器的特点:

        1.只能向前

        2.惰性机制

        3.省内存(生成器)

    for循环的内部机制

        1.首先获取到迭代器

        2.使用while循环获取数据

        3.it.__next__()来获取数据

        4.处理异常 try:xxx  except StopIteration:

  1. s = "我是一名小画家"
  2. it = s.__iter__()
  3. while 1:
  4. try:
  5. el = it.__next__()
  6. print(el)
  7. except StopIteration:
  8. break
  9. # 我
  10. # 是
  11. # 一
  12. # 名
  13. # 小
  14. # 画
  15. # 家

    判断方法:

  1. s = "abc"
  2. it = s.__iter__()
  3. #第一种方法
  4. print("__iter__" in dir(it)) #输出是Ture说明是可迭代对象
  5. print("__next__" in dir(it)) #输出是Ture说明是迭代器
  6. #第二种方法
  7. from collections import Iterable
  8. from collections import Iterator
  9. print(isinstance(it,Iterable)) #判断是不是可迭代对象
  10. print(isinstance(it,Iterator)) #判断是不是迭代器

python函数名的应用、闭包和迭代器的更多相关文章

  1. python基础之函数名的使用,闭包以及迭代器

    内容梗概: 1. 函数名的使⽤用以及第⼀一类对象 2. 闭包 3. 迭代器 1.函数名一. 函数名的运⽤.函数名是一个变量, 但它是⼀个特殊的变量, 与括号配合可以执行函数的变量.1.1 函数名的内存 ...

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

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

  3. 【学习笔记】--- 老男孩学Python,day12 函数名的应用,闭包,迭代器

    1, 函数名的应用,第一类对象 函数名可以像变量一样进行使用 1.赋值 def func(): print("你吃了么?") # print(func) # a = func # ...

  4. python 函数名的应用(第一类对象),闭包,迭代器

    1.函数名的应用(第一类对象) 函数名的命名规范和变量是一样的 函数名其实就是变量名 可以作为列表中的元素进行储存. def func1(): pass def func2(): pass lst = ...

  5. python 函数名 、闭包 装饰器 day13

    1,函数名的使用. 函数名是函数的名字,本质就是变量,特殊的变量.函数名()加括号就是执行此函数. 1,单独打印函数名就是此函数的内存地址. def func1(): print(555) print ...

  6. day 12 函数名的应用 闭包 迭代器

    今日主要内容 1, 函数名的应用,第一类对象 函数名可以像变量一样进行使用   #再函数名后面添加() 才是对函数的调用, 否则打印的是函数的内存地址 1.赋值 2.作为list元素 3.作为参数 d ...

  7. python 函数名,闭包

    1.函数名字的应用 函数名是什么? 函数名是函数的名字,本质:变量,特殊变量 函数名+() ———>执行此函数: 2.函数名的赋值: def func2(): print(44) f = fun ...

  8. Python函数名做参数,闭包,装饰器

    简单讲解闭包的写法和应用,在这之前,先声明,你定义的任意一个函数都可以作为其他函数的参数.就像下面这段代码的参数func,接收的参数就是一个函数名,在函数体内部使用了func()调用执行函数. 请看下 ...

  9. python 函数的作用域,闭包函数的用法

    一.三元表达式 if条件成功的值    if  条件   else else条件成功的值 #if条件成立的结果 if 条件 else else条件成立的结果 # a = 20 # b = 10 # c ...

随机推荐

  1. 【GStreamer开发】GStreamer基础教程06——媒体格式和pad的Capabilities

    目标       Pad的Capabilities是一个GStreamer element的基础,因为framework大部分时间是自动处理的,所以我们几乎感觉不到它的存在.本教程比较偏向原理,介绍了 ...

  2. HDU 4352:XHXJ's LIS

    题目:(原题是英文而且很迷) 求区间内数的LIS长度==k的个数,比如153948的LIS为1 3 4 8,长度为4.据说这种题叫DP中DP,本来是线性,再套一层状压+数位,简直厉害到不行…… 线性的 ...

  3. 2019年广东省赛gdccpc回顾

    本次比赛状态一般般,热身赛单人挂机爆零让自己慌了一整天. 开题直接抓E题入手,准备交题后关机(辣鸡云桌面),开机后又告诉我要关机,心急连交两发结果都WA了,最后靠队员提醒救了回来.心态还算稳住了.后面 ...

  4. Linux 环境变量设置的几种方法

    From:http://home.eeworld.com.cn/home.php?mod=space&uid=291513&do=blog&id=40557 环境变量是和She ...

  5. [转帖]oracle补丁类型

    oracle补丁类型 https://www.cnblogs.com/liang545621/p/9417919.html 介绍挺好的 跟现在的也比较类似呢.   名称 说明 Release ¤ 标准 ...

  6. JWT知识整理

    JSON Web Token:(https://jwt.io/) JSON Web Token(JWT)是一个开放式标准(RFC 7519),它定义了一种紧凑(Compact)且自包含(Self-co ...

  7. 阿里云服务器安装mysql8遇到的问题

    1.提供一个离线mysql下载路径:http://mirrors.163.com/mysql/Downloads/MySQL-8.0/ 2.在线mysql8安装: 2.1 下载mysql: wget ...

  8. C++基础(静态数据成员和静态成员函数)

    [简介] 1.静态数据成员在类中声明,在源文件中定义并初始化: 2.静态成员函数没有this指针,只能访问静态数据成员: 3.调用静态成员函数:(1)对象.(2)直接调用: 4.静态成员函数的地址可用 ...

  9. 2019年6月12日——开始记录并分享学习心得——Python3.7中对列表进行排序

    Python中对列表的排序按照是排序是否可以恢复分为:永久性排序和临时排序. Python中对列表的排序可以按照使用函数的不同可以分为:sort( ), sorted( ), reverse( ). ...

  10. flex左右布局 左边固定 右侧自适应

    flex左右布局 左边固定 右侧自适应 想要保证自适应内容不超出容器怎么办. 通过为自适应的一侧设置width: 0;或者overflow: hidden;解决. 首先实现标题的布局,也很简单: &l ...