欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

函数名的第一类对象及使用

程序员文章站 2022-04-29 20:19:53
[toc] 1. 第一类对象的特点 2. 格式化 3. 迭代器 3.1 可迭代对象 3.2 迭代器 4. 递归 ......

目录

1. 第一类对象的特点

#1. 函数名可以当作值被赋值给变量
def func():
    print(1)
ret = func
print(ret)  #输出func函数的地址

#2. 函数名当作元素存放在容器中
def func():
    a=1
    print(a)
lst = [func,func,func]   #放入lst中
for i in lst:
    i()      # 1 1 1
    
#3. 函数名可以当作函数的参数
def func(f):
    print(1)
    f()
def foo():
    print(2)
func(foo)    #foo地址给f   1  2

#4. 函数名可以当作函数的返回值
def func():
    print(2)       
    def foo():
        print(5)     
    return foo
ret = func()  #foo 地址   2 5
ret()  #调用 foo函数    

2. 格式化

f"你好{'a'}"  #填充字符串
f"你好{'a'}"  # f
s = f"你好{s1}"  #填充变量
s = f"{35+15}"  #填充计算公式
s = f"{a if a > b else b}"  #填充表达式
s = f"{lst[0:2]}"  #填充列表和字典

3. 迭代器

3.1 可迭代对象

list、dic、str、set、tuple都是可迭代对象,使用灵活
#方法:
1. list__iter__()
2. ctrl 查看源码
3. print(dir(list))

官方声明:只要对象具有__iter__()方法的就是迭代对象
可迭代对象的优点:
    1.使用灵活
    2.直接查看值
可迭代对象的缺点:消耗内存

取值方式:
list,tuple,str -- 索引
dict -- 键
set  -- 直接取值

3.2 迭代器

#官方声明只要具有__iter__()方法__next__()方法就是迭代器
lst = [1,2,3,4,6]
new_lst = lst.__iter__()  #将可迭代对象转换成迭代器
print(new_lst.__next__()) #从上一个位置开始向下打印一个元素
#迭代器取值超出范围时,会报错

#迭代器特性:
    #1.一次性的(用完就没有了)
    #2.不能逆行(不能后退)
    #3.惰性机制(节省内存)
#迭代器什么时候用:当容器数据量较大时,使用迭代器
s = [1,2,3,4,5,7]    # 更改版 for循环
count = len(s)
new_s = s.__iter__()
while count:
    print(new_s.__next__())
    count -= 1

# while循环实现for循环的本质
s = "12345"
new_s = s.__iter__()
while true:
    try:                        #会处理错误
        print(new_s.__next__()) # for真实本质
    except stopiteration: #当出stopiteration错误时,关闭
        break
#或
    except exception:   #万能异常捕获错误
        break

4. 递归

1. 不断调用自己本身(自己调用自己)——死循环
   最大层次1000,实际测试997/998
2. 有明确的终止条件
满足以上两个才是有效递归。
递:一直执行直到碰到结束条件
归:从结束条件开始往回退
def age(n):
    if n == 3:
        return 30
    else:
        return age(n+1)-5
print(age(1))     # 20

#上面解开:
def age3(n):
    if n == 3:
        return 30
    # else:
    #     return age2(n+1)-5
def age2(n):
    if n == 3:
        return 30
    else:
        return age3(n+1)-5
def age1(n):
    if n == 3:
        return 30
    else:
        return age2(n+1)-5
print(age1(1))