本文共 2406 字,大约阅读时间需要 8 分钟。
在学习函数之前,许多开发者习惯于面向过程编程。这种方法是将业务逻辑从上到下逐步实现,通常使用一段代码来完成特定功能。这种方法虽然简单,但存在重复代码和代码不可读性的问题。例如,以下代码段使用了多个if条件语句来实现相同的功能:
while True: if cpu利用率 > 90%: # 发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 硬盘使用空间 > 90%: # 发送邮邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 内存占用 > 80%: # 发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接
通过对上述代码的分析,可以发现if条件语句下的功能逻辑可以被提取出来公用,形成一个独立的功能模块。例如,可以将发送邮件的逻辑单独抽离为一个函数:
def 发送邮件(内容): # 发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接
这样一来,代码的可读性和重用性就得到了显著提升。第二次实现的代码显然比第一次更高效和维护友好。这正是函数式编程与面向对象编程的主要区别。
函数式编程的核心优势在于通过将代码封装到函数中,实现代码的高度重用性和可读性。开发者无需重复编写相同的代码,只需调用相应的函数即可完成任务。这种编程方式特别适合需要频繁调用相同功能模块的场景。
def关键字:用于定义函数。函数是功能的封装,需要通过返回值告知调用者是否成功完成任务。例如:
def 发送短信(): # 发送短信的代码... if 发送成功: return True else: return False
调用者可以根据返回值进行后续处理:
result = 发送短信()if result == False: 记录日志,短信发送失败...
参数为函数提供必要的输入数据,使其具有灵活性和扩展性。参数可以分为以下几种类型:
def func(name):。def func(name, age=18): print(f"{name}:{age}") func("wang", "delong", "dada") *args和**kwargs来接收任意数量的参数。例如:def func(*args): print(args)
*args, **kwargs来接收所有参数。例如:def func(*args, **kwargs): print(args, kwargs)
import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddrmsg = MIMEText('邮件内容', 'plain', 'utf-8')msg['From'] = formataddr(["武沛齐", 'wptawy@126.com'])msg['To'] = formataddr(["走人", '424662508@qq.com'])msg['Subject'] = "主题"server = smtplib.SMTP("smtp.126.com", 25)server.login("wptawy@126.com", "邮箱密码")server.sendmail('wptawy@126.com', ['424662508@qq.com'], msg.as_string())server.quit() abs():计算绝对值。all() 和 any():用于判断集合中所有元素是否符合条件或是否存在符合条件的元素。n = all(["wang", "delong"]) # Falsen1 = all([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) # True
format()方法进行字段替换。s = "我的名字:{0},年龄:{1}".format("wangdelong", 30)s = "我的名字:{name},年龄:{age}".format(age=30, name="wangdelong") 全局变量需要谨慎处理,使用global声明。例如:
name = "wangdleong"def f1(): age = 18 print(age, name)def f2(): age = 20 print(age, name)f1()f2()
三元运算可以简化多行if语句。例如:
name = "wang" if 1 == 1 else "SB"
对于简单的功能,可以使用lambda函数来实现。例如:
f1 = lambda a1: a1 + 100
函数式编程通过将代码封装到函数中,显著提升了代码的重用性和可读性。在定义函数时,合理使用参数和返回值,使其更具灵活性和扩展性。掌握这些技巧是开发高效、可维护的代码的关键。
转载地址:http://ncofk.baihongyu.com/