ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python入门学习篇十六

2022-01-14 08:33:23  阅读:198  来源: 互联网

标签:__ 10 生成器 入门 python res 十六 yield print


迭代取值跟索引取值的对比

# 迭代取值提供了一种不依赖于索引取值的方式
s = 'hello'

迭代取值:
    1. 不依赖于索引取值,__next__()取值
    2. 不能重复取值,只能从左往右一个一个取值
索引取值:
    1. 必须要是一个容器类型
     2. 可以重复取值

生成器(自定义的迭代器)

# 生成器就是自定义的迭代器

def index():
    print('first')
    yield 123,234,345
    print('second')
    yield 'aaaa'
    print('third')
    yield 'xxxx'


# 函数里面有yield关键字之后,函数调用之前还是函数,一旦调用函数变成了生成器

res=index()  # 一旦是生成器,就可以__next__取值了
print(res.__next__())
# 函数中的yield关键字的玩法:__next__一下,走一个yield,光标就停在了yield
# 如果在__next__,会从上一次停留的yield位置继续往下走
print(res.__next__()) # StopIteration
print(res.__next__()) # StopIteration


# l = [1, 2, 3,]
# a= l.__iter__()
# while True:
#     print(a.__next__())

生成器实现range功能

# range功能:
1.玩法一:
range(10)  # 0-9的数字
2. 玩法二:
range(3,10)  # 3-9的数字
3. 玩法三:
range(1, 10, 2) # 1,3,5,7,9

# 玩法2:
def my_range(start, end=None, step=1):
    # start => 2
    # end => 10
    if not end:
        end = start
        start = 0

    while start < end:
        yield start
        start += step

#
# res = my_range(2, 10, 2)
res = my_range(10)

for i in res:
    print(i)

yield传值

def index(name):
    print('%s 准备干饭' % name)
    while True:
        food = yield
        print('%s 开干 %s' % (name, food))

res=index('ly')
res.__next__()
# res.__next__()

res.send('苹果')
res.send('橘子')

yield跟return的对比

yield:
    1. 函数内遇到yield关键字把函数变成了生成器
    2. yield 也可以返回值,并且支持返回多个(元组形式)
    3. 遇到yield,函数不会结束,而是"停住"
    4. yield 也支持传值
return 
    1. 后面可以跟返回值,也支持返回多个(元组形式)
    2. 函数遇到return,会立马结束

生成器的表达式

# 1. 生成器的笔试题
# 求和
def add(n, i):
    return n + i


# 调用之前是函数 调用之后是生成器
def test():
    for i in range(4):
        yield i


g = test()  # 初始化生成器对象
for n in [1, 10]:
    g = (add(n, i) for i in g)
    '''
        第一次循环:
            g = (add(1, i) for i in g)
        第二次循环:
            g = (add(10, i) for i in (add(10, i) for i in g))
    '''
res = list(g)
print(res)

常见的内置函数

# print(abs(123))
# print(abs(-123))  # 求绝对值

# l = [1, 2, 3, 4,5,6,7]
# print(all(l))
# print(any(l))
# print(sum(l)) # 求和

# print(divmod(100,10))
# print(divmod(101,10))
# print(divmod(99,10))

'''
    100条数据,10条  10
    101条数据,10条  11
    99条数据   10条  10
'''
# num,mod = divmod(100, 10)
# if not mod:
#     page = num+1


string = """
# hahahahh
print('hello world')
"""
# eval(string)
# exec(string)

# a = 123
# s = 'aaaa'
# print(type(a) is int)
# print(type(s) is str)
# print(isinstance(s, int))  # 判断某个数据是不是某个实例

# print(chr(68))
# print(ord('A'))

# print(pow(2,3))  # 2
# print(pow(3,3))  # 2
# print(round(4.3))
# print(round(4.5))
# print(round(4.8))

# bytes()
s = 'aaa'
print(s.encode('utf8'))
res=bytes(s, 'utf8')
print(res)
print(res.decode('utf8'))
print(str(res,'utf8'))

 

标签:__,10,生成器,入门,python,res,十六,yield,print
来源: https://www.cnblogs.com/zhangrukai/p/15800412.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有