函数名的应用,闭包,迭代器

本文深入探讨Python编程中的函数应用,包括函数名作为引用、参数及返回值,强调其灵活性。接着讲解闭包的概念,展示了闭包如何保留变量并实现惰性计算。最后,讨论了迭代器的使用,包括如何检查对象是否可迭代,以及如何通过迭代器模拟for循环。通过实例展示了迭代器节省内存和实现惰性计算的特点。
摘要由CSDN通过智能技术生成

目录

一、函数名的应用

二、闭包

三、迭代器 

 使⽤while循环+迭代器来模拟for循环


一、函数名的应用

1、函数名的内存地址

def fun():
    print("hello python")


print(fun)  # <function fun at 0x01888E80>

2、函数名可以赋值给其它变量

def fun():
    print("hello python")


a = fun
a()

3、函数名可以当做容器类的元素

def fun1():
    print("呵呵")

def fun2():
    print("哈哈")

4、函数名可以当做函数的参数

def fun():
    print("吃蛋")


def fun1(fn):
    print("我是fun1")
    fn()
    print("我是fun1")


fun1(fun)  # 把fun当做参数传给fun1的参数fn

5、函数名可以作为函数的返回值

def fun1():
    print("这里是函数fun1")

    def fun2():
        print("这里是函数fun2")

    print("这里是函数fun1")
    return fun2


fn = fun1()
fn()

二、闭包

什么事闭包?闭包就是内层函数对外层函数变量(非全局)的引用,叫闭包

def fun1():
    name = 'Tony'
    def fun2():
        print(name)
    fun2()
fun1()   # 结果Tony

我们可以使用__closure__来检测函数是否是闭包,使用函数名.__closure__,如果返回cell就是闭包,返回None就不是

def fun1():
    name = 'Tony'
    def fun2():
        print(name)
    fun2()
    print(fun2.__closure__)    # (<cell at 0x01871EC8: str object at 0x01933580>,)
fun1()   # 结果Tony

闭包的作⽤就是让⼀个变量能够常驻内存.供后⾯的程序使⽤

三、迭代器 

目前我们所熟悉的可迭代对象有:str , list , tuple , dict , set

s = 123456
for i in s:
    print(1)    # TypeError: 'int' object is not iterable  
                # 翻译过来就是int是不可迭代的    iterable(可迭代的)
我们可以使用dir函数来查看当前对象是否是可迭代的

s = "大家早上好,吃早饭了没有啊?"
print(dir(s))

在打印结果中.寻找__iter__如果能找到.那么这个类的对象就是⼀个可迭代对象 ,其他的同学们可以自己去尝试打印;

 这是查看一个对象是否是可迭代的第一种方法,我们还可以使用isinstence()函数来查看

from collections import Iterable
from collections import Iterator

li = [1,2,3,6,4,8,7,10]
lis = li.__iter__()  # 获取迭代器
print(isinstance(li,Iterable))  # True  # 是可迭代对象
print(isinstance(li,Iterator))  # False # 不是迭代器

print(isinstance(lis,Iterator))  # True
print(isinstance(lis,Iterator))  # True

for循环的机制 

# for循环机制
lis = [1,2]
# for i in lis:
#     print(i)
l = lis.__iter__()    # 获取迭代去
print(l.__next__())   # 获取下一个
print(l.__next__())

 使⽤while循环+迭代器来模拟for循环

lis = [1,2,3]
l = lis.__iter__()
while 1 :
    try:
        i = l.__next__()
        print(i)
    except StopIteration:
        break

总结:

        结:Iterable:可迭代对象.内部包含__iter__()函数

        Iterator:迭代器.内部包含__iter__()同时包含__next__()

迭代器的特点:

1.节省内存.

2.惰性机制

3.不能反复,只能向下执⾏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

py ~ 小久

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值