1, 函数名的应用,第一类对象

函数名可以像变量一样进行使用
1.赋值

def func():
    print("你吃了么?")

# print(func)
# a = func    # 函数名就是一个变量
# print(a)
# func()
# a() # 就是一个函数的调用

def a():
    print("我吃了")

func = a
func()

2.作为list元素

 a = 8
 b = 7
 c = 1
 d = 3
 lst = [a, b , c, d]
 print(lst)

 def f1():
     print("我是马化腾")
 def f2():
     print("我是马云")
 def f3():
     print("我是马赛克")
 def f4():
     print("我是马蔚华")

 lst = [f1(), f2(), f3(), f4()]
 print(lst)

3.作为参数

 # 还可以作为函数的参数
 def func(food):
     print("吃", food)

 a = "火锅"
 func(a)

 def func(fn):
     fn()

 def gn():
     print("我是火锅, 刚才有人要吃我")
 func(gn)    # 可以把函数作为参数, 传递给另一个函数

4.作为返回值

 def func():
     def inner():
         print("火锅不让吃了. 吃了上火")
     return inner
 ret = func()    # 这里func()执行之后获取到的是inner函数
 ret()   # 这里是让inner函数执行

2, 闭包

内部函数访问外部函数的局部变量.
好处:
1.安全
2.常驻内存. 提高效率

 name = "wusir"  # 变量写在全局是不安全的

 def abc():
     global name
     name ="呵呵"
 abc()

 def func():
     name = "alex"   # 常驻内存  防止其他程序改变这个变量
     def inner():
         print(name) # 在内层函数中调用了外层函数的变量,叫闭包, 可以让一个局部变量常驻内存
     return inner

 ret = func()
 ret() # 执行的是inner()
 ret()
 ret()
 ret()
 ret()
 # 闭包的好处
 from urllib.request import urlopen
 def but():
     content = urlopen("http://www.h3c.com/cn/").read()
     def inner():
         print("你好啊")
          # return content # 在函数内部使用了外部的变量 . 闭包
     print(inner.__closure__)    # 查看inner是否是闭包, 如果有东西就是闭包, 没东西就不是闭包
     return inner
 print("加载中........")
 fn = but()  # 这个时候就开始加载校花100 的内容
 # 后⾯需要⽤到这⾥⾯的内容就不需要在执⾏⾮常耗时的⽹络连接操作了
 content = fn()   # 获取内容
 print(content)
 content2 = fn()  # 重新获取内容
 print(content2)

3, 迭代器

可迭代对象(Iterable):内部包含__iter__().
迭代器(Iterator): 内部含有__iter__() __next__()
str, list, tuple, set, dict
f, range

 s = "北京欢迎您"
 for c in s:
     print(c)

 for i in 123:
     print(i)
 # 可迭代对象: str, list, tuple, set, f, dict
 # 所有的以上数据类型中都有一个函数__iter__(), 所有包含了__iter__()的数据类型都是可迭代的数据类型 Iterable
 # dir()来查看一个对象,数据类型中包含了哪些东西
 lst = [1,2,3]   # list
 # print(dir(lst))
 s = "王尼玛"
 print("__iter__" in dir(s))
 print("__iter__" in dir(lst))
 print("__iter__" in dir(123))

 list是一个Iterable.可迭代的
 lst = ["皇阿玛", "皇额娘", "容嬷嬷", "紫薇"]
 获取迭代器
 it = lst.__iter__()
 # 迭代器往外拿元素. __next__()
 print(it.__next__())    # 皇阿玛
 print(it.__next__())    # 皇额娘
 print(it.__next__())    # 容嬷嬷
 print(it.__next__())    # 紫薇
 print(it.__next__())    # 迭代到最后一个元素之后. 再进行迭代就报错了

 lst = ["皇阿玛", "皇额娘", "容嬷嬷", "紫薇"]
 # 模拟for循环
 it = lst.__iter__()
 while True:
     try:
         name = it.__next__()
         print(name)
     except StopIteration: # 拿完了
         break

 lst = [1, 2, 3]
 from collections import Iterable    # 可迭代的
 from collections import Iterator    # 迭代器

 # isinstence(对象, 类型) 判断xx对象是否是xxx类型的
 print(isinstance(lst, Iterable))
 print(isinstance(lst, Iterator))

 it = lst.__iter__()
 print(isinstance(it, Iterable)) # 判断是否是可迭代的 迭代器一定是可迭代的
 print(isinstance(it, Iterator)) # 迭代器里面一定有__next__(), __iter__()

 print("__iter__" in dir(lst))   # 确定是一个可迭代的
 print("__next__" in dir(lst))   # 确定不是一个迭代器

 f = open("01 今日内容大纲",mode="r", encoding="utf-8")
 print(isinstance(f, Iterable))
 print(isinstance(f, Iterator))

