# Running Generators as single line version of a for loop

**URL:** <https://discourse.julialang.org/t/running-generators-as-single-line-version-of-a-for-loop/6196>\
**Category:** General Usage\
**Created:** [October 2, 2017, 1:53pm UTC](https://discourse.julialang.org/t/running-generators-as-single-line-version-of-a-for-loop/6196 "2017-10-02T13:53:27Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![krcools](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/krcools/32/10212_2.png) [@krcools](https://discourse.julialang.org/u/krcools)\
**Post date:** [October 2, 2017, 1:53pm UTC](https://discourse.julialang.org/t/running-generators-as-single-line-version-of-a-for-loop/6196/1 "2017-10-02T13:53:28Z")

</div>

Is there an elegant way to _run_ a Generator? What I want is this:

```julia
>@run println(i) for i in 1:3
1
2
3 

```

By the following definition I can get pretty close:

```julia
>macro run(ex)
     :(for x in ($ex); end)
 end

>@run (println(i) for i in 1:3)

```

Two questions:

- Is this as efficient as a for loop?
- Can I get rid of the parens?

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [October 2, 2017, 1:59pm UTC](https://discourse.julialang.org/t/running-generators-as-single-line-version-of-a-for-loop/6196/2 "2017-10-02T13:59:09Z")

</div>

You can use `collect` which will also return an array with all the “yielded” values.

You could also have written it as:

```julia
julia> foreach(println, 1:3)
1
2
3

```

---

<div class="post-metadata">

**Author:** ![yuyichao](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yuyichao/32/20_2.png) [@yuyichao](https://discourse.julialang.org/u/yuyichao)\
**Post date:** [October 2, 2017, 2:00pm UTC](https://discourse.julialang.org/t/running-generators-as-single-line-version-of-a-for-loop/6196/3 "2017-10-02T14:00:24Z")

</div>

Or really just `for i in 1:3 println(i) end`…

---

<div class="post-metadata">

**Author:** ![yuyichao](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yuyichao/32/20_2.png) [@yuyichao](https://discourse.julialang.org/u/yuyichao)\
**Post date:** [October 2, 2017, 2:01pm UTC](https://discourse.julialang.org/t/running-generators-as-single-line-version-of-a-for-loop/6196/4 "2017-10-02T14:01:26Z")

</div>

> [@krcools](#):
>
> :(for x in ($ex); end)

And you must use `$(esc(ex))` instead.

---

<div class="post-metadata">

**Author:** ![mkborregaard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkborregaard/32/556_2.png) [@mkborregaard](https://discourse.julialang.org/u/mkborregaard)\
**Post date:** [October 2, 2017, 2:29pm UTC](https://discourse.julialang.org/t/running-generators-as-single-line-version-of-a-for-loop/6196/5 "2017-10-02T14:29:34Z")

</div>

Or really just `println(1:3...)` 🙂 (of course that doesn’t insert the newlines, so it isn’t equivalent).  
Or `println.(1:3);`

---

<div class="post-metadata">

**Author:** ![krcools](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/krcools/32/10212_2.png) [@krcools](https://discourse.julialang.org/u/krcools)\
**Post date:** [October 2, 2017, 4:26pm UTC](https://discourse.julialang.org/t/running-generators-as-single-line-version-of-a-for-loop/6196/6 "2017-10-02T16:26:20Z")

</div>

Ah, that’s the one I was looking for. Thanks!
