一件事工坊
回到工匠台后,Hoppy 发现了一种很小但很常见的混乱:两张原始徽章名都要做同样的清理,代码也开始重复。现在还谈不上“出大问题”,但职责已经有点发糊了。这个函数到底只会处理某一张徽章,还是应该能帮任何一张原始徽章名做清理?
这节 checkpoint 要确认的,就是一个很实用的直觉:函数通常应该接收输入,完成一个主要动作,然后把结果交回来。今天这份工作非常小,函数只需要把一张原始徽章名整理干净。
一个函数,只负责一份清理工作
如果同样的清理步骤开始出现不止一次,这往往就是一个信号:可以把它们收进一个很小的 helper 里。这样 helper 就能接收一份输入,只做这一件事,再把清理后的结果返回出来。外部代码会更轻松,因为它只需要换一个原始值再调用一次。
raw_badge_one = " silver fern "
raw_badge_two = " ember ribbon "
def polish_badge_name(raw_name):
cleaned_name = raw_name.strip().title()
return cleaned_name
first_badge = polish_badge_name(raw_badge_one)
second_badge = polish_badge_name(raw_badge_two)
print("First badge:", first_badge)
print("Second badge:", second_badge)
注意这里的职责有多窄。polish_badge_name() 不负责打印整个结果画面,也不试图一次管理所有徽章。它只接收一个原始名字,把它清理好,再返回清理后的版本。正因为职责清楚,同一个函数才能自然地处理两张不同的徽章。
重复代码,常常是在提醒你有个小 helper 藏在那里
今天不是在做大型重构,只是在练一个很小的判断:如果你发现同样的清理动作一写再写,那你看到的很可能就是一个还没被抽出来的小函数。一个清楚的小 helper,通常也会带来更清楚的输入、更清楚的输出,以及更少的重复代码。
把 polish_badge_name 改成接收一张原始徽章名,而不是总是直接去读取 raw_badge_one。
用这个输入通过 strip() 和 title() 得到 cleaned_name,然后写出 return cleaned_name。
分别调用 polish_badge_name(raw_badge_one) 和 polish_badge_name(raw_badge_two)。这就是今天的 checkpoint 感觉:一个小函数,一份清楚职责,用不止一次。
“一件事”不等于“只能写一行”。它真正的意思是“职责清楚”。在这节课里,这份职责很简单:接收一张原始徽章名,把它清理好,再把清理后的结果交回来。
参考答案点击展开点击收起
raw_badge_one = " moss lantern "
raw_badge_two = " silver fern "
def polish_badge_name(raw_name):
cleaned_name = raw_name.strip().title()
return cleaned_name
first_badge = polish_badge_name(raw_badge_one)
second_badge = polish_badge_name(raw_badge_two)
print("First badge:", first_badge)
print("Second badge:", second_badge)高级技巧想更进一步?点击展开点击收起
这节 checkpoint 故意做得很小。我们不讨论软件架构,也不把它变成大型整理工程。今天只是在强化一个习惯:让 helper 函数的输入、主要动作和输出都更容易看清。
这种习惯很重要,因为后面的代码会更容易拼装,只要这些小部件的职责够清楚。现在先把这个“徽章清理 helper”练稳就够了。