The return value of execfile is always None. All it does is to execute the code in the file. It does not check whether the last statement in the file is an expression and if so return its value or anything like that.
If you want to use func's return value, you should remove the call to func from func.py, import func (or from func import func in your calling code and then call func.func(z) (or just func(z) if you used from) in that file.
Since your func.py can't stand on its own anyway (z wouldn't be defined if you tried to run it directly), I assume that removing the call won't be a problem.
In my PythonWin, 'import func' gives me the error "ImportError: No module named 'func.'" I have to switch over to Linux to try it there. I'll be back if it doesn't work in Linux, either, and otherwise I'll mark the question solved.
If both files are in the same directory, I don't know why it wouldn't work. If they aren't exefile shouldn't have worked either. So my only idea is that you maybe accidentally somehow moved the files into different directories when you replaced execfile with import - or you created a new file to test import and that file is in a different directory than func.py.