python27期day11:f-strings格式化、迭代器、生成器、做业题。

一、建议小写f:python

name = "宝元"
age = 18
sex = "男"
msg = F"姓名:{name},性别:{age},年龄:{sex}"
msg1 = f"姓名:{name},性别:{age},年龄:{sex}"
print(msg)
print(msg1)
结果:  姓名:宝元,性别:18,年龄:男

     姓名:宝元,性别:18,年龄:男程序员

二、表达式:字典取值、列表取值、函数表达式
函数计算:
def func(a,b):
return a + b
msg = f"运行结果{func(1,2)}"
print(msg)
结果:运行结果3
列表切片:
lst = [1,2,32,34,45,5]
msg = f"运行结果:{lst[0:3]}"
print(msg)
结果:运行结果:[1, 2, 32]
字典取值:
dic = {"key":1,"key1":22}
msg = f"运行结果:{dic['key1']}"
print(msg)
结果:运行结果:22
三元表达式:
a = 10
b = 20
msg = f"{a if a > b else b}"
print(msg)
结果:20
三、迭代器:  具备__iter__()和__next__()方法就是一个迭代器
优势:     节省内存
        文件句柄就是迭代器
        迭代器:一个一个取值
        for循环就是一个迭代器
        迭代器也是一个可迭代对象
缺点:     只能一个方向直行
        一次性的
        不能灵活操做、不能直接查看元素个数
应用:     内存小、数据量巨大时、建议使用迭代器
四、可迭代对象:  str、list、tuple。。。
优势:     
python中规定、只要具备__iter__()方法就是可迭代对象

        可迭代对象能重复取值
        使用灵活(每一个可迭代对象都有本身的方法)
        可以直接查看元素的个数
缺点:     占内存
应用:     内存空间大、当数据量比较少、建议使用可迭代对象。
str.__iter__()
list.__iter__()
dict.__iter__()
set.__iter__()
tuple.__iter__()
lst = [1,2,3,4,5]
五、转换:     将可迭代对象转换成迭代器
l = lst.__iter__()
print(l)
结果:<list_iterator object at 0x00000000027187F0>
有多少个元素就只能next多少次
取值:
print(l.__next__())
六、注意点:
lst = [1,2,3,4,5]
print(lst.__iter().__next__())  #lst.__iter__()是一个迭代器1
print(lst.__iter().__next__())  #lst.__iter__()是一个迭代器2
七、for循环本质:
s = "alex"
s1 = s.__iter__()
while True:
  try:  #尝试着运行一下缩进体中的代码
    print(s1.__next__())
  except StopIteration:
    break
八、两种方法:
方法一:
lst = [1,2,3,54]
l = lst.__iter__()
print(l.__next__())
方法二:
lst = [1,2,3,54]
l = iter(lst)
print(next(l))
九、时间换空间:用大量的时间换取一些空间变小--只能一点点的next、例如迭代器、生成器
空间换时间:使用大量的空间来节省时间、例如列表、可迭代对象、
十、生成器的本质就是一个迭代器
十一、生成器和迭代器的区别?
              迭代器:文件句柄、经过数据转换python自带提供
              生成器:程序员本身实现
十二、生成器的目的:不在经过数据转换实现、而是经过代码编写实现。
  生成器的定义:基于函数实现的生成器
        表达式实现生成器
1三、函数体中存在yield就是定义一个生成器
def func():
print(1)
yield 5
print(func())  #建立一个生成器对象的内存地址
print时打印的是一个生成器对象的内存地址
1四、语法分析
  词法分析
1五、生成器怎么用?
特色:惰性机制
def func():
yield 1  #记录执行位置的
yield 2
yield 3
a = func() #获取的是生成器的内存地址
print(next(a)) #取值
print(next(a)) #取值
print(next(a)) #取值
结果:1
   2
   3
1六、区分迭代器和生成器?
            查看是否可用send方法
            看内存地址(主推荐的)
1七、生成器必定是一个迭代器、可是迭代器不必定是一个生成器
1八、迭代器和生成器的优势:
            节省空间
  迭代器和生成器的缺点:
            不能直接使用元素
            不能直观查看元素的个数
            使用不灵活
            稍微消耗时间
            一次性的、不能逆行
1九、yield from--将列表总体返回
def func():
yield from [1,2,23,54,5]
g = func()
for i in g:
print(i)
结果: 1
    2
    23
    54
    5
20、yield from--将列表逐个返回
def func():
yield from [1,2,23,54,5]
g = func()
print(next(g))
2一、yield from小坑
def func():
lst1 = ["卫龙","老冰棍","北冰洋","牛羊配"]
lst2 = ["馒头","花卷","豆包","大饼"]
yield from lst1
yield from lst2
g = func()
for i in g:
print(i)
结果: 卫龙
    老冰棍
    北冰洋
    牛羊配
    馒头
    花卷
    豆包
    大饼
