没有学不会的python


函数是什么?

老调常谈,还是那老一套,学习一个东西前,先搞懂是什么,再来学习怎么用。

函数函数,如果你是刚经历过高考肯定很熟悉,数学中就经常出现这个名词,比如什么sin函数,cos函数之类的。哈哈,心疼一会高考生。

函数是什么呢?其实函数严格来说,可以分为数学函数以及计算机函数,数学函数嘛,大家都是有文化的人,应该都知道,且我讲的是编程,数学函数跟这个关系不大,这里就略过了。我们主要讲计算机函数。

计算机函数是什么?

官方的解释是这样的:

函数是指一段在一起的、可以做某一件事儿的程序。也叫做子程序、(OOP中)方法。

其实这段解释已经很直白了,对于初学者来说,困惑的点就是子程序这个词。在写代码的过程中,往往由于业务逻辑比较复杂,各种数据交互流程比较繁琐,出于数据安全、易于理解、松耦合、强内聚等特征的考虑,我们会把程序划分成多个模块,每个模块又划分多个类和多个函数。由于上述现象的出现,一个大的程序模块就有很多小的模块组成,然后在大的模块中会调用小的模块以实现某个功能点,此时小的模块就成为了子模块,也叫做子程序。

简单说吧,子程序就是一个实现特定功能的程序块,通常被主程序调用。

嗯,现在把子程序讲清楚了,那么这个跟函数有什么关系?其实吧,子程序换一种说法,也可以称作是函数。在不同的语言中,有时也称为方法,但在python中,如果子程序是处于模块中的就称作函数,如果是处于类中的,就称作方法。由于我这个系列里还没讲到面向对象,所以,我们忽略掉类的方法这个说法,现在暂且认为,子程序就是函数。

做一个比较形象的例子:

假设上述人的一天是主函数,那么吃饭上班睡觉就是子函数,只有在主函数中调用了子函数,才能组成人的一天。

函数有什么作用?

既然函数存在,那么就有它存在的道理。它的作用不仅有,而且特别重要。下面就随便列几个,更多的我就不说了,因为如果你没有编程基础的话,很多特性说了也理解不了,等于白说。

  1. 高内聚、低耦合---这个是编程语言中的一个非常重要的特征,尤其是面向对象语言中。高内聚指的是,实现同样目的的代码应该尽量放在一块,不要松散。低耦合指的是,函数与函数之间尽量解耦,不要处处关联,这样才不会出现一发而触动全身的情况。即不会因为改了某个函数的一句话,导致其它函数也不能用了。
  2. 易拓展---需求是跟着市场和甲方走的,产品要改需求,程序员就得加班,如果程序的代码结构很好,那么我们就可以只改需要改的函数,其它的不动,比如增加功能模块,增加参数。
  3. 可重复使用---当把某个功能代码高度集中在函数里面时,此函数就不依赖于其它函数而存在,因此,任何需要实现该功能的函数都可以通过调用这个函数来获取该功能。
  4. 易于理解---通过函数名称以及文档描述和注释,可以让自己以外的人更好的参与进来,而函数的存在,对于这种分工合作是个很好的表现形式,大家都不需要知道函数怎么实现的,只需要调用就可以了。

还有更多,以后你就会慢慢发现了。

如何定义函数?

函数的定义很简单,看下面:

def function_name(prama1,prama2): pass

def的意思就是声明后面的语句块是一个函数,function_name就是函数名称,param1、param2就是参数。到了这里,我有必要再说一下,因为面对着没有基础的同学,难免要多说一点,避免他们走弯路。我要说的是函数名称不是写死的function_name,上面的只是一种表现形式。就好比大家都有名字,但是我们大家都不叫名字,有的叫刘亦菲,有的叫马云。函数名称应该是根据所实现的功能来定的,参数名称也类似。

这里说一下什么叫做参数,参数可以看作是一个因变量,只有传入了参数,才能使函数产生不同的结果。参数不是函数必须的,可以构造一个不需要参数的函数,但是这个函数总会产生相同的结果。

下面看一下函数的示例:

def my_sum(param1, param2): return param1 + param2def my_diff(param1, param2): return param1 - param2

完了吗?那肯定不是,哪有这么简单。结合我自己的编程经验,还有以下的功力要传授给你们。

函数名称要有实际意义,切记假大空,更忌讳的是取一个毫无关系的名字

比如:我想定义一个扫描字符串的每个字符并输出的函数。有下面三个写法:

def scan_str(content): for s in content: print(s)def scan(content): for s in content: print(s)def a(content): for s in content: print(s)

第一个函数最优,从名字就看得出来就是扫描字符串。第二个次之,从名字看到出来是扫描,但是扫描啥不知道,扫描文件还是扫描病毒还是其他的?这就是范围过广,也就是假大空。第三个写出来是要被骂的,而且是往死里骂的那种,从函数名字根本看不出来是什么意思。你想象一下啊,如果一个几万行代码含有几百个函数的程序,全部名字都是abcd这样的名字,你会不会看疯掉?

函数应该要加上文档说明,复杂的语句要加上注释说明

这么做的原因是,一来方便日后自己查看代码,二来是方便别人接手你的代码。添加文档说明的方式如下:

def scan_str(content): """ 扫描字符串的每个字符并输出 :param content: 待扫描的内容 :return: 不返回任何结果 """ for s in content: print(s)

就是在函数声明下面,真正的代码实现逻辑上面,输入三次双引号就会自动生成一个待填充的文档说明结构,含有功能描述,参数描述以及返回值描述。未填充前的代码是这样的:

