封装函数的3个设计技巧
Posted 朝阳区靓仔_James
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装函数的3个设计技巧相关的知识,希望对你有一定的参考价值。
函数参数太多了,太麻烦了
这是某位群友在群里的提问:
❝ 函数参数太多了,每次调用都需要传递很多参数。太麻烦了。有什么好的办法吗?
❞
碰巧的是我周一规划本周话题的时候也正好想到了这个话题。
要解决这个问题办法还挺多的,今天我来分享几种。
假设有这样一个函数,它的作用是制作一杯咖啡,它有8个参数,实际上制作咖啡如果足够细,可以有80个参数。
def make_a_coffee(from_country, brand, flavour, size, temperature, sweet, time, hand_made):
"""制作一杯咖啡,需要如下参数:产地,品牌,口味,大小,温度,甜度,研磨时间,是否手工制作
"""
pass
按照上面的函数定义,每次调用这个函数都需要传递8个参数,还是有点麻烦的。
灵活使用Python的参数
解决以上麻烦的第一种方法,这也是pythoner最常用的方法就是灵活地使用Python的参数。
Python支持「可选参数」,「参数默认值」等。通过使用这些特性,可以让调用者只传递必要的少量参数。
下面的例子通过给参数设置了默认值,让所有参数变成了可选,这样调用就方便多了:
def make_a_coffee(flavour='拿铁', size='M', from_country=None, brand=None, temperature=None, sweet=None, time=None, hand_made=None):
"""制作一杯咖啡,需要如下参数:产地,品牌,口味,大小,温度,甜度,研磨时间,是否手工制作
"""
pass
make_a_coffee()
make_a_coffee(flavour='卡布奇诺')
灵活使用参数,可以有很多玩法,这在很多官方库中也是非常常用的。比如turtle库的init方法设置了默认的大小:
def __init__(self, master, width=500, height=350,
canvwidth=600, canvheight=500):
函数封装
如果调用的时候经常使用同样一批参数,我们可以在原有函数之上封装一个参数更少的函数。
下面的例子封装符合我的口味的函数,以后就调用这个新的函数就行了,不用传参数:
def make_a_coffee(flavour, size, from_country, brand, temperature, sweet, time, hand_made):
"""制作一杯咖啡,需要如下参数:产地,品牌,口味,大小,温度,甜度,研磨时间,是否手工制作
"""
pass
def make_my_coffee():
'''我就喜欢大杯的手工制作的星巴克的,产地是巴西的卡布奇诺,必须要加糖'''
make_a_coffee('卡布奇诺', 'XXXXL', '巴西', '星巴克', '66.6', '加糖', '60M', True)
make_my_coffee()
make_my_coffee()
把参数封装成对象
如果参数太多,也可以把参数封装成一个对象。在Java等更加注重规范的编程语言中,通常会要求参数个数不能超过6个。
在Python中,把函数封装成对象也很常用。最常见的一个例子就是网络请求的参数被封装到request和response对象中。比如这个函数,就把response参数封装到了response对象中:
def parse(self, response):
return scrapy.FormRequest.from_response(
response,
formdata='username': 'john', 'password': 'secret',
callback=self.after_login
)
在我们的例子中,只有8个参数,其实是没有必要的。以演示为目的,我们可以这样做:
class CoffeeRequirement:
"""咖啡需求,包含如下参数:产地,品牌,口味,大小,温度,甜度,研磨时间,是否手工制作"""
def __init__(self, flavour, size, from_country, brand, temperature, sweet, time, hand_made):
pass
def make_a_coffee(coffee_requirement):
pass
requirement = CoffeeRequirement('卡布奇诺', 'XXXXL', '巴西', '星巴克', '66.6', '加糖', '60M', True)
make_a_coffee(requirement)
make_a_coffee(requirement)
虽然创建对象的时候也是需要传入参数的,但后面我们可以重用这个对象,还是比较方便的。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
以上是关于封装函数的3个设计技巧的主要内容,如果未能解决你的问题,请参考以下文章