2二、yield 能返回多个、以元组的形式存储
  yield 能返回各类数据类型(python的对象)
  yield 可以写多个而且都执行
  yield 可以记录执行位置
  yield 后边不写内容、默认返回None
  yield 都是将数据一次性返回
2三、做业题:
# 1.请写出下列代码的执行结果def func1():   print('in func1')def func2():   print('in func2')ret = func1ret()   #in func1ret1 = func2ret1()  #func2ret2 = retret3 = ret2ret2()  #in func1ret3()  #in func1# 二、def func1():    print ( 'in func1' )def func2():    print ( 'in func2' )def func3(x, y):        #x = func2,y = func1    x ()            #func2()    print ( 'in func3' )    y ()            #func1()print ( 111 )   #111func3 ( func2, func1 )  #in func2                        #in func3                        #in func1print ( 222 )   #222# 三、选作题def func1():    print('in func1')def func2(x):               #x == func1    print('in func2')    return x                #return下func1就是把func1返回def func3(y):               #y == func2    print('in func3')    return yret = func2(func1)          #ret == func1ret()                       #func1()ret2 = func3(func2)         #ret == func2ret3 = ret2(func1)          #func2(func1)   #ret3 == func1ret3()                      #func1()# 结果:in func2#       in func1#       in func3#       in func2#       in func1# 四、def func(arg):    return arg.replace('alex', '****')def run():    msg = "Alex和你们都是好朋友"    result = func(msg)    print(result)run()data = run()print(data)# 结果:Alex和你们都是好朋友#       Alex和你们都是好朋友#       None# 五、data_list = []def func(arg):    return data_list.insert(0, arg)data = func('绕不死你')print(data)                      #Noneprint(data_list)                 #data_list = ['绕不死你']# 六、def func():    print('你好呀')    return '好你妹呀'func_list = [func, func, func]for item in func_list:    val = item()    print(val)#你好呀# 好你妹呀# 你好呀# 好你妹呀# 你好呀# 好你妹呀# 七、def func():    print('你好呀')    return '好你妹呀'func_list = [func, func, func]for i in range(len(func_list)):    val = func_list[i]()    print(val)# 你好呀# 好你妹呀# 你好呀# 好你妹呀# 你好呀# 好你妹呀# 八、def func():    return '大烧饼'def bar():    return '吃煎饼'def base(a1, a2):    return a1() + a2()result = base(func, bar)print(result)   #大烧饼吃煎饼# 九、def func():    for item in range(10):        pass        return itemfunc()# 结果:空# 十、def func():    for item in range(10):        pass       yield itemfunc()# 结果:空# 十一、item = '老男孩'def func():    item = 'alex'    def inner():        print(item)    for inner in range(10):        pass    inner()func()  #类型错误、int对象不可调用# 十二、l1 = []def func(args):    l1.append(args)    return l1print(func(1))  #[1]print(func(2))  #[1,2]print(func(3))  #[1,2,3]# 1三、name = '宝元'def func():    global name    name = '男神'print(name) #宝元func()print(name) #男神# 1四、name = '宝元'def func():    print(name)func()  #宝元# 1五、name = '宝元'def func():    print(name)    name = 'alex'func()  #报错赋值前引用的局部变量# 1六、def func():    count = 1    def inner():        nonlocal count        count += 1        print(count)    print(count)    inner()    print(count)func()#结果: 1#       2#       2# 1七、def extendList(val,list=[]):    list.append(val)    return listlist1 = extendList(10)list2 = extendList(123,[])list3 = extendList('a')print('list1=%s'%list1) #list1 = [10,'a']print('list2=%s'%list2) #list2 = [123]print('list3=%s'%list3) #list3 = [10,'a']# 1八、def extendList(val,list=[]):    list.append(val)    return listprint('list1=%s'% extendList(10))       #list1=[10]print('list2=%s'% extendList(123,[]))   #list2=[123]print('list3=%s'% extendList('a'))      #list3=[10, 'a']#1八、用你的理解解释一下什么是可迭代对象,什么是迭代器。# python中规定、只要具备__iter__()方法就是可迭代对象、例如:str字符串、list列表、tuple元组#具备__iter__()和__next__()方法就是一个迭代器、例如:文件句柄就是迭代器#1九、使用while循环实现for循环的本质(面试题)s = "alex"s1 = s.__iter__()while True:    try:        print(s1.__next__())    except StopIteration:        break
相关文章
相关标签/搜索