函数与函数式编程

函数与函数式编程

  1. 介绍

在过去的十年间,大家广为熟知的编程方法无非两种:面向对象和面向过程,其实,无论哪种,都是一种编程的规范或者是如何编程的方法论。而如今,一种更为古老的编程方式:函数式编程,以其不保存状态,不修改变量等特性重新进入人们的视野。下面我们就来依次了解这一传统的编程理念,让我们从基本的函数概念开始。

函数定义:

初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的函数。自变量x的取值范围叫做这个函数的定义域

编程语言中函数定义:函数是逻辑结构化和过程化的一种编程方法。

python中函数定义方法:

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

补充:

函数式编程就是:先定义一个数学函数,然后按照这个数学模型用编程语言去实现它。至于具体如何实现和这么做的好处,后续我会详细介绍。

为何使用函数

没有函数的编程只是在写逻辑(功能),想脱离函数,重用你的逻辑,唯一的方法就是拷贝

例一:

假设我们编写好了一个逻辑(功能),用来以追加的方式写日志:
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‘)
def test1():
    print ‘test1 starting action...‘
    
    logger_test()
    
def test2():
    print ‘test2 starting action...‘
    
    logger_test()
     
def test3():
    print ‘test3 starting action...‘

    logger_test()

例三:

需求变了(让我们来为日志加上时间吧)

import time
def logger_test():
    time_format=‘%Y-%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.可扩展性

函数和过程

过程定义:过程就是简单特殊没有返回值的函数

这么看来我们在讨论为何使用函数的的时候引入的函数,都没有返回值,没有返回值就是过程,没错,但是在python中有比较神奇的事情

def test01():
    msg=‘hello The little green frog‘
    print msg

def test02():
    msg=‘hello WuDaLang‘
    print msg
    return msg

t1=test01()

t2=test02()

print ‘from test01 return is [%s]‘ %t1
print ‘from test02 return is [%s]‘ %t2

总结:当一个函数/过程没有使用return显示的定义返回值时,python解释器会隐式的返回None,

所以在python中即便是过程也可以算作函数。

函数返回值

def test01():
    pass

def test02():
    return 0

def test03():
    return 0,10,‘hello‘,[‘alex‘,‘lb‘],{‘WuDaLang‘:‘lb‘}

t1=test01()
t2=test02()
t3=test03()

print ‘from test01 return is [%s]: ‘ %type(t1),t1
print ‘from test02 return is [%s]: ‘ %type(t2),t2
print ‘from test03 return is [%s]: ‘ %type(t3),t3

总结:

返回值数=0:返回None

返回值数=1:返回object

返回值数>1:返回tuple

函数调用

调用方法:

1.test()执行,()表示调用函数test,()内可以有参数也可没有

参数:

1.形参和实参

形参:形式参数,不是实际存在,是虚拟变量,。在定义函数和函数体的时候使用形参,      目的是在函数调用时接收实参(实参个数,类型应与实参一一对应)

实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式,函数,传给形参

2.位置参数和关键字(标准调用:实参与形参位置一一对应;关键字调用:位置无需固定)

3.默认参数

4.参数组

阿斯蒂芬按时打发第三方大事发生的f# with open(‘a.txt‘,‘wb‘) as f:
#     f.writelines([‘hello %s lhf\n‘ %i for i in range(10000)])

with open(‘a.txt‘,‘rb‘) as f:
    offset=-100
    while True:
        f.seek(offset,2)
        l=f.readlines()
        if len(l) > 1:
            last_line=l[-1]
            break
        offset*=2
    print last_line

时间: 2024-10-11 16:34:19

函数与函数式编程的相关文章

Python函数以及函数式编程

本文和大家分享的主要是python 函数及函数式编程相关内容,一起来看看吧,希望对大家 学习python有所帮助. 函数基本语法及特性 定义 数学函数定义: 一般的,在一个变化过程中,如果有两个变量 x 和 y ,并且对于 x 的每一 个确定的值, y都有唯一确定的值与其对应,那么我们就把 x 称为自变量,把 y 称为因变 量, y 是 x 的函数.自变量 x 的取值范围叫做这个函数的定义域. 但编程中的「函数」概念,与数学中的函数是有很  同的  函数是逻辑结构化和过程化的一种编程方法 函数的

