Function + eval
is definitely not static, it’s done at runtime. That also means it’s typically used for fundamentally different purposes, e.g. evaluating user input interactively, when the desired information is only available at runtime.
Of course, first you should ask yourself whether you should be doing metaprogramming in the first place. It’s a great tool to have a available on occasion, but 99% of the time you should be using ordinary functions and data structures. See also the discussion in: How to warn new users away from metaprogramming