第十一章

day11

第十一章

1、函数的第一类对象及使用

  1. 函数名可以当做值,赋值给变量:

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

    def login():
        print("这是登录")
    def register():
        print("这是注册")
    def index():
        print("这是主页")
        
    msg = """
    1 登录
    2 注册
    3 主页
    """
    choose = input(msg)   # 1
    if choose.isdecimal():   
        if choose == "1":    
            login()   
        elif choose == "2":      
            register()   
        elif choose == "3":   
            index()
    

    改良:

    def login(): 
        print("这是登录")
    def register():  
        print("这是注册")
    def index():  
        print("这是博客园的主页")
    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("请正确输入!")
    
    
  3. 函数名可以当做函数的参数

    def func(a):
        print(111)
        a()
    def foo():
        print(222)
    func(foo)
    
  4. 函数名可以当做函数的返回值

    def func():
        def foo():
            print(111)
        return foo
    a = func()
    a()
    func()()
    

    练习:

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

2、格式化 f-string

  1. 任意表达式

    f"姓名:{name} 年龄: {}"
    f"姓名:{"cai"}"
    f"年龄:{34}"
    
  2. 可以插入表达式

    print(f"{3 if 3>2 else 2}")
    
  3. 多行f

    speaker = f'Hi {name}.'\   
    		 f'You are {age} years old.'\      
    		 f'You are a {ajd} guy!'
    
  4. 其他细节

    # ! , : { } ;这些标点不能出现在{} 这里面。
    # print(f'{;12}')  # 报错
    # 所以使用lambda 表达式会出现一些问题。
    # 解决方式:可将lambda嵌套在圆括号里面解决此问
    

3、迭代器

  1. 可迭代对象:

    • 具有 __ iter __() 方法就是可迭代对象

      我们可以通过dir()方法去判断一个对象具有什么方法,dir()会返回一个列表,这个列表中含有该对象的以字符串的形式的所有方法名

      lst.__iter__()
      dict.__iter__()
      
  2. 迭代器:工具

    1. 具有_ iter _() 和 _ next _ () l两个方法的才是迭代器

      iter() 和 _ iter _ () 是一样的 推荐使用iter()

      lst = [1,2,3,4]
      l = lst.__iter__()  # 将可迭代对象转换成迭代
      
      l.__iter__() # 迭代器指定__iter__()还是原来的迭代
      print(l.__next__())
      print(l.__next__())
      
    2. 迭代器基于上一次停留的位置,进行取值

    3. 迭代器的优点:

      惰性机制:节省空间

    4. 迭代器的缺点:

      不能直接查看值,迭代器看查到的是一个迭代器的内存地址

      一次性,用完就没有了

      不能逆行(后退)

  3. 空间换时间:容器存储大量的元素,取值时间短,但是容器占用空间大

  4. 时间换空间:迭代器就是节省了空间,但是取值时间较长

  5. for 循环的本质:(重点)

    while True:
        try:
            print(l.__next__())
        exxept StopIteration:
            break
            
    
  6. python2 和 python3 中的区别

    pyhton3:   
        iter()和 __iter__() 都有  
        next()和__next__()都有
    python2:  
        iter()   
        next()
    

    python 三大器

    迭代器

    生成器

    装饰器

posted @ 2019-09-10 23:16  袁昌旺  阅读(73)  评论(0编辑  收藏  举报