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. Educational Codeforces Round 34 (Rated for Div. 2) D - Almost Difference(高精度)

    D. Almost Difference Let's denote a function You are given an array a consisting of n integers. You ...

  2. fluentd 推送 mariadb audit log

    说明: mariadb audit log是 mariadb 的审计日志 目的是把日志拆分成 tab 键分隔的字段 直接附上 fluentd 配置文件 <system> log_level ...

  3. MYSQL NULL值特性

    NULL是一种“没有类型”的值,通常表示“无值”,“未知值”,“缺失值”,“超界”,“不在其中”等,我们在日常运用中很容易和NULL字符串混淆,这里大致整理了下NULL值的一些特性,以便能够正确使用N ...

  4. python代码的那些设计

    一.Django的ORM 1.类QuerySet (django) :QuerySet 可以被构造,过滤,切片,做为参数传递,这些行为都不会对数据库进行操作.只要你查询的时候才真正的操作数据库. 2. ...

  5. Spring Security构建Rest服务-1100-单机Session管理

    Session失效时间: springboot配置session失效时间,只需要在application.properties里配置 #session超时时间,低于60秒按60秒server.sess ...

  6. Failed to instantiate [java.util.List]: Specified class is an interface

    错误信息提示: Failed to instantiate [java.util.List]: Specified class is an interface; 错误信息意思:参数错误,参数封装出了问 ...

  7. 2013-12-LINUX 常用命令

    查看iptables状态: service iptables status 查询LINUX开机时间多久 1. cat /proc/uptime输出: 105040.44 105024.75 秒 2. ...

  8. IntelliJ IDEA(Community版本)的下载、安装和WordCount的初步使用(本地模式和集群模式)

    不多说,直接上干货! 对于初学者来说,建议你先玩玩这个免费的社区版,但是,一段时间,还是去玩专业版吧,这个很简单哈,学聪明点,去搞到途径激活!可以看我的博客. 包括: IntelliJ IDEA(Co ...

  9. Maven启动代理服务器

    0.什么叫代理服务器? 代理服务器英文全称是(Proxy Server),其功能就是代理网络用户去取得网络信息.形象的说:它是网络信息的中转站. 代理服务器就好象一个大的Cache,这样就能显著提高浏 ...

  10. ES6-let、const和块级作用域

    1.介绍 总的来说,ES6是在ES2015的基础上改变了一些书写方式,开放了更多API,这样做的目的最终还是为了贴合实际开发的需要.如果说一门编程语言的诞生是天才的构思和实现,那它的发展无疑就是不断填 ...