Day 11 函数名的第一类对象及使用,f格式化,迭代器,递归
第一类对象 -- 特殊点
1.函数可作为值可以赋值给变量
def func():
print(1)
print(func)
a = func
a()
2.当做元素存放在容器中
def fun():
print(1)
lst = [func,func,func]
for i in lst:
i()
3.函数名可以当做函数的参数
def func(f):
f()
def foo():
print(123)
func(foo)
4.函数名可以当做函数的返回值
def func():
def foo():
print(123)
return foo
a = func()
a()
f格式化 python3.6以上才能用
s = f"你好{'长信'}" 推荐小写
s1 = F"你好{'长信'}"
print(s)
print(s1)
s = f"你好{'长信'}" #填充字符串
s1 = F"你好{'长信'}"
s1 = f"你还是挺好的{s}" #填充变量
s1 = f"{35+15}" #填充计算公式
a = 10
b = 20
s1 = f"{a if a > b else b}" #填充表达式
s1 = f"{{{{'长信水电费'}}}}" #填充大括号
s1 = f"{{}{}{}{}{}}" #填充大括号
print(s)
print(s1)
s1 = f"{print(123)}"
print(s1)
迭代器:工具
可迭代对象
lst,dic,str,set,tuple--可迭代对象。使用灵活
查看是不是可迭代对象
方法一
list.iter()
dict.iter()
set.iter()
str.iter()
tuple.iter()
方法二
查看源码
方法三
print(dir(list))
官方说明
只要有__iter__方法就是可迭代对象
可迭代对象的优点:
1.使用灵活
2.直接查看
可迭代对象的缺点:
1.消耗内存
list.tuple.str-索引
dict--键
set--直接取值
int,bool--没有方法,不是可迭代对象
迭代器:
官方声明只要具有__iter__和__next__就是迭代器
lst = [1,2,3,4]
new_list = lst.iter() #将迭代对象转换成迭代器
print(new_list)
print(new_list.iter())
print(new_list.next())
for 的本质
s = '12345' #更改版for的本质
s = [1,2,3,4,5,6]
count = len(s)
new_s = s.iter()
while count:
print(new_s.next())
count -= 1
s = '12345'
new_s = s.iter()
while True:
try:
print(new_s.next())# for真实本质
except StopIteration:
print('取超了')
break
except Exception: #面试不写这个,写for真实本质
print('我是万能的')
break
总结
可迭代对象:
优点:使用灵活,可以直接查看值
缺点:占内存,不能迭代取值
迭代器:
优点:节省内存,惰性机制
缺点:使用不灵活,操作繁琐,不能直接查看值
迭代器的特性:
1.一次性的
2.不能逆行(不能后退)
3.惰性机制(节省内存)
什么是可迭代对象:
1.具有很多私有方法,具有__iter__()方法,就是可迭代对象。
什么是迭代器:
具有__iter__()和 __next__()方法就是迭代器
迭代器什么时候使用:
当容器中数据量较多的时候使用迭代器
递归函数
1.自己调用自己(不断调用自己本身)--死递归
2.有明确的终止条件
满足以上两个才算递归
递:一直执行知道碰到条件成立结束
归:
官方声明:最大层次1000,实际测试998/997
死递归
def func():
print(123)
func()
func()
def age(n):
if n ==3:
return '猜对了'
else:
age(n+1)
age(1)
def age(n):
if n == 4:
return 18
else:
return age(n+1)-2#age(age2(age3(age(4))-2)-2)-2
print(age(1))
今日内容总结
1.函数名的第一类对象及使用
1.1函数名可以当做值被赋值
1.2函数名可以当做元素存放在容器中
1.3函数名可以当做另一个函数的参数
1.4函数名可以当做返回值
2.f格式化
支持:F,表达式,函数调用,数字计算,列表取值,字典取值
3.迭代器
1.可迭代对象:具有__iter__()方法就是可迭代对象
2.迭代器:具有__iter__(),具有__next__()方法就是迭代器
4.递归
1.自己调用自己
2.有明确的结束条件
满足两个才是递归
一递 一归