pythonでは、他の言語と異なり、グローバル変数と関数でネームスペースが分離していません。
このため、以下のように変数と関数を定義してしまうと、変数の中身が関数オブジェクトで上書きされてしまいます。
# 変数aaを用意
aa = 10
print(aa) # 10 <= 数字の10が入っている
# 変数と同名の関数を定義
def aa(x):
return x * 2;
print(aa) # <function aa at 0x106836e18> <=関数オブジェクトに変わっている
こちらもおススメ