迭代器的特点:
1.省内存
2.惰性机制
3.只能向前.

 lst = ["哈哈", "呵呵"]
 it = lst.__iter__()
 it.__next__()
 print(it.__next__())
 print("我要吃黄瓜")
 print(it.__next__())

【学习笔记】--- 老男孩学Python,day12 函数名的应用,闭包,迭代器的更多相关文章

  1. python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法

    python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...

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

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

  3. 11.Python初窥门径(函数名,可迭代对象,迭代器)

    Python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return ...

  4. 跟着太白老师学python day11 函数名的应用 globals(), locals()

    1.  函数名就是内存地址 def func(): ') print(func) >>>> <function func at 0x00000000003DC1E0> ...

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

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

  6. 学习笔记《简明python教程》

    学习笔记<简明python教程> 体会:言简意赅,很适合新手入门 2018年3月14日21:45:59 1.global 语句 在不使用 global 语句的情况下,不可能为一个定义于函数 ...

  7. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  8. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...

  9. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

随机推荐

  1. Binary Indexed Tree-307. Range Sum Query - Mutable

    Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...

  2. Educational Codeforces Round 25 C. Multi-judge Solving

    题目链接:http://codeforces.com/contest/825/problem/C C. Multi-judge Solving time limit per test 1 second ...

  3. 去除eclipse的validating

    删除.project文件中的validator,如 <buildCommand> <name>org.eclipse.wst.jsdt.core.javascriptValid ...

  4. CentOS7下 Python2.7.5升级为Python2.7.13

    参考:https://www.jianshu.com/p/fad3942fc0ed 第一步:查看Centos版本及Python版本 • CentOS版本 [root@ tools_package]# ...

  5. HTML 5 使用 FileReader、FormData实现文件上传

    一.FileReader FileReader 对象允许Web应用程序异步读取存储在用户计算机中的文件(或缓冲区的原始数据),使用File或Blob对象指定要读取的文件或数据. 1.1 实例化 var ...

  6. centos7系统的进程管理

    使用top命令,实时查看后台的进程,会看到以下信息 官方的解释: us: user cpu time (or) % CPU time spent in user space sy: system cp ...

  7. Supporting Right-to-Left Languages

    For the most part iOS supports Right-to-Left (RTL) languages such as Arabic with minimal developer e ...

  8. java语言编程入门

    1 概述 1.1 计算机 计算机包括硬件和软件两部分.硬件包括计算机中可以看得见的物理部分.软件提供看不见的指令.这些指令控制硬件并且使得硬件完成特定的任务. 1.2 程序设计 定义:创建(或开发软件 ...

  9. Java Sort中Comparator的语义分析

    Comparator中compare的语义:

  10. django框架--cookie/session

    目录 一.http协议无状态问题 二.会话跟踪技术--cookie 1.对cookie的理解 2.cookie的使用接口 3.cookie的属性 4.使用cookie的问题 三.会话跟踪技术--ses ...