基于RFID的药品防伪溯源

基于RFID的课程设计报告,包含源代码,C#开发

文件:n459.com/file/25127180-477055224

以下内容无关:

-------------------------------------------分割线---------------------------------------------

目录
一、纯函数的概念
1.纯函数
2.非纯函数
3.纯函数:相同的输入保证相同的输出
4.纯函数和非纯函数对比
二、纯函数的 3 个原则
三、函数的副作用
四、Python 中的内置函数
重点需要记住纯函数的概念和函数的副作用,面试会问,哈哈。

一、纯函数的概念
一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用,我们就把这个函数叫做纯函数。

纯函数不是特定的语法,不是特定的功能,它只是一个概念。就是一个函数使用的时候的一种规则。

1.纯函数
虽然这是个递归函数,它也是纯函数的一种:

def fun(n):
if n == -1:# 递归临界点:当达到递归临界点的时候,就不再调用自身函数的条件
return 1
else:
return n * fun(n-1) # 4 32*1

fun(4)
2.非纯函数
函数里面进行一系列计算,它返回的结果是根据传入的数据相关。不再依赖于任何的其它数据,比如定义个a = 100,那么在:

if n == 0:# 递归临界点:当达到递归临界点的时候,就不再调用自身函数的条件
    return 1
else:
    return n * fun(n-1) # 4 *3*2*1

这段代码,也就是纯函数里面用到了外面的变量:

a = 100
def fun(n):
print(a)
if n == 0:# 递归临界点:当达到递归临界点的时候,就不再调用自身函数的条件
return 1
else:
return n * fun(n-1) # 4 32*1

fun(4)
那这种函数就不再叫做纯函数了。print(a)因为它对外部变量有引用。

3.纯函数:相同的输入保证相同的输出
纯函数不会引用外部的变量,它调用的结果只对你传入进去的参数fun(4)有关。

例如:

定义a=100,return a返回一个 a,传入参数i,def func(i):。

这个时候调用这个函数,传进去的参数跟它的返回值有关吗?

这个函数和它的返回值没有关系。传进去的func(10),不管传什么,不会影响返回值return a。

a = 100
def func(i):
print(‘99999’)
print(i)
return a

func(10)
纯函数是传进去的参数是什么,返回的结果只跟你的参数有关。

纯函数:不管在什么时候调用(不管在哪里调用),传入的参数相同,返回的结果就一定是一样的。

例如:

这个函数,调用的时候传个 10 进去,它返回的时候应该是多少呢?

它返回的结果是 110。

a = 100
def func(i):
i = i + a
return i

res = func(10)
print(res)

在下面对 a 进行修改,对 a 再赋个值:

a = a+1111

那么这个时候,a 的值肯定发生变化了。这个时候在这里再调用函数,再传入 10,func(10)。

a = 100
def func(i):
i = i + a
return i

res = func(10)
print(res)

a = a+1111
res2 = func(10)
print(res2)
同样调用的是同一个函数,传入的参数都是相同的func(10),但是拿到的返回值却不是相同的。

像这种函数,它会受外部环境变量的影响,那么这种函数不能称为纯函数。

4.纯函数和非纯函数对比

函数func1返回的结果为两个参数相加的结果

def func1(a,b):
return a + b

var1=100
#函数func2返回的结果为参数a和外部变量var1相加的结果
def func2(a):
return var1+a

#在上面两个案例中func1返回的结果只受传入的参数的影响,而func2不仅

受传入参数的影响还会受外部变量var1的影响,像func1这样的返回值只跟

#传入参数有关的函数,我们把它叫做纯函数。
二、纯函数的 3 个原则
原则一:变量都只在函数作用域内获取,作为的函数的参数传入。

原则二:不会产生副作用,不会改变被传入的数据或者其它数据(全局变量)。

原则三:相同的输入保证相同的输出。

解释原则一:

纯函数的变量只在函数的作用域内获得,也就是说纯函数里面要么使用的是函数内部定义的,要么使用的是传进来的参数,不会再使用其它任何的变量了。

解释原则二:

纯函数是不会产生副作用的。

解释原则三:

任何时候调用,只要你传入的参数是相同的,它给你返回的结果都是一样的。

三、函数的副作用
函数的副作用就是当函数被调用的时候,既完成了(函数既定的计算任务)函数相关的功能,在完成函数相关功能的时候,你这个函数访问了外部变量,尤其是对外部的数据进行了写操作。

比如在函数内部用到了外面的列表,在这里面还往列表里面加了个元素。这个时候修改了全局变量,造成外部环境发生了改变。这种就叫做函数的副作用。

四、Python 中的内置函数
内置函数: https://docs.python.org/zh-cn/3.7/library/functions.html

Python 中的内置函数包含的不仅仅是内置函数还有很多的内置类型。

虽然内置类型是个类,不是函数。Python 官方也把内置类型归纳在内置函数里面,把它称为内置函数。

str()底层是个类,但是 Python 官方是把它归纳在内置函数里面的。

不管什么时候调用内置函数,内置函数返回的结果只跟传入的参数相关,任何时候传进去的参数是一样的,那么内置函数返回的结果都是一样的。

内置函数是没有副作用的,全部是属于纯函数的一种,都是属于纯函数。

str()不是个函数,其实是个类。虽然算个内置函数,但是不能称为纯函数。

上一篇:随手记—RFID电子标签的种类及应用


下一篇:物联网工程知识提纲