0
点赞
收藏
分享

微信扫一扫

Python 函数之函数的概念(4)

浮游图灵 2023-03-27 阅读 32

一、引入背景

函数是什么呢?函数在英文当中经常看到他的名称,这个名称叫做function。这个单词的含义就叫做功能,我们写函数就是写一段代码完成了一些功能。函数我们应该从哪里开始呢?我们应该从函数的本质开始,从它的数学定义开始。

函数在数学中的定义其实十分的精确,简单来讲y=f(x),y是值域,x是自变量。y就是x的函数,f就表示函数体。x值变化之后y值一般来说也要变化。但是要注意几个问题。其中并不是唯一的一个x值才能得到y,也就是说给不同的自变量x可以得到相同的y值,这是可以的,反之是不可以的。其实早期计算机的诞生就是为了解决数学问题,那么函数求解是计算机最常做的事情之一。所以就自然的想到完成某一个功能就可以封装为函数,用来反复使用。

比如说求绝对值,这个函数在使用的时候,内部怎么实现的不用关心,按照函数要求的参数进行赋值,就能得到相应的结果。所以函数就是一个功能了它里面写了若干行代码,然后组织成一个或者多个功能。我们就可以使用这些功能,为了解决数学问题,我们就在高级语言中发展出了函数。函数要给名称、还需要参数列表。函数是组织代码的最小单元。

二、函数的作用

函数有什么作用呢?两大作用,第一个把一段代码封装到函数中,这段代码就变成函数的了,那么就封装到了函数当中,一旦封装之后就能形成隔离。写好的代码,用函数一封装,就是一段功能代码。封装是第一个作用。

第二个功能是复用,什么意思呢?比如abs绝对值函数,可以使用N次。我们可以反复使用这个功能函数,这就是我们用它的目的。封装的目的就是为了对代码反复使用,形成函数以后反复使用。但是后来呢我们代码不断扩大,我们发现函数还可以规整我们的代码,将一部分功能封装到不同的函数当中。这样我们代码从头到尾就会很整齐。学会使用函数封装是基本要求。

三、函数的定义

函数定义比较简单,如下

def 函数名 (参数列表):
	函数体(代码块)
  [return 返回值]

函数定义语法要求:
	1.函数名就是标识符,命名要求一样
  2.语句块必须缩进,约定4个空格
  3.函数中若是没有return语言,函数结束后会默认返回None值
  4.定义中的参数列表,称为形式参数,只是一种符号表达。

函数有内建函数、库函数、自定义函数(用def定义),有些语言中叫函数为function,有的语言叫做过程。过程没返回值,函数有返回值。def是python中的关键字,用来定义函数。函数语句中加pass,就是空语句。冒号之后需要重新起一行,缩进4个空格。Tab转为4个空格,这是一种约定。一般用2 4  8最常用的就是4个空格。函数名就是标识符,按照字母、数字、下划线要求命名。写函数一般写的不适宜过长,现在函数一般都是完成单一功能。形参是函数定义的时候才使用。

四、函数调用

函数名后加小括号就可以了,必须使用小括号。函数名是标识符,它指代的是函数。标识符本质上就是一个变量。python中没有常量,所以我们在python中所遇到的函数名是标识符,它就是变量。形参是在定义是确定的。写形参的时候要进行匹配。

*函数定义的时候只是声明了一个函数,它不能被执行,需要调用执行      

*调用的方式,就是函数名后加小括号,如有必要在括号内填写参数

*调用的时写的参数是实际参数,是试试在在传入的值,简称实参

五、函数使用举例

实现两个数字加法

def add(x,y): #函数定义
    print(x,y) #函数体
    return x+y #返回值

out=add(4,5) #函数调用,可能有返回值,使变量接收这个返回值
print(out)# print函数加上括号也是调用,out也是实参

这里要重点理解,函数名是一个标识符,是变量名。说明可以进行赋值操作。

定义的函数,在被解释器扫描过这段之后,会立即生成一个函数对象,存放在内存的堆中,用标识符add指代。

对于上面代码的解释:

*定义一个函数add,函数名是add,能接受两个参数

*该函数的返回值结果需要通过,return语句返回

*调用的时候,通过函数名add后面加两个参数,返回值可以使用变量接受

*函数名也是标识符、返回值也是值

*定义需要在调用前,也就是说调用时,已经被定义过了,否则抛出NameError异常

*函数是不是可调用的对象,callable(add)返回true。可以此函数测试。

def add(x,y): 
    print(x,y) 
    return x+y

add('ab','cd') 
add([1],[2])

这样调用返回值是什么样呢?
ab cd 
[1] [2]

'abcd'  #输出结果就是这样
[1,2]

六、函数规范

add() 灵活性,一职多能,好不好? 所有灵活性都是有代价的,双刃剑

Python简单,所有类型错误问题容易出现

Python 的变量类型,只有使用的时候才知道是什么类型

Python函数的形参和返回值都不需要写明类型

数值,字符串,列表,

由于函数参数没有类型限制,看的人不知道应该给什么类型的参数,容易出现BUG。

这个就是用错了,这个用错了在于没有类型限制,使用者,不知道设计者的初衷是什么,假设设计初衷是做数值加法,结果被人用到了列表之间的加法,这与设计时的想法偏离了,有可能代码没有考虑这么多情况,就会产生各种隐患。

然而这种隐患,只有在调用的时候才会报错。这时候代码已经上线跑起来了,这时候在报错就有点晚了。

Python很多问题,都会在运行当中显现出来,为时已晚!!!!!

Python 在大型项目上不适用

Python 看似简单,是则很难

写python项目要加约束!!!!!!

对写代码要有敬畏之心,少出现BUG,类型一定要限制好

Python 新版本一直在解决限制类型问题,为了更好的适应工程











举报

相关推荐

0 条评论