def scan_str(content): """ :param content:  :return:  """ for s in content: print(s)

函数的代码块不易过长,一般维持在15行以内为佳

代码语句块过长说明我们的功能划分的还不够细致,过于短说明我们过于精简,一般维持在15行以内为佳。当然这不是硬性标准,它不会报任何异常。只是这个是默认的python pep8国际编码规范,很多大公司都会有代码规范考核的,从一开始掌握这些对我们有好处。 是

函数的参数值和传参

上面有简单讲了参数是什么。但这还远远不够,python中的参数,是非常灵活且有趣的。目前来说,可分为四类,分别是必须参数、可选参数、位置参数、关键词参数。下面就这些一个个来说。

必须参数

必须参数就是必须要传递的参数,如果不传递就调用函数会报TypeError。比如我如果这样调用函数,就会报错:

def scan_str(content): """ 扫描字符串的每个字符并输出 :param content: 待扫描的内容 :return: 不返回任何结果 """ for s in content: print(s)scan_str()

由于scan_str有一个content参数,这个是必须参数,如果你不传递就调用这个函数,会爆出如下异常:

Traceback (most recent call last): File "D:/code/python/blog/main.py

未捕获typeerror: $形象。cropper不是函数_没有学不会的python--细说自定义函数的细节...相关推荐

  1. python初学者必背函数_新手必看python vlog 1: 函数

    关注本慕没烦恼,python新手瞧一瞧. 从今天开始,本慕开始为新手们带来福利啦!!祝各位python新手们事业有成!!? 今天,我们从最基础的开始讲. 首先大家安装PyCharm了吧!!解释器安装好 ...

  2. python done函数_【转】Python内置函数(47)——open

    英文文档: open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, ope ...

  3. python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value)

    python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value) 目 ...

  4. python使用del保留字定义一个函数-python中自定义函数的保留字是

    基本使用(推荐学习:Python视频教程)def function_name(parameters): expressions Python使用def开始函数定义,紧接着是函数名,括号内部为函数的参数 ...

  5. python如何自定义函数_python如何自定义函数_后端开发

    c语言特点是什么_后端开发 c语言特点是:1.语言简洁.紧凑,使用方便.灵活:2.运算符丰富:3.数据结构丰富,具有现代化语言的各种数据结构:4.具有结构化的控制语句:5.语法限制不太严度格,程序设计 ...

  6. 使用()关键字来创建python的自定义函数_17.python自定义函数

    标签: 什么是函数,函数说白了就是将一系列代码封装起来,实现代码的重用. 什么是代码重用? 假设我有这样的需求: 但是我还是觉得太麻烦了,每次想吃饭的时候都要重复这样的步骤.此时,我希望有这样的机器: ...

  7. python:自定义函数,通过姓名及电话查询人员信息及添加新人员信息表(列表+字典)

    python:自定义函数,通过姓名及电话查询人员信息及添加新人员信息表(列表+字典) def zmz(c):s=[{'姓名':'','电话':'','部门':'','小组':'','职务':''}] ...

  8. python编写自定义函数计算约登值(约登指数、Youden Index)、寻找最佳阈值(threshold、cutoff)、可视化ROC曲线并在曲线中标记最佳阈值及其数值标签

    python编写自定义函数计算约登值(约登指数.Youden Index).寻找最佳阈值(threshold.cutoff).可视化ROC曲线并在曲线中标记最佳阈值及其数值标签 目录

  9. 未捕获typeerror: $形象。cropper不是函数_没有学不会的python--细说函数

    没有学不会的python 函数是什么? 老调常谈,还是那老一套,学习一个东西前,先搞懂是什么,再来学习怎么用. 函数函数,如果你是刚经历过高考肯定很熟悉,数学中就经常出现这个名词,比如什么sin函数, ...

最新文章

  1. jquery绑定元素id事件_JQuery绑定click事件的3种写法
  2. python量化交易第一天_《Python量化交易教程》第一部分新手入门 第1天:谁来给我讲讲Python?...
  3. API标准化成为技术团队面临的最大挑战
  4. 学php还是golang,学swoole还是golang
  5. ls/vi等 command not found
  6. 1-Tenor AF AFT400-实战-基本配置
  7. oracle序列修改语句
  8. 获取Linux命令源代码的方法
  9. ArcGIS锁定显示比例
  10. Ubuntu18环境下安装ROS
  11. windows下成功安装XGBOOST
  12. Alexa | Alexa Auto SDK 概述
  13. 寻找春天 九宫格日记-2012.09.22
  14. 软件工程pert图_《软件工程》软件项目管理实验
  15. 电视购物直播系统是如何运行的?视频直播流媒体服务器购物直播应用案例
  16. 真正拖垮你的,其实是沉没成本
  17. Windows Xp Sp3官方简体中文版(原版) 纯净安装版 百度网盘下载
  18. 计算机图形学 期中大作业 俄罗斯方块
  19. 九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找
  20. 家用人体体重秤方案规格书

热门文章

  1. JAVA 内存模型 (Java Memory Model,JMM)
  2. 注解 @Target 用法
  3. git pull --rebase 做了什么? 以及 Cannot rebase: You have unstaged changes 解决办法
  4. Linux下安装jdk8步骤详述
  5. Web Service 简单实例(java 版本) ,IDE自动生成客户端代码方法
  6. 将以太坊封装为 ERC20
  7. 20165222第一周查漏补缺
  8. 随机生成一定范围的随机数
  9. ubuntu 安装过程所需软件
  10. 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求