函数名的第一类对象(概述):

使用方式:

  • 函数名可以当做值赋值给变量

    def func():
    print(1)
    print (func) #查看函数的内存地址
    a = func
    print (a) #
  • 函数名可以当做容器中的元素

    dic = {"1":login,"2":register,"3":index}
    msg = """
    1 登录
    2 注册
    3 主页
    """
    choose = input(msg) # 1
    if choose.isdecimal():
    if dic.get(choose):
    dic[choose]()
    else:
    print("请正确输入!")
  • 函数名可以当做函数的参数

    def fuc(a):
    a()
    print(111)
    def foo():
    print(222)
    def f1()
    print(333)
    fun(f1)
    foo()

  • 函数名可以当函数的返回值

    def func():
    def foo():
    print(111)
    return foo
    a = func()
    a()
    func()() #foo()
    输出结果:111
    111

进阶题:

 def foo(a):
def func(a):
def f1(a):
print(a)
return "aelx"
return f1(a)
return func(a)
print(foo(5))
输出结果: 5 ,alex
 def func(a):
a() def foo(b):
return b()
def f1(c):
def a():
def f3():
print(3333)
return [f3,a,f1]
print(11)
return f3()
return c(a())
def aa(b):
print(111)
return b
print(f1(aa))
输出结果:
11
3333
111
[<function f1.<locals>.a.<locals>.f3 at 0x00000187D0649C80>, <function f1.<locals>.a at 0x00000187D0649BF8>, <function f1 at 0x00000187D0649AE8>]

def f1(c):
def a():
def f3():
print(3333)
return [f3,a,f1]
print(11)
return f3()
ret = a()
return c(ret)
def aa(b):
print(111)
return b
print(f1(aa))

f-strings

​ f"{变量名}"

​ F"{变量名}"

​ f"""{变量名}"""

print(F"姓名:{input('name:')} 年龄:{input('age:')}")
def foo():
print("is foo")
 lst = [1,2,3,4]
dic = {"key1":23,"key2":56}
print(f"""{dic['key1']}""")
 print(f"{3+5}")
print(f"{3 if 3>2 else 2}")
 print(f"""{':'}""")

 msg = f"""{{{{'alex'}}}}"""	#必须是偶数
print(msg) name = "alex"
print(f"{name.upper()}") print(f"{':'}")

迭代器:是基于上一次停留的位置,进行取值

  1. 可迭代对象:

    1. list,tuple,str,set,dict取值方式只能直接看、

    2. 只要具有__ iter __()方法就是一个可迭代对象

       lst = [1,23,4,5]
      for i in lst:
      print(i)
       lst = [1,2,3,4]
      lst.__iter__()
      dict.__iter__()
  2. 迭代器:工具

    • 具有__ iter __ () 和 __ next __ () 两个方法才是迭代器

    • lst = [1,2,3,4,5]
      l = lst.__iter__() # 将可迭代对象转换成迭代器 l.__iter__() # 迭代器指定__iter__()还是原来的迭代器
      print(l.__next__()) # 1
      print(l.__next__()) # 2
  3. for循环的本质(重点):

     while True:
    try: #异常处理机制
    print(l.__next__())
    except StopIteration: #接收到异常提醒就终止
    break
     lst = []
    for i in range(10000):
    lst.append(i) l = lst.__iter__() for i in range(16):
    print(l.__next__()) print(''.center(50,"*")) for i in range(16):
    print(l.__next__()) print(''.center(50,"*"))
    for i in range(16):
    print(l.__next__())
  4. 优点:

    • 惰性机制:节省空间
  5. 缺点:

    1. 不能直接查看值 -- 迭代器查看到的是一个迭代器的内存地址
    2. 一次性,用完就没了
    3. 不能逆行,后退,只能继续执行下一条
  6. 空间换时间:容器存储大量的数据,取值快,占用空间大

  7. 时间换空间:迭代器就是一个节省了空间,但是取值慢

  8. 可迭代对象:具有 iter() 方法的就是一个可迭代对象

  9. 迭代器:具有 iter()和next()方法就是一个迭代器

  10. python2和python3中的区别:

    1. python 3

      • iter ()和 __ iter __() 都有
      • next () 和 __ next __ () 都有
    2. Python 2
      • iter ()和 __ iter __()
      • next ()

