mirror of
https://github.com/satwikkansal/wtfpython.git
synced 2024-09-11 20:17:08 +03:00
Generator with Slice assignment trick
This commit is contained in:
parent
240e216c51
commit
70fe61737b
32
README.md
vendored
32
README.md
vendored
@ -33,6 +33,7 @@ So, here we go...
|
|||||||
- [▶ Deep down, we're all the same. *](#-deep-down-were-all-the-same-)
|
- [▶ Deep down, we're all the same. *](#-deep-down-were-all-the-same-)
|
||||||
- [▶ For what?](#-for-what)
|
- [▶ For what?](#-for-what)
|
||||||
- [▶ Evaluation time discrepancy](#-evaluation-time-discrepancy)
|
- [▶ Evaluation time discrepancy](#-evaluation-time-discrepancy)
|
||||||
|
- [▶ Generator with Slice Assignment](#-generator-with-slice-assignment)
|
||||||
- [▶ `is` is not what it is!](#-is-is-not-what-it-is)
|
- [▶ `is` is not what it is!](#-is-is-not-what-it-is)
|
||||||
- [▶ A tic-tac-toe where X wins in the first attempt!](#-a-tic-tac-toe-where-x-wins-in-the-first-attempt)
|
- [▶ A tic-tac-toe where X wins in the first attempt!](#-a-tic-tac-toe-where-x-wins-in-the-first-attempt)
|
||||||
- [▶ The sticky output function](#-the-sticky-output-function)
|
- [▶ The sticky output function](#-the-sticky-output-function)
|
||||||
@ -385,6 +386,37 @@ array = [2, 8, 22]
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### ▶ Generator with Slice Assignment
|
||||||
|
|
||||||
|
```py
|
||||||
|
iter1 = [1,2,3,4]
|
||||||
|
g1 = (x for x in iter1)
|
||||||
|
iter1 = [1,2,3,4,5]
|
||||||
|
|
||||||
|
iter2 = [1,2,3,4]
|
||||||
|
g2 = (x for x in iter2)
|
||||||
|
iter2[:] = [1,2,3,4,5]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Output:**
|
||||||
|
```py
|
||||||
|
>>>print(list(g1))
|
||||||
|
[1,2,3,4]
|
||||||
|
|
||||||
|
>>> print(list(g2))
|
||||||
|
[1,2,3,4,5]
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 💡 Explanation
|
||||||
|
|
||||||
|
- In the first expression `g1` yields the elements of original list `iter1`(instead of updated one). Since the `in`
|
||||||
|
clause is evaluated at the time of generator declaration, hence generator expression `g1` still have reference of original list
|
||||||
|
`iter1`
|
||||||
|
|
||||||
|
- In the second example, list `iter1` is updated using slice assignment. Slice assignment, in contrast to normal assignment(which creates a new list), updates the same list. We can view this as the slice of list being replace by the iterable on right hand side of equality. Hence, the generator `g2` yields updated `iter2` elements.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### ▶ `is` is not what it is!
|
### ▶ `is` is not what it is!
|
||||||
|
|
||||||
The following is a very famous example present all over the internet.
|
The following is a very famous example present all over the internet.
|
||||||
|
Loading…
Reference in New Issue
Block a user