The Three Lions broke the deadlock after just nine minutes, but found themselves trailing 2-1 at the break. They scored again early in the second half to restore parity, but Les Bleus struck 12 minutes from time to secure the comeback win.
Gareth Southgate's side got off to a flying start when skipper-for-the-day Harry Kane opened the scoring in the ninth minutes following a well-crafted move.
Raheem Sterling brought down Dele Alli's floated ball into the box and sent Ryan Bertrand clear with a neat backheel for the left-back to pick out Kane, who converted his low cross from close range.
The hosts thought they had hit back swiftly when Olivier Giroud found the back of the net on 14 minutes, but the Arsenal striker was flagged for offside.
But they did equalise midway through the first half as Tom Heaton could only parry Giroud's header from a free-kick into the path of Samuel Umtiti to score his first international goal.
Didier Deschamps' men then took the lead two minutes before half-time courtesy of Djibril Sidibe maiden goal for his country, the defender reacting quickest to slot home after Heaton had saved Ousmane Dembele's initial shot.
The French were good value for their 2-1 lead at the break, but they let the visitors back in just three minutes into the second half when Raphael Varane received his marching orders as a result of the Video Assistant Referee after he brought down Alli inside the area.
Kane beat Tottenham team-mate Hugo Lloris from 12 yards out to restore parity, but the English struggled to contain Les Bleus as the half wore on.
Kylian Mbappe twice went close as he forced substitute keeper Jack Butland into a sharp save before being denied by the crossbar after pouncing on a poor back from Gary Cahill.
But Mbappe's pace paid dividends in the 78th minute when he broke through the defence to advance on goal before teeing up Dembele to lash home the winner.