第十一章

本文深入探讨了Python中函数作为第一类对象的应用,包括函数赋值、容器元素、参数传递和返回值,以及格式化字符串f-string的使用技巧。同时,详细解析了迭代器的概念,如可迭代对象与迭代器的区别,以及for循环的本质。
摘要由CSDN通过智能技术生成

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 三大器

    迭代器

    生成器

    装饰器

转载于:https://www.cnblogs.com/yuancw/p/11503752.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值