老妓女金如(吳君如飾)在自助銀行遭遇小偷(曾志偉飾)打劫時突發停電,兩人被困期間她開始講述與香港共同成長的半生經歷。16歲成為魚蛋妹時已月入數千,成年后轉型舞小姐卻因容貌平庸只能扮演丑角,但這份職業仍帶來豐厚收入。意外懷孕后她將孩子認作某位美國籍客人之子,對方最終帶走了這個孩子。經濟衰退后她轉行按摩女郎繼續維持生計,在長達三十年的風月生涯中目睹了形形色色的客人百態,包括為情所困的明星(陳奕迅飾)、落魄賭徒(劉德華飾)等特殊遭遇。故事通過金如與不同時代人物的互動,串聯起1960年代至2000年間的香港社會變遷史。最終當電力恢復時,小偷的真實身份揭曉并引發出人意料的結局走向。