Python基础(十五)——函数

本文以Python3以上为学习基础。

1、函数概念

对于函数,我们先看看数学中:y=x+1。

这就是一个数学的一次函数。不过更多是写作f(x) = x + 1。我肯可以看到,我们给x不一样的值,最后的出来的结果就不一样。

那么我们一系列只要用到这个方法的就可以一直用这个函数。x是变量,它可以代表任何数。

这样其实和函数的道理是一样的,我们给这个函数不一样的参数,最后的结果不一样,因为中间的计算方式都是固定的。

以此类推,在Python中的函数定义就是:

可重复使用的,用来实现单一,或相关联功能的代码段。

这既是函数的基本概念,不过在学习函数之前,我们看看这个原理是什么。

2、函数原理

我们可以看到,对于y = x + 1 这样的函数,最关键的就是x,因为你给x值不一样,最后的结果不一样。

也就是说我们给函数参数的值不一样,结果就不一样。

因此最关键的就是变量。

所以这就得出,函数的原理其实就是一个:

变量在本质上就是一个占位符。

什么是占位符?

就是先把那个位置用变量占上,表示这里有一个东西,至于这个位置放什么东西,以后再说,反正先用一个符号占着这个位置(占位符)。

因为固定的计算方法,改占的位置都占着,直接放东西,自己算就好了。

所以这就是函数的原理。

下面就是建立函数。

3、建立函数

