函数名的作用
1.函数名的内存地址
def func():
print("呵呵")
print(func)
结果: <function func at 0x1101e4ea0>
2.函数名可以赋值给其他变量
def func():
print("呵呵")
print(func)
a = func # 把函数当成一个值赋值给另一个变量
a() # 函数调用 func()
结果:
呵呵
<function func at 0x0000025089261E18>
3.函数名可以当做容器类的元素
def func1():
print("呵呵")
def func2():
print("呵呵")
def func3():
print("呵呵")
def func4():
print("呵呵")
lst = [func1, func2, func3]
for i in lst:
i()
结果:
呵呵
呵呵
呵呵
4.函数名可以当做函数的参数
def func():
print("吃了么")
def func2(fn):
print("我是func2")
fn() # 执行传递过来的fn
print("我是func2")
func2(func) # 把函数func当成参数传递给func2的参数fn.
结果:
我是func2
吃了么
我是func2
5.函数名可以作为函数的返回值
def func_1():
print("这里是函数1")
def func_2():
print("这里是函数2")
print("这里是函数1")
return func_2
fn = func_1()
# 执行函数1. 函数1返回的是函数2, 这时fn指向的就是上面函数2
fn() # 执行func_2函数
结果:
这里是函数1
这里是函数1
这里是函数2
任意表达式
num = "alexmeetwusir"
print(f"全部大写:{num.upper()}")
结果:
全部大写:ALEXMEETWUSIR
插入表达式
def func(a,b,c):
d = a*b*c
return d
print(f"最终结果为" + f"{func(5,5,5)}")
结果:
最终结果为125
可迭代对象
- 在python中,但凡内部含有__iter__方法的对象,都是可迭代对象。
如何查看呢?
示例:
sum = "sjkfhs"
print(dir(sum)) 通过dir查看,如果输出列表内有iter方法就是可迭代对象
2.什么是可迭代对象?
从字面意思来说:可迭代对象就是一个可以重复取值的实实在在的东西。
? 从专业角度来说:但凡内部含有__iter__方法的对象,都是可迭代对象。
? 可迭代对象可以通过判断该对象是否有__iter__方法来判断。
?
? 可迭代对象的优点:
? 可以直观的查看里面的数据。
?
? 可迭代对象的缺点:
? 1.占用内存。
? 2.可迭代对象不能迭代取值(除去索引,key以外)。
迭代器
1.**在python中,内部含有__Iter__方法并且含有__next__方法的对象就是迭代器。**
2.迭代器的优点与缺点
迭代器的优点:
? 节省内存,迭代器在内存中相当于只占一个数据的空间:因为每次取值都上一条数据会在内存释放,加载当前的此条据。
? 惰性机制, next一次,取一个值,绝不过多取值。
? 有一个迭代器模式可以很好的解释上面这两条:迭代是数据处理的基石。扫描内存中放不下的数据集时,我们要找到种
? 惰性获取数据项的方式,即按需一次获取一个数据项。这就是迭代器模式。
迭代器的缺点:
? 不能直观的查看里面的数据。
? 取值时不走回头路,只能一直向下取值。
3.迭代器的惰性机制,操作一次返回一个值,下次操作继续从上次位置向下执行。
示例:
l1 = [1, 2, 3, 4, 5, 6]
obj = iter(l1)
for i in range(2):
print(next(obj))
for i in range(2):
print(next(obj))
for i in range(2):
print(next(obj))
结果:
第一次输出结果1,2
第二次输出结果1,2,3,4
第三次输出结果1,2,3,4,5,6 如果再加入一个for循环就会报错,因为列表中元素只到6.
4可迭代对象与迭代器对比
我们今天比较深入的了解了可迭代对象与迭代器,接下来我们说一下这两者之间比较与应用:
? 可迭代对象:
? 是一个私有的方法比较多,操作灵活(比如列表,字典的增删改查,字符串的常用操作方法等),比较直观,但是占用内存,而且不能直接通过循环迭代取值的这么一个数据集。
? 应用:当你侧重于对于数据可以灵活处理,并且内存空间足够,将数据集设置为可迭代对象是明确的选择。
? 迭代器:
? 是一个非常节省内存,可以记录取值位置,可以直接通过循环+next方法取值,但是不直观,操作方法比较单一的数据集。
? 应用:当你的数据量过大,大到足以撑爆你的内存或者你以节省内存为首选因素时,将数据集设置为迭代器是一个不错的选择。(可参考为什么python把文件句柄设置成迭代器)。
原文地址:https://www.cnblogs.com/biyunfeng/p/11934616.html
时间: 2024-10-05 21:18:35