`\foreach` propose l'option `parse` pour répondre précisément à ce besoin.
\documentclass{article}
\usepackage{tikz}
\newcommand{\n}{3}
\begin{document}
\begin{tikzpicture}
\foreach[parse] \foreach[parse=true] \i in {0,...,\n-1} \draw (\i,0) circle (0.5);
\end{tikzpicture}
\end{document}