Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
71215c58
Kaydet (Commit)
71215c58
authored
Ock 27, 2014
tarafından
Benjamin Peterson
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Sade Fark
merge 3.3 (closes #12704)
üst
908669bd
d1c85fd2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
62 additions
and
94 deletions
+62
-94
expressions.rst
Doc/reference/expressions.rst
+47
-52
simple_stmts.rst
Doc/reference/simple_stmts.rst
+15
-42
No files found.
Doc/reference/expressions.rst
Dosyayı görüntüle @
71215c58
...
@@ -319,27 +319,25 @@ Yield expressions
...
@@ -319,27 +319,25 @@ Yield expressions
yield_atom: "(" `yield_expression` ")"
yield_atom: "(" `yield_expression` ")"
yield_expression: "yield" [`expression_list` | "from" `expression`]
yield_expression: "yield" [`expression_list` | "from" `expression`]
The :keyword:`yield` expression is only used when defining a :term:`generator`
The yield expression is only used when defining a :term:`generator` function and
function,
thus can only be used in the body of a function definition. Using a yield
and can only be used in the body of a function definition. Using a
expression in a function's body causes that function to be a generator.
:keyword:`yield` expression in a function definition is sufficient to cause that
definition to create a generator function instead of a normal function.
When a generator function is called, it returns an iterator known as a
When a generator function is called, it returns an iterator known as a
generator. That generator then controls the execution of a generator function.
generator. That generator then controls the execution of a generator function.
The execution starts when one of the generator's methods is called. At that
The execution starts when one of the generator's methods is called. At that
time, the execution proceeds to the first
:keyword:`yield` expression, where it
time, the execution proceeds to the first
yield expression, where it is
is suspended again, returning the value of :token:`expression_list` to
suspended again, returning the value of :token:`expression_list` to generator's
generator's caller. By suspended we mean that all local state is retained,
caller. By suspended, we mean that all local state is retained, including the
including the current bindings of local variables, the instruction pointer, and
current bindings of local variables, the instruction pointer, and the internal
the internal evaluation stack. When the execution is resumed by calling one of
evaluation stack. When the execution is resumed by calling one of the
the generator's methods, the function can proceed exactly as if the
generator's methods, the function can proceed exactly as if the yield expression
:keyword:`yield` expression was just another external call. The value of the
was just another external call. The value of the yield expression after
:keyword:`yield` expression after resuming depends on the method which resumed
resuming depends on the method which resumed the execution. If
the execution. If :meth:`~generator.__next__` is used (typically via either a
:meth:`~generator.__next__` is used (typically via either a :keyword:`for` or
:keyword:`for` or the :func:`next` builtin) then the result is :const:`None`,
the :func:`next` builtin) then the result is :const:`None`. Otherwise, if
otherwise, if :meth:`~generator.send` is used, then the result will be the
:meth:`~generator.send` is used, then the result will be the value passed in to
value passed in to
that method.
that method.
.. index:: single: coroutine
.. index:: single: coroutine
...
@@ -349,11 +347,11 @@ suspended. The only difference is that a generator function cannot control
...
@@ -349,11 +347,11 @@ suspended. The only difference is that a generator function cannot control
where should the execution continue after it yields; the control is always
where should the execution continue after it yields; the control is always
transferred to the generator's caller.
transferred to the generator's caller.
:keyword:`yield` expressions are allowed in the :keyword:`try` clause of a
yield expressions are allowed in the :keyword:`try` clause of a :keyword:`try`
:keyword:`try` ... :keyword:`finally` construct. If the generator is not
... :keyword:`finally` construct. If the generator is not resumed before it is
resumed before it is finalized (by reaching a zero reference count or by being
finalized (by reaching a zero reference count or by being garbage collected),
garbage collected), the generator-iterator's :meth:`~generator.close` method
the generator-iterator's :meth:`~generator.close` method will be called,
will be called,
allowing any pending :keyword:`finally` clauses to execute.
allowing any pending :keyword:`finally` clauses to execute.
When ``yield from <expr>`` is used, it treats the supplied expression as
When ``yield from <expr>`` is used, it treats the supplied expression as
a subiterator. All values produced by that subiterator are passed directly
a subiterator. All values produced by that subiterator are passed directly
...
@@ -373,11 +371,23 @@ the yield expression. It can be either set explicitly when raising
...
@@ -373,11 +371,23 @@ the yield expression. It can be either set explicitly when raising
.. versionchanged:: 3.3
.. versionchanged:: 3.3
Added ``yield from <expr>`` to delegate control flow to a subiterator
Added ``yield from <expr>`` to delegate control flow to a subiterator
The parentheses
can be omitted when the :keyword:`yield` expression is the
The parentheses
may be omitted when the yield expression is the sole expression
sole expression
on the right hand side of an assignment statement.
on the right hand side of an assignment statement.
.. index:: object: generator
.. seealso::
:pep:`0255` - Simple Generators
The proposal for adding generators and the :keyword:`yield` statement to Python.
:pep:`0342` - Coroutines via Enhanced Generators
The proposal to enhance the API and syntax of generators, making them
usable as simple coroutines.
:pep:`0380` - Syntax for Delegating to a Subgenerator
The proposal to introduce the :token:`yield_from` syntax, making delegation
to sub-generators easy.
.. index:: object: generator
Generator-iterator methods
Generator-iterator methods
^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^
...
@@ -395,13 +405,12 @@ is already executing raises a :exc:`ValueError` exception.
...
@@ -395,13 +405,12 @@ is already executing raises a :exc:`ValueError` exception.
.. method:: generator.__next__()
.. method:: generator.__next__()
Starts the execution of a generator function or resumes it at the last
Starts the execution of a generator function or resumes it at the last
executed :keyword:`yield` expression. When a generator function is resumed
executed yield expression. When a generator function is resumed with a
with a :meth:`~generator.__next__` method, the current :keyword:`yield`
:meth:`~generator.__next__` method, the current yield expression always
expression always evaluates to :const:`None`. The execution then continues
evaluates to :const:`None`. The execution then continues to the next yield
to the next :keyword:`yield` expression, where the generator is suspended
expression, where the generator is suspended again, and the value of the
again, and the value of the :token:`expression_list` is returned to
:token:`expression_list` is returned to :meth:`next`'s caller. If the
:meth:`next`'s caller.
generator exits without yielding another value, a :exc:`StopIteration`
If the generator exits without yielding another value, a :exc:`StopIteration`
exception is raised.
exception is raised.
This method is normally called implicitly, e.g. by a :keyword:`for` loop, or
This method is normally called implicitly, e.g. by a :keyword:`for` loop, or
...
@@ -411,12 +420,12 @@ is already executing raises a :exc:`ValueError` exception.
...
@@ -411,12 +420,12 @@ is already executing raises a :exc:`ValueError` exception.
.. method:: generator.send(value)
.. method:: generator.send(value)
Resumes the execution and "sends" a value into the generator function. The
Resumes the execution and "sends" a value into the generator function. The
``value`` argument becomes the result of the current :keyword:`yield`
*value* argument becomes the result of the current yield expression. The
expression. The :meth:`send` method returns the next value yielded by the
:meth:`send` method returns the next value yielded by the generator, or
generator, or raises :exc:`StopIteration` if the generator exits without
raises :exc:`StopIteration` if the generator exits without yielding another
yielding another value. When :meth:`send` is called to start the generator,
value. When :meth:`send` is called to start the generator, it must be called
it must be called with :const:`None` as the argument, because there is no
with :const:`None` as the argument, because there is no yield expression that
:keyword:`yield` expression that
could receive the value.
could receive the value.
.. method:: generator.throw(type[, value[, traceback]])
.. method:: generator.throw(type[, value[, traceback]])
...
@@ -478,20 +487,6 @@ For examples using ``yield from``, see :ref:`pep-380` in "What's New in
...
@@ -478,20 +487,6 @@ For examples using ``yield from``, see :ref:`pep-380` in "What's New in
Python."
Python."
.. seealso::
:pep:`0255` - Simple Generators
The proposal for adding generators and the :keyword:`yield` statement to Python.
:pep:`0342` - Coroutines via Enhanced Generators
The proposal to enhance the API and syntax of generators, making them
usable as simple coroutines.
:pep:`0380` - Syntax for Delegating to a Subgenerator
The proposal to introduce the :token:`yield_from` syntax, making delegation
to sub-generators easy.
.. _primaries:
.. _primaries:
Primaries
Primaries
...
...
Doc/reference/simple_stmts.rst
Dosyayı görüntüle @
71215c58
...
@@ -445,53 +445,26 @@ The :keyword:`yield` statement
...
@@ -445,53 +445,26 @@ The :keyword:`yield` statement
..
productionlist
::
..
productionlist
::
yield_stmt
:
`
yield_expression
`
yield_stmt
:
`
yield_expression
`
The
:
keyword
:`
yield
`
statement
is
only
used
when
defining
a
generator
function
,
A
:
keyword
:`
yield
`
statement
is
semantically
equivalent
to
a
:
ref
:`
yield
and
is
only
used
in
the
body
of
the
generator
function
.
Using
a
:
keyword
:`
yield
`
expression
<
yieldexpr
>`.
The
yield
statement
can
be
used
to
omit
the
parentheses
statement
in
a
function
definition
is
sufficient
to
cause
that
definition
to
that
would
otherwise
be
required
in
the
equivalent
yield
expression
create
a
generator
function
instead
of
a
normal
function
.
statement
.
For
example
,
the
yield
statements
::
When
a
generator
function
is
called
,
it
returns
an
iterator
known
as
a
generator
iterator
,
or
more
commonly
,
a
generator
.
The
body
of
the
generator
function
is
executed
by
calling
the
:
func
:`
next
`
function
on
the
generator
repeatedly
until
it
raises
an
exception
.
When
a
:
keyword
:`
yield
`
statement
is
executed
,
the
state
of
the
generator
is
frozen
and
the
value
of
:
token
:`
expression_list
`
is
returned
to
:
meth
:`
next
`
's
caller. By "frozen" we mean that all local state is retained, including the
current bindings of local variables, the instruction pointer, and the internal
evaluation stack: enough information is saved so that the next time :func:`next`
is invoked, the function can proceed exactly as if the :keyword:`yield`
statement were just another external call.
The :keyword:`yield` statement is allowed in the :keyword:`try` clause of a
:keyword:`try` ... :keyword:`finally` construct. If the generator is not
resumed before it is finalized (by reaching a zero reference count or by being
garbage collected), the generator-iterator'
s
:
meth
:`
close
`
method
will
be
called
,
allowing
any
pending
:
keyword
:`
finally
`
clauses
to
execute
.
When
``
yield
from
<
expr
>``
is
used
,
it
treats
the
supplied
expression
as
a
subiterator
,
producing
values
from
it
until
the
underlying
iterator
is
exhausted
.
..
versionchanged
::
3.3
Added
``
yield
from
<
expr
>``
to
delegate
control
flow
to
a
subiterator
For
full
details
of
:
keyword
:`
yield
`
semantics
,
refer
to
the
:
ref
:`
yieldexpr
`
section
.
..
seealso
::
yield
<
expr
>
yield
from
<
expr
>
:
pep
:`
0255
`
-
Simple
Generators
are
equivalent
to
the
yield
expression
statements
::
The
proposal
for
adding
generators
and
the
:
keyword
:`
yield
`
statement
to
Python
.
:
pep
:`
0342
`
-
Coroutines
via
Enhanced
Generators
(
yield
<
expr
>)
The
proposal
to
enhance
the
API
and
syntax
of
generators
,
making
them
(
yield
from
<
expr
>)
usable
as
simple
coroutines
.
:
pep
:`
0380
`
-
Syntax
for
Delegating
to
a
Subgenerator
Yield
expressions
and
statements
are
only
used
when
defining
a
:
term
:`
generator
`
The
proposal
to
introduce
the
:
token
:`
yield_from
`
syntax
,
making
delegation
function
,
and
are
only
used
in
the
body
of
the
generator
function
.
Using
yield
to
sub
-
generators
easy
.
in
a
function
definition
is
sufficient
to
cause
that
definition
to
create
a
generator
function
instead
of
a
normal
function
.
For
full
details
of
:
keyword
:`
yield
`
semantics
,
refer
to
the
:
ref
:`
yieldexpr
`
section
.
..
_raise
:
..
_raise
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment