python3 生成器的send_Python3基础 yield send 获得生成器后,需要先启动一次

?

???????Python : 3.7.3

?????????OS : Ubuntu 18.04.2 LTS

????????IDE : pycharm-community-2019.1.3

??????Conda : 4.7.5

???typesetting : Markdown

?

code

"""

@Author : 行初心

@Date : 2019/7/6

@Blog : www.cnblogs.com/xingchuxin

@Gitee : gitee.com/zhichengjiu

"""

def yield_test():

# next() 遇到yield会停止,保存数据并返回后面的数值

# send_value默认为None

a = 1

send_value = yield a + 1

print(send_value)

send_value = yield a + 1

print(send_value)

def main():

# 获得生成器

generator = yield_test()

# 启动 - 第一种方式

print(id(generator), generator.__next__())

# 想理解好 send 的功能,建议使用 Debug - Step Into(F7)。一步一步地跟下来

print(generator.send("hello"))

print("---")

# 获得生成器

generator = yield_test()

# 启动 - 第二种方式

print(id(generator), generator.send(None))

print(generator.send("world"))

print("---")

if __name__ == '__main__':

main()

?

result

/home/coder/anaconda3/envs/py37/bin/python /home/coder/PycharmProjects/NumericalComputation/demo.py

140581898176336 2

hello

2

---

140581898176456 2

world

2

---

Process finished with exit code 0

?

source_code

class Generator(Iterator[_T_co], Generic[_T_co, _T_contra, _V_co]):

@abstractmethod

def __next__(self) -> _T_co: ...

@abstractmethod

def send(self, value: _T_contra) -> _T_co: ...

@abstractmethod

def throw(self, typ: Type[BaseException], val: Optional[BaseException] = ...,

tb: Optional[TracebackType] = ...) -> _T_co: ...

@abstractmethod

def close(self) -> None: ...

@abstractmethod

def __iter__(self) -> Generator[_T_co, _T_contra, _V_co]: ...

@property

def gi_code(self) -> CodeType: ...

@property

def gi_frame(self) -> FrameType: ...

@property

def gi_running(self) -> bool: ...

@property

def gi_yieldfrom(self) -> Optional[Generator]: ...

# TODO: Several types should only be defined if sys.python_version >= (3, 5):

# Awaitable, AsyncIterator, AsyncIterable, Coroutine, Collection.

# See https: //github.com/python/typeshed/issues/655 for why this is not easy.

?

more_knowledge

code

"""

@Author : 行初心

@Date : 2019/7/6

@Blog : www.cnblogs.com/xingchuxin

@Gitee : gitee.com/zhichengjiu

"""

def yield_test():

a = 1

send_value = yield a + 1

print(send_value)

def main():

# 获得生成器

generator = yield_test()

# 直接用send("hello world")

generator.send("hello world")

if __name__ == '__main__':

main()

result

/home/coder/anaconda3/envs/py37/bin/python /home/coder/PycharmProjects/NumericalComputation/demo.py

Traceback (most recent call last):

File "/home/coder/PycharmProjects/NumericalComputation/demo.py", line 29, in

main()

File "/home/coder/PycharmProjects/NumericalComputation/demo.py", line 25, in main

generator.send("hello world")

TypeError: can't send non-None value to a just-started generator

Process finished with exit code 1

?

reference

https://www.cnblogs.com/xhcdream/p/8304953.html

?

resource

[文档 - English] docs.python.org/3

[文档 - 中文] docs.python.org/zh-cn/3

[规范] www.python.org/dev/peps/pep-0008

[规范] zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_language_rules

[源码] www.python.org/downloads/source

[ PEP ] www.python.org/dev/peps

[平台] www.cnblogs.com

[平台] gitee.com

?

Python具有开源、跨平台、解释型、交互式等特性,值得学习。 Python的设计哲学:优雅,明确,简单。提倡用一种方法,最好是只有一种方法来做一件事。 代码的书写要遵守规范,这样有助于沟通和理解。 每种语言都有独特的思想,初学者需要转变思维、踏实践行、坚持积累。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值