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. ESP8266 wifi干扰、钓鱼实现

    说明:绝大部分都是对着下面的参考文章来做的.这里只把基本流程和我自己遇到的问题写一下.如有其他问题可以访问文章末的参考文章进行查找! esp8266模块 我们需要购买一块esp8266模块,如下图所示 ...

  2. maven项目发布到tomcat后没有lib目录解决方案

    maven项目放入tomcat中时,总是报错,而且这些jar都是真实存在的,错误如下: maven eclipse tomcat java.lang.ClassNotFoundException: o ...

  3. 转MVC3介绍

    第一节:Asp.Net MVC3项目介绍 让我们先看一下,一个普通的Asp.Net MVC3项目的样例,如下图所示 跟WebFrom还是有区别的,如果你已经了解Asp.Net MVC2的话,那就感觉异 ...

  4. Xcode 9 Analyzing Crash Reports

    Analyzing Crash Reports After you distribute your app for testing by using TestFlight or after you m ...

  5. 50道JAVA基础编程练习题

    50道JAVA基础编程练习题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析 ...

  6. Python基础5:列表 元祖 字典 集合 Json

    [ 列表] 列表(list)是Python以及其他语言中最常用到的数据结构之一.Python使用使用中括号 [ ] 来解析列表. 列表是可变的(mutable)——即:可以改变列表的内容. 相关操作: ...

  7. 搭建Nuget.Server push时,"Failed to process request. 'Method Not Allowed'"

    环境: windows server 2012,已经安装web dev工具. nuget.server版本2.11 输入网站地址正常访问: VS也能正常添加,nuget服务,在项目打包后上传服务器时报 ...

  8. python3 判断大小端的一种方法

    这里用到了array.array('H', [1])来测试大小端,[1]可以转化为十六进制的0x0001,占两位,00位高位, 01位低位,通过第一位就可以判断大小端. 如果是小端,则转化为bytes ...

  9. C/C++ -- Gui编程 -- Qt库的使用 -- 对话框QDialog

    模态对话框 -----源文件main.cpp(工程QtDialog)----- #include "qtdialog.h" #include <QApplication> ...

  10. Eclipse中Maven项目出现红色感叹号问题

    在Eclipse环境下,有时我们会遇到Maven项目出现红色感叹号的情形,而一旦项目出现感叹号,Eclipse便无法帮我们进行自动编译等工作,尽管有时候不会影响运行,但每次只能手动启动Maven重新编 ...