建立函数之间,先看看Python中对于函数的定义:(以下定义来自于菜鸟教程

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

看上去是不是很麻烦。虽然菜鸟教程总结的很简单了,但是至少我这个懒人不想看。

所以我们直接上示例:
在这里插入图片描述
我们来一行一行的解读:

def add(a, b):

  • 这里是函数的开始。在声明要建立一个函数的时候,一定要使用def(def 就是英文define的前三个字母),意思就是告知计算机,这里要声明一个函数。
    add:是这个函数名称
    注意:取名字是有讲究的,就好比你的名字一样。在python中取名字的讲究就是要有一定意义,能够从名字中看出这个函数是用来干什么的。
    从add这个名字中,看出是加法(严格地说,是把两个对象“相加”,这里相加的含义是比较宽泛的,包括对字符串等相加)?
  • (a,b)这个括号里面的是这个函数的参数,也就是函数变量。
  • 冒号: 这个冒号非常非常重要,如果少了,就报错了。冒号的意思就是下面好开始真正的函数内容了。

a = a + b

  • 特别注意,这一行比上一行要缩进四个空格。这是python的规定,要牢记,不可丢掉,丢了就报错。
    然后这句话就是将两个参数(变量)相加,结果赋值依然返回给变量a【其实等价于 a += b】。

print a

  • 还是缩进四个空格。将得到的结果a的值打印出来。

add(1,2)

  • 这才是真正调用前面建立的函数,并且传入两个参数:a=1,b=2。仔细观察传入参数的方法,就是把1放在a那个位置,2放在b那个位置(所以说,变量就是占位符)

看了这个示例,应该对对函数的格式有了理解。

简单总结一下:

def 函数名(参数1,参数2...,参数n):

    函数体(语句块)
  • 函数名的命名规则要符合python中的命名要求。一般用小写字母和单下划线、数字等组合。要让看代码的人明白,你这个函数是干嘛的,也要加上注释。保证代码的而可读性。
  • def是定义函数的关键词,这个简写来自英文单词define
  • 函数名后面是圆括号,括号里面,可以有参数列表,也可以没有参数
  • 括号后面的冒号尤其重要
  • 函数体(语句块),相对于def缩进,按照python习惯,缩进四个空格

有无参数的函数我们来试试看:

注意:这里我的函数命名规则是不可取的。
一是我偷懒这么用了,
另一个原因就是这里要说明这个问题,在后面会讲函数名的命名规则。

在这里插入图片描述
注意上面的add(a,b)函数。
在这个函数中,没有特别规定参数a和b的类型。
要注意,这句话是错的,在python中,变量无类型,只有对象才有类型
这句话应该说成:a和b并没有严格规定其所引用的对象类型。

既然是引用对象,我们下面用字符串试试:
在这里插入图片描述
如果我们用数值型和字符串呢?
在这里插入图片描述
可以看到出现了以下错误:

TypeError: Can’t convert ‘int’ object to str implicitly

什么意思呢?我们翻译成中文。

TypeError:无法将’int’对象隐式转换为str

a + b 的意义完全取决于对象的类型。
在python中,将这种依赖关系,称之为多态。

在Python中有这样一句话:

Python中为对象编写接口,而不是为数据类型。

我们可以看到上面的例子中,我们是没有些返回值的。
也就是没有return语句。

return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

我们来看示例:
在这里插入图片描述
可以看到没有返回值的我们利用变量去接函数的执行结果,就会返回None。

这是为什么?
其实add(a,b)在被运行之前,计算机内是不存在的,直到代码运行到这里的时候,在计算机中,就建立起来了一个对象,这就如同字符串、列表等类型的对象一样。
运行add(a,b)之后,也建立了一个add(a,b)的对象,这个对象与变量a可以建立引用关系,并且add(a,b)将运算结果返回。

这时候我们对象add(a,b)与变量a已经建立引用关系,这时候返回结果,但是没有return语句,没有返回结果,那不就是None了。

不过一般我在没有return返回值的时候都是这样写的:
在这里插入图片描述
可以看到我单独写了一个return,这样也是没有返回值,但是对于以后代码的修正的时候,如果需要直接在后面添加就好,相当于预留位置。
这是我个人的编程习惯。

下面我们再看看有返回值的。
在这里插入图片描述
这时候我们就返回了执行结果a,这时候我们可以看到函数的执行结果可以利用变量a接一下。
这个例子更看出来,在函数里变量是占位符,就如同函数中的a,和外面变量a不冲突。

注意,函数中一个语句块不能用两个return。
什么意思呢?
直接上示例:
在这里插入图片描述
可以看到,print(a) 语句根本没执行。
这是因为第一个之后,遇到了return,它告诉函数要返回,即中断函数体内的流程,离开这个函数。
结果第二个print就没有被执行。
所以,return在这里就有了一个作用,结束正在执行的函数,

如果是那种多个语句块,是不一样的处理的时候是可以的。
在这里插入图片描述
上面这种是可以的。

下面我们一个一个看函数的要求。

3.1、函数名的命名规则

其实,所有高级语言对函数名字,或者变量名等等一系列名字都有要求。

为什么呢?

  • 1、因为如果命名乱了,代码的可读性降低,发生一系列的问题后,如果是别人来改代码,根本连你的代码看都看不懂。
  • 2、计算机可能看不懂。这也就是为什么,我们高级语言中名字一般要求的是:字母、下划线、数字。其他的都不可以。(不过也有人说因为C语言这么要求,其他语言沿用,当然,C语言这么要求肯定有原因,不过我很懒,不想研究。感兴趣自己研究。)

最典型的命名方法有以下几种:
我们是Python语言,所以先看Python的要求:

3.1.1 、python命名的官方要求

这是中文繁体语言,用自动翻译翻译成中文简体就可以了。

3.1.2、驼峰式大小写(来自于Perl语言)

1、小驼峰式命名法(lower camel case):
第一个单词以小写字母开始,第二个单词的首字母大写。例如:firstName、lastName。
2、大驼峰式命名法(upper camel case):
每一个单词的首字母都采用大写字母,例如:FirstName、LastName、CamelCase,也被称为 Pascal 命名法。

驼峰命名法近几年使用的比较多,在一些主流的开源项目中使用频率很高,比较流行。

3.1.3、帕斯卡命名法

第一个单词首字母采用大写字母;后续单词的首字母亦用大写字母,例如:FirstName、LastName。其实就是大驼峰式命名。

3.1.4、匈牙利命名法

这里介绍是来自百度百科的,用的最多的地方是C++,当初我在使用C++的时候会用,但是大家应该觉得很麻烦。

3.1.5、下划线命名法

函数名中的每一个单词都有一个下划线来标记。比如:first_name、last_name。
个人不建议这么用。至于原因呢,就是没有原因,不建议你用,在程序员的世界中,不常用。
这里为什么说呢?就怕以后遇到看不懂。

3.1.6、阿里开发规范

话不多说,阿里巴巴的编码规范很火的。很多公司都沿用阿里的开发规范。
目前我只找到了JAVA语言的开发规范,是2019年的。也是我从网上下的,具体来源我忘了。
下面是百度网盘下载地址:(永久有效
链接:
https://pan.baidu.com/s/1moyd3nhZBgRUto7sVkc9zg
提取码:hdha

4、调用函数

调用函数其实很简单,直接看例子。
刚讲了函数名的命名规则,所以我们就规范化命名规则,这里采用大驼峰式命名法【每一个单词的首字母都采用大写字母
在这里插入图片描述
可以看到Add(“zxc”,“1”)就是调用函数。把"zxc" 给了参数a,"1"给了参数b。
所以最关键是要弄清楚如何给函数的参数赋值。

4.1、函数的参数赋值

大体分为三种,我们一个一个看:

4.1.1 、按照参数次序赋值

就是根据参数的位置,值与之对应。
在这里插入图片描述
可以看到两次调用Add函数,参数的对应关系不一样。

4.1.2、明确了参数和对象的关系

可以直接把赋值语句写到里面,就明确了参数和对象的关系。(这时候顺序就不重要了)
在这里插入图片描述
这就是固定如果传参的。

4.1.3、参数赋给一个默认值

在定义函数的时候,参数可以等待被赋值,也可以定义的时候就赋给一个默认值。
在这里插入图片描述
可以看到,参数b用了默认值1。
如果我们还是给b传参呢?
在这里插入图片描述
可以看到,用的是我们传的值。
以上示例都是参数的个数和传参的个数相同的。
如果既没有默认值,也不传参, 会怎么样呢?
我们看下面例子:
在这里插入图片描述
可以看到,会出现错误,提示你缺少参数。

以上就是函数的初步讲解。
如果有问题,请指出,或者copy了谁的,也请指出。
会即使更正。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值