python基础13函数以及函数式编程

主要内容 函数基本语法及特性 参数与局部变 返回值 4.递归 名函数 6.函数式编程介绍 阶函数 8.内置函数 函数基本语法及特性 定义 数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一 个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变 量,y是x的函数.自变量x的取值范围叫做这个函数的定义域. 但编程中的「函数」概念,与数学中的函数是有很 同的 函数是逻辑结构化和过程化的一种编程方法 函数的优点 减少重复代码 使程序变的可扩展 使程序

python 函数和函数式编程

什么是函数 调用函数 创建函数 传入函数 形参 变长参数 函数式编程 变量的作用域 递归 生成器 1 什么是函数 函数是对程序逻辑进行结构化或过程化的一种编程方法.能将整块代码巧妙地隔离成易于管理 的小块,把重复代码放到函数中而不是进行大量的拷贝--这样既能节省空间,也有助于保持一致性,因为你只需改变单个的拷贝而无须去寻找再修改大量复制代码的拷贝. 1.1 过程 vs 函数 在C++里我不记得有过程这种东西,但是在一些其它的语言比如PL/SQL里面会有过程.过程和函数一样是可以调用的代码块,但是

Python核心编程读笔 9:函数和函数式编程

第11章 函数和函数式编程 一 调用函数 1 关键字参数 def foo(x): foo_suite # presumably does some processing with 'x' 标准调用 foo(): foo(42)  foo('bar')  foo(y) 关键字调用 foo(): foo(x=42)  foo(x='bar')  foo(x=y) 即明确给出相应的参数名 2 参数组 Python允许程序员执行一个没有显式定义参数的函数,相应的方法是通过一个把元组(非关键字参数)或字典

Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

Python之路Python作用域.匿名函数.函数式编程.map函数.filter函数.reduce函数 一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") return test1 res = test() print(res) 输出结果 test <function test1 at 0x021F5C90> 分析:这里print(res)输出的是te

python函数及函数式编程

函数是对程序逻辑进行结构化或过程化的一种编程方法.函数与过程相比,两者都是可以被调用的实体,但是传统意义上的函数或者"黑盒",可能不带任何输入参数,经过一定的处理,最后向调用者传回返回值,而过程是简单.特殊.没有返回值的函数.其实,python的过程就是函数,因为在函数中如果没有显式return返回值的话,解释器会隐式地返回默认值None. 1.函数定义 def foo([argument-list]): "function_document_string" foo

Python基础函数之函数式编程

一. 匿名函数 匿名函数就是不需要显示的指定函数,只要运行过一次后就立马释放内存空间. 主要表现形式为: lambda 形参:具体功能 def calc(n): return n**n print(calc(10)) #换成匿名函数 calc = lambda n:n**n print(calc(10)) 你也许会说,用上这个东西没感觉有毛方便呀, ....呵呵,如果是这么用,确实没毛线改进,不过匿名函数主要是和其它函数搭配使用的呢,如下 res = map(lambda x:x**2,[1,5

python学习-day16:函数作用域、匿名函数、函数式编程、map、filter、reduce函数、内置函数r

一.作用域 作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变 二.匿名函数 lambda:正常和其他函数进行配合使用.正常无需把匿名函数赋值给一个变量. f=lambda x:x*x print(f) #打印指向该函数的内存地址 print(f(5)) #内存地址(5) 调用运行该函数 def cala(x): y=x*x return y z=cala(5) print(z) >>> <function <lambda> at 0x10137d950&g

11 函数和函数式编程 - 《Python 核心编程》

?? 什么是函数 ?? 调用函数 ?? 创建函数 ?? 传入函数 ?? 形参 ?? 变长参数 ?? 函数式编程 ?? 变量的作用域 ?? 递归 ?? 生成器 11.1 什么是函数? 函数是对程序逻辑进行结构化或过程化的一种编程方法. 函数可以以不同的形式出现. declaration/definition          def foo(): print 'bar' function object/reference    foo function call/invocation