编程语言
首页 > 编程语言> > 20201202 函数与函数式编程

20201202 函数与函数式编程

作者:互联网

函数与函数式编程1.介绍:
在过去的十年间,大家广为熟知的编程方法无非两种:面向对象和面向过程,其实,无论哪种,都是一种编程的规范或者是如何编程的方法论。
而如今,一种更为古老的编程方式:函数式编程,以其不保存状态,不修改变量等特性重新进入人们的视野。
下面我们就来依次了解这一传统的编程理念,让我们从基本的函数概念开始。2.函数定义:
初中数学函数定义:
一般的,在一个变化过程中,如果有两个变量x和y,并且对于 x 的每一个确定的值,y 都有唯一确定的值与其对应,
那么我们就把 x 称为自变量,把 y 称为因变量,y 是 x 的函数。自变量 x 的取值范围叫做这个函数的定义域
编程语言中函数定义:
函数是逻辑结构化和过程化的一种编程方法。

python 中函数定义方法:def test(x):"The function definitions"x+=1return xdef:定义函数的关键字
test:函数名
():内可定义形参"":文档描述(非必要,但是强烈建议为你的函数添加描述信息)
x+=1: 泛指代码块或程序处理逻辑return:定义返回值

补充:
函数式编程就是:先定义一个数字函数,然后按照这个数学模型用编程语言去实现它。至于具体如何实现和这么做的好处,后续会详细介绍
1.面向对象:类 -----》class2.面向过程:过程 ---》def3.函数式编程:函数 ---》defy = 2x
函数把逻辑结构化过程化的一种方法# 定义函数def func1():     """testing1""" print('in the func1')     return 0# 定义过程def func2():     '''testing2''' print('in the func2')# 这是定义了一个过程 # 调用函数,x接收返回值0x=func1()# 调用过程,没有接收返回值,按理说,应该返回什么?y=func2()# 过程就是没有返回值的函数print('from func1 return is %s' %x)print('from func2 return is %s' %y)---> in the func1---> in the func2---> from func1 return is 0---> from func2 return is None# 在没有返回值的情况下,Python的解释器隐式的返回了 None,在Python当中,过程也没当成函数了# 不是说有 return 就叫函数式编程了
3. 为何使用函数
没有函数的编程只是在写逻辑(功能),想脱离函数,重用你的逻辑,唯一的办法就是拷贝
例一:
假设我们编写好了一个逻辑(功能),用来以追加的方式写日志:
with open('a.txt','ab') as f:
    f.write('end action')

现在有三个函数,每个函数在处理完自己的逻辑后,都需要使用上面这个逻辑,那么唯一的方法就是,拷贝三次这段逻辑def test1():print 'test1 starting action...'with open('a.txt','ab') as f:
        f.write('end action')def test2():print 'test2 starting action...'with open('a.txt','ab') as f:
        f.write('end action')def test3():print 'test3 starting action...'with open('a.txt','ab') as f:
        f.write('end action')

那么假设有 > N 个函数都需要使用这段逻辑,你可以拷贝 N 次吗?

例二:
优化后的代码def logger_test():
    with open('a.txt','ab') as f:
    f.write('end action')

复制代码
1 >>with open('a.txt','ab') as f:
     f.write('end action')def test1():     print('test1 starting action...')

     with open('a.txt','ab') as f:
          f.write('end action')def test2():     print('test2 starting action...')

     with open('a.txt','ab') as f:
          f.write('end action')def test3():     print('test3 starting action...')

     with open('a.txt','ab') as f:
          f.write('end action')
2 >>def logger():
     with open('a.txt','a+') as f:
          f.write('end action\n')def test1():     print('test1 starting action...')

     logger()def test2():     print('test2 starting action...')

     logger()def test3():     print('test3 starting action...')

     logger()


test1()
test2()
test3()
3 >>import timedef logger():
     time_format = '%Y-%m-%d %X'    # X 代表小时 分钟 秒 time_current = time.strftime(time_format)
     with open('a.txt','a+') as f:
          f.write('%s end action\n' %time_current)def test1():     print('test1 starting action...')

     logger()def test2():     print('test2 starting action...')

     logger()def test3():     print('test3 starting action...')

     logger()


test1()
test2()
test3()# 函数的第二个好处就是,可扩展,保持一致性例三:
需求变了(让我们来为日志加上时间吧)import timedef logger_test():
    timeformat='%-%m-%d %x'time_current = time.strftime(time _format)
    with open('a.txt", 'ab') as f:f.write('time %s end action' %time_current)def test1():print('test1 starting action....')
    
    logger_test()def test2():print('test2 starting action....')
    
    logger_test()def test3():print('test3 starting action...')
    
    logger_test()

总结例二和例三可概括使用函数的三大优点1.代码重用2.保持一致性3.可扩展性

 

标签:函数,编程,print,20201202,action,logger,starting,def
来源: https://blog.51cto.com/15149862/2690363