从入门到自闭之Python三大器--迭代器的更多相关文章

  1. 从入门到自闭之Python三大器--生成器

    1.什么是生成器 核心:生成器的本质就是一个迭代器 迭代器是python自带的的 生成器是程序员自己写的一种迭代器 编写方式: 基于函数编写 推导式编写 def func (): print(&quo ...

  2. 从入门到自闭之python三大器--装饰器进阶

    装饰器的进阶 有参装饰器: # def warpper(func): # def inner(*args,**kwargs): # user = input("user:") # ...

  3. 从入门到自闭之python三大器--装饰器

    开放封闭原则:在不修改源代码及调用方式,对功能进行额外添加就是开放封闭原则 开放:对代码的扩展进行开发 封闭:修改源代码 装饰(额外功能) 器:工具(函数) 普通版: # print(time.tim ...

  4. Python - 三大器 迭代器,生层器,装饰器

    目录 Python - 三大器 迭代器,生层器,装饰器 一. 容器 二. 可迭代对象(iterable) 三. 迭代器 四. 生成器 五. 装饰器 1. 定义 六. 闭包 Python - 三大器 迭 ...

  5. 详解python三大器——迭代器、生成器、装饰器

    迭代器 聊迭代器前我们要先清楚迭代的概念:通常来讲从一个对象中依次取出数据,这个过程叫做遍历,这个手段称为迭代(重复执行某一段代码块,并将每一次迭代得到的结果作为下一次迭代的初始值). 可迭代对象(i ...

  6. Python 入门之 Python三大器 之 装饰器

    Python 入门之 Python三大器 之 装饰器 1.开放封闭原则: (1)代码扩展进行开放 ​ 任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代 ...

  7. Python 入门之 Python三大器 之 生成器

    Python 入门之 Python三大器 之 生成器 1.生成器 (1)什么是生成器? 核心:生成器的本质就是一个迭代器 迭代器是Python自带的 生成器程序员自己写的一种迭代器 def func( ...

  8. Python 入门之 Python三大器 之 迭代器

    Python 入门之 Python三大器 之 迭代器 1.迭代器 (1)可迭代对象: <1> 只要具有__ iter __()方法就是一个可迭代对象 (我们可以通过dir()方法去判断一个 ...

  9. python三大器

    装饰器 装饰器的作用: 装饰器的本质:一个闭包函数 (高阶函数+嵌套函数) 装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展 闭包原理 装饰器执行流程 带多个参数函数 import ...

随机推荐

  1. cogs1619. [HEOI2012]采花 x

    1619. [HEOI2012]采花 ★★☆   输入文件:1flower.in   输出文件:1flower.out   简单对比时间限制:5 s   内存限制:128 MB [题目描述] 萧薰儿是 ...

  2. HGOI20190707 题解

    Problem A 钢铁侠的诞生 现在有$n$个数字$a_i \leq 10^9 $,然后取出$m$个数字,保证合法. 从小到大输出剩余的$n-m$个数字. 对于100%的数据$m\leq n \le ...

  3. FJOI2017前做题记录

    FJOI2017前做题记录 2017-04-15 [ZJOI2017] 树状数组 问题转化后,变成区间随机将一个数异或一,询问两个位置的值相等的概率.(注意特判询问有一个区间的左端点为1的情况,因为题 ...

  4. 【清华集训2016】Alice和Bob又在玩游戏

    不难的题目.因为SG性质,所以只需要对一棵树求出. 然后如果发现从上往下DP不太行,所以从下往上DP. 考虑一个点对子树的合并,考虑下一个删的点在哪一个子树,那么剩下的状态实际上就是把一个子树所有能达 ...

  5. (Java多线程系列六)join()的用法和线程的优先级

    join()的用法和线程的优先级 1.join()的用法 join()作用就是让其他线程处于等待状态 先看一个需求:创建一个线程,子线程执行完毕后,主线程才能执行 public class JoinT ...

  6. IDEA的Python工程在inspections时提示:The JDK is not configured properly for this project. Inspection cannot proceed.

    原因:IDEA将工程误认为了Java工程. 解决方法:如果确认这是个Python工程,修改*.iml文件,将下面的这一行删除 <orderEntry type="inheritedJd ...

  7. MyBaits理解?

    (1)MyBaits是一个基于Java的持久层框架,支持普通或定制化SQL查询.存储过程以及高级映射,使用XML或注解来配置和映射信息. (2)应用程序使用SQLSessionFactory实例,一个 ...

  8. (转)mysql基础命令

    Sql代码 asc 按升序排列 desc 按降序排列 下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE ...

  9. ANR错误分析

    链接1:https://www.cnblogs.com/xiyuan2016/p/6740623.html 链接2:https://www.jianshu.com/p/3959a601cea6

  10. 【Spark机器学习速成宝典】模型篇08保序回归【Isotonic Regression】(Python版)

    目录 保序回归原理 保序回归代码(Spark Python) 保序回归原理 待续... 返回目录 保序回归代码(Spark Python) 代码里数据:https://pan.baidu.com/s/ ...