迭代器 递归

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

第一类对象-特殊点

1.可以当作值被赋值给变量

2.当作元素存放在容器中

3.函数名可以当作函数的参数

4.函数名可以当作函数的返回值

def func():
    print(1)
a = func
print(a)
print(func)
结果:


def func():
    print(1)
lst = [func,func,func]
print(lst)
for i in lst:
    i()
结果:
[<function func at 0x000002954B78CB70>, <function func at 0x000002954B78CB70>, <function func at 0x000002954B78CB70>]
1
1
1    

def func(f):
    print(f)
def foo():
    print(233)
func(foo)
结果:
    

def func():
    def foo():
        print(233)
    return foo
print(func())
结果:
    


def f1():
    def f2():
        print(1)
        def f3():
            print(123)
        return f2
    ret = f2()
    return ret
print(f1())
结果:
1
<function f1.<locals>.f2 at 0x0000018B0361CBF8>
    

f格式化--python3.6以上版本才可使用

%s 和format都可以 f

s = f"你好{'常鑫'}"#填充字符串
s1 = F"你好{'常鑫'}"
print(s,s1)

s = f"你好{s}"#填充变量
print(s)

s1 = f"{35+12}"#填充计算公式
print(s1)

a = 10
b = 20
s1 = f"{a if a>b else b}"#填充三元运算符
print(s1)

s1 = f"{{{{{'常鑫djb'}}}}}"#两个括号合一个
print(s1)

s1 = f"{print(123)}"#填充函数
print(s1)

def foo():
    def func():
        a = 1
        return a
    return func()
s1 = f"{foo()}"
print(s1)

lst = [1,2,3,4,5,6]
s1 = f"{lst[:5]}"
print(s1)

dic = {"key":123,"key2":345}
s1 = f"{dic['key']}"
print(s1)

迭代器

当容器中数据量较大的时候使用迭代器,如文件句柄

迭代器优点:节省内存,惰性机制

迭代器缺点:使用不灵活,操作繁琐,不能直接(查看元素)查看所有的值

迭代器的特性:

  • 一次性的
  • 不能逆行(不能后退)
  • 惰性机制(要一个给一个,不要就不给)----节省内存

器:工具

**可迭代对象---------list, dict, str, set ,tuple **--具有很多私有方法,具有__iter-_()方法就是一个可迭代对象,使用灵活

可迭代对象不一定是迭代器,但是迭代器一定是可迭代对象.

查看 是否是可迭代对象的方法

# list.__iter__()
# dict.__iter__()
# str.__iter__()
# set.__iter__()
# tuple.__iter__()

方法二

看源码

方法三 :dir

print(dir(list))

方法四

官方声明只具有__iter__方法就是可迭代对象

可迭代对象的优点:

1.使用灵活

2.直接查看值

可迭代对象的缺点:

消耗内存

取值方式:

list ,tuple,str --索引

dict--键

set--直接取值

for

迭代器: __iter__()将可迭代对象转化乘迭代器

官方声明只要具有__iter__方法__next__就是迭代器

基于上一个停留的位置进行取值

s = "152132"
new_s = s.__iter__()#将可迭代对象转化乘迭代器
print(new_s)
print(new_s.__next__())
print(new_s.__next__())
print(new_s.__next__())
print(new_s.__next__())
结果
1
5
2
1

for 循环原理

s = "12332"
new_s = s.__iter__()
while True:
    try:
        print(new_s.__next__())
    except StopIteration:  #捕获错误
        break
        
s = "12332"
new_s = s.__iter__()
while True:
    try:
        print(new_s.__next__())
    except Exception:  #万能异常捕获
        break

递归:

自己学习---学会百度

递归条件:1.自己调用自己(官方话,不断调用自己本身)

​ 2.要有明确的终止条件

满足以上两个才是有效递归

递:一直执行到带结束条件

归:从结束条件往回退

官方声明最大层次1000,实际测试998/997 可以修改

def age(n):
    if n == 4:
        return 18
    else :
        return age(n+1)-2
print(age(1))
原文地址:https://www.cnblogs.com/ciquankun/p/11206796.html