Walcott, 28, becomes Sam Allardyce’s second signing of the January transfer window following the £27m paid for striker Cenk Tosun from Besiktas.
The move brings to an end Walcott’s 12-year stay at Arsenal, where he scored 108 goals in 397 appearances.
“There’s something about this move I’ve just felt good about,” he said.
Walcott’s former club Southampton were also interested in a deal.
But Walcott, who has not started a league game for Arsenal this season, believes Allardyce can reignite his career.
“It felt like it was time for me to move on [from Arsenal],” he said.
“It was sad but it’s exciting at the same time and I want to reignite my career and push Everton to win things as they have done before.
“The manager is very hungry and it’s just what I need. I’ve had a couple of chats with him and straightaway I felt that hunger and that desire that he wanted from me.”
In a statement, Arsenal said: “We all thank Theo for his contribution to the club and wish him well for the future.”
Arsenal boss Arsene Wenger admitted he did not want Walcott to leave but said he could not guarantee the England international game time and admitted that was a “sensitive subject” in a World Cup year.
Walcott, who has 47 England caps, has not featured for his country since the friendly against Spain in November 2016.
Arsenal plan to reinvest the funds, with concrete interest in Borussia Dortmund striker Pierre-Emerick Aubameyang and Bordeaux forward Malcom.
They are also hopeful of signing Manchester United midfielder Henrikh Mkhitaryan in a deal that would involve Alexis Sanchez going the other way.