07,python迭代器(函数名的应用和格式化输出)

1,函数名的作用

例子

def func():
    print(666)

函数名指向的是函数的内存地址

print(func)  # <function func at 0x0000019F5518AB88>

函数名就是变量

def func():
    print(666)

f = func
f1 = f
f2 = f1
f2()

func()
f()
f1()
f2()

def func1():
    print('in func1')

def func2():
    print('in func2')

func2 = func1
func1()     # in func1

print(func1, func2)

函数名可以作为容器类的元素

def func1():
    print('in func1')


def func2():
    print('in func2')


def func3():
    print('in func3')


l1 = [func1, func2, func3]
for i in l1:
    i()

函数名可以作为函数的参数

def func(a):
    print(a)
    print('in func')


b = 3
func(b)


def func():
    print('in func')
def func1(x):
    x()
    print('in func1')
func1(func)

函数名可以作为函数的返回值

def sum():
    return 5 + 9

print(sum())        # 14

2,格式化输出

%s 和format

name = '太白'
age = 20
msg1 = '我叫%s,年%s岁' % (name, age)
msg2 = '我叫{},今年{}岁'.format(name, age)
print(msg1)
print(msg2)

新特性:格式化输出  3.6版本之后的

name = '太白'
age = 18
msg = f'我叫{name},今年{age}岁'
print(msg)

可以加表达式
dic = {'name': 'alex', 'age': 22}
dic = {'name': 'alex', 'age': 22}
msg = f'我叫{dic["name"]},今年{dic["age"]}'
print(msg)

count = 7
print(f'最终结果是:{count**2}')      # 最终结果是:49

name = 'barry'
msg = f'我的名字是{name.upper()}'
print(msg)        # 我的名字是BARRY
! , : {} ; 这些不能出现在{}这里面 

优点:
    1,结构更加简化。
    2,可以结合表达式,函数进行使用。
    3,效率提升很多。

3,迭代器

可迭代对象

字面意思:对象?python中一切皆对象。一个实实在在存在的值,对象。

可迭代:更新迭代循环的,重复的一个过程,更新迭代每次都有新的内容,

可以进行循环更新的一个实实在在的值。

  • 专业角度:可迭代对象?内部含有‘iter’方法的对象,可迭代对象.

    目前学过的可迭代对象? str list tuple dict set range 文件的句柄

  • 获取对象的所有方法:并且以字符创的形式表现:dir()

判断一个对象是否可迭代对象

si = 'sdrthsfgnsf'
print('__iter__' in dir(s1))

迭代器

内部含有'__iter__'方法并且含有'__next__'方法的对象 就是迭代器
可以判断是否是迭代器:('__iter__' in dir(对象)) and ('__next__' in dir(对象))
# 查看内部方法
print(dir(print))


with open('文件1',encoding='utf-8',mode='w') as f:
    print(('__iter__' in dir(f)) and ('__next__' in dir(f)))        # true  f 是一个迭代器



s = 'sdfhdfshdfs'
print(('__iter__' in dir(s)) and ('__next__' in dir(s)))        # False
字符串不是迭代器
可迭代对象是不可以一个一个取值的,我们看到的只是for循环对它进行了转化,转化成了迭代器,才可以一个一个进行取值的
可迭代对象可以转化成迭代器,用iter()函数进行转化
s1 = 'shertjhrtjhrtfg'
obj = iter(s1)
print(obj)      # <str_iterator object at 0x000001DC28DA30C8>
print(('__iter__' in dir(obj)) and ('__next__' in dir(obj)))        # True
# 取值
print(obj.__next__())  # 或  print(next(obj))
print(next(obj))        # s  运行一次取一个值
print(next(obj))        # h
print(next(obj))        # e
l1 = [11, 22, 33, 44, 55, 66]
obj = iter(l1)        # 对列表进行一个操作,形成一个迭代器
print("__iter__" in dir(obj) and "__next__" in dir(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))

'''
以上操作就相当于:
for i in l1:
    print(i)

'''

# 可迭代对象
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 1111, 1133, 1562]
count = 0
for i in l1:
    if count == 4:
        break
    else:
        print(i)
    count += 1

迭代器的特点:不回头

l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 1111, 1133, 1562]
obj = iter(l1)
for i in range(4):
    print(next(obj))
print('第一次')
#
for i in range(6):      # 这次从55开始执行
    print(next(obj))
print('第二次')

# 利用while循环模拟for循环对可迭代对象进行取值的机制 *****
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 1111, 1133, 1562]
obj = iter(l1)
while 1:
    try:
        print(next(obj))
    except StopIteration:
        break

更多内容可以查看自己学python的过程,简单笔记。-CSDN博客

更多内容可以查看自己学python的过程,简单笔记。-CSDN博客

更多内容可以查看自己学python的过程,简单笔记。-CSDN博客

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值