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

没有学不会的python


函数是什么?

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

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

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

计算机函数是什么?

官方的解释是这样的:

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

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

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

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

做一个比较形象的例子:

6fbfc1d0c87b5fbb19f619656fee5a3d.png

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

函数有什么作用?

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

  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos 7.0上RabbitMQ 3.5.6版本多实例启动操作讲解

在很多场景中,我们可能需要单机上启动多个rabbitmq实例,启动多个实例其实就是启用不同的端口。rabbitmq的默认端口为5672,15672,25672,以下经过实际操作绝对原创,亲测有效,耗费了老半天时间,怎么没有白费啊…

usg6000v 无法ping通_柯美复印机网络打印无响应?无法打印、扫描?原来这里出了问题...

机器在安装后,网络连接正常,使用ping命令可以通,但无法使用打印,扫描等网络功能Ping命令使用方法:1、“运行”输入CMD,调出Dos窗口2、输入命令:Ping 设备IP地址,按回车即可可以拼得通…

【NOIP考前模拟赛】纯数学方法推导——旅行者问题

一、写在前面 这题似乎是一道原创题目(不是博主原创),所以并不能在任何OJ上评测,博主在网盘上上传了数据(网盘地址:http://pan.baidu.com/s/1mibdMXi),诸位看官需者自取。另外博主使…

GO 语言笔记

使用 Visual Studio Code 开发环境配置请看 http://studygolang.com/articles/8851 为什么要使用Go 语言?Go 语言的优势在哪里? - Go 语言- 知乎 请看 https://www.zhihu.com/question/21409296 基础入门看官网 https://golang.org/ & 无闻 http…

qtreewidget 获取根节点_详解去中心化信任根dRoT技术

近日,第21届国际信息与通信安全会议(ICICS 2019)在北京召开。ICICS是国际公认的网络与信息安全类顶级学术会议,汇聚了国内外诸多信息安全专家与学术泰斗。本届ICICS 2019会议围绕信息与网络安全技术的各个方面展开深入研讨,议题涵盖了区块链、…

判断该网页是在什么设备打开。

为什么80%的码农都做不了架构师&#xff1f;>>> <script type"text/javascript"> //判断访问终端 var browser{versions:function(){var u navigator.userAgent, app navigator.appVersion;return {trident: u.indexOf(Trident) > -1, //IE内…

kail中tools的安装和第一个php学习笔记

安装tools 打开 鼠标右击选择 创建文件夹 mkdir cdrom 把tools文件复制到 位置——计算机——cdrom文件夹下 打开 cdrom cd cdrom 复制生成的目录 解压文件夹&#xff1a;tar zxvf 粘贴目录 回车 ls 复制目录 cd 粘贴目录 ls 复制后缀为pl的目录 ./粘贴目录.d自动下载 Enjoy代表…

PHP发送邮件

先看一下HTML如何发送邮件 HTML发送邮件首先得使用超链接标签<a> 之后使用mailto:链接收件人邮件地址 用bcc链接发件人邮箱&#xff08;加密抄送&#xff0c;cc为直接抄送&#xff09; mailto 和bcc/cc之间用?连接 subject邮件主题&#xff0c;body邮件内容&#xff0…

喇叭正反相位测试音频_FIR滤波器能给音频扩声带来怎样的帮助?

随着数字音频的快速发展&#xff0c;近些年在音频扩声领域&#xff0c;经常能听到音频技术人士讨论FIR数字滤波器&#xff0c;有些说法和厂家的宣传难免有些过于神化&#xff0c;有些厂家的技术工程师竟然宣称&#xff0c;自己的FIR滤波器能把每只扬声器或者整组扩声系统的相位…

使用c语言easy—x库实现实时钟表

先了解一下easy-x库 EasyX 是针对 C 的图形库&#xff0c;可以帮助 C语言初学者快速上手图形和游戏编程。 可以通过官网下载&#xff0c;文件很小&#xff0c; easy-x的支持头文件是 #include<graphics.h>下载之后双击打开会有所有easy-x函数的语法和作用&#xff0c;中…

java基础—方法重载(overload)

一、方法的重载 方法名一样&#xff0c;但参数不一样&#xff0c;这就是重载(overload)。 所谓的参数不一样&#xff0c;主要有两点&#xff1a;第一是参数的个数不一样&#xff0c;第二是参数的类型不一样。只要这两方面有其中的一方面不一样就可以构成方法的重载了。 1 packa…

word 编辑域中的汉字_word中插入的cad对象无法双击编辑问题解决记录

昨日&#xff0c;安装了天正插件5.0后&#xff0c;插入word中的cad图无法编辑了&#xff0c;弹出提示的大意是检查是否安装了cad或者是否关闭了CAD中所有的弹窗。在此之前&#xff0c;计算机装了office2010和cad2014及cad2018&#xff0c;office自动关联cad2018&#xff0c;即使…

php实现注册登陆验证

欢迎界面很简单&#xff0c;直接放上代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head&…

搭建高可用的redis集群,避免standalone模式带给你的苦难

现在项目上用redis的话&#xff0c;很少说不用集群的情况&#xff0c;毕竟如果生产上只有一台redis会有极大的风险&#xff0c;比如机器挂掉&#xff0c;或者内存爆掉&#xff0c;就比如我们生产环境 曾今也遭遇到这种情况&#xff0c;导致redis内存不够挂掉的情况&#xff0c;…

php连接MySQL

先说一下我踩了三天的坑 我在这之前用mysql申请了一个数据库&#xff0c;然后用php连接一直连接不上&#xff0c;试了许多办法&#xff0c;都不行 下载MySQL时显示3306端口被占用&#xff0c;所以选了3307 一直报错&#xff0c;三天后&#xff0c;终于知道了&#xff0c;你用的…

SVG动画

动画原理 SVG动画&#xff0c;就是元素的属性值关于时间的变化。 如下图来说&#xff0c;元素的某个属性值的起始值&#xff08;from&#xff09;到结束值&#xff08;to&#xff09;在一个时间段&#xff08;duration&#xff09;根据时间函数&#xff08;timing-function&…

bootstrap弹出的模态框水平垂直居中的实现

学习javascript从入门到放弃&#xff01;&#xff0c;这是第一篇随笔&#xff0c;经验不足&#xff0c;如有不当之处&#xff0c;还望指出。好了废话不多说直接切入正题吧 1.bootstrap默认的model写法&#xff1a; //触发模态框的button <button data-toggle"modal&quo…

正则表达式 PHP

正则表达式的常用函数&#xff1a; 先写一个函数show&#xff0c;用来输出数组&#xff0c;使代码看起来方便&#xff0c;且把经常重复用到的量放在前面 function show($varnull) {if(empty($var))//检测变量是否为空{echo null;}elseif (is_array($var)||is_object($var))//…

iis发布网站怎么支持.json文件

转载于:https://www.cnblogs.com/daizhipeng/p/5622839.html

浏览器渲染机制

1. 明白浏览器渲染的目的 可访问性&#xff08;Accessability&#xff09;、加载性能和重构灵活性一直是前端工程师们关心的主题。 其中加载性能与浏览器的渲染机制深深挂钩&#xff0c;弄明白浏览器背后的渲染机制&#xff0c;才能在日常的前端的开发中明白如何进行性能优化。…