函数名 迭代器 任意表达式 插入表达式 等操作

Posted biyunfeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数名 迭代器 任意表达式 插入表达式 等操作相关的知识,希望对你有一定的参考价值。

函数名的作用

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

可迭代对象

  1. 在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把文件句柄设置成迭代器)。

以上是关于函数名 迭代器 任意表达式 插入表达式 等操作的主要内容,如果未能解决你的问题,请参考以下文章

Python装饰器迭代器&生成器re正则表达式字符串格式化

Python装饰器迭代器&生成器re正则表达式字符串格式化

生成器; 推导式

第十三天 叠加多个装饰器 迭代器 生成器

python学习笔记第九节(迭代器,生成器,三元表达式)

传递迭代器值而不是引用函数