I think my question should be more clearly understood by this short code:
fs = 
for k in range(0, 10):
return x + 2*k
# expecting 1 but 19(=1+2*9)
The typical way to fix this is to do something like:
def f(x, k=k): return x + 2*k
For the most part, this shouldn't affect your "f cannot receive k as an argument" condition because it isn't a required argument.
A related, but different approach would be to define
f out of the loop.
def f(k, x): return x + 2*k
Then in the loop use functools.partial.
import functools fs =  for k in range(10): fs.append(functools.partial(f, k))
In this approach, your function won't accept a value for
k even if you try to pass one.