原标题:Python函数定义-位置参数-返回值

1 函数介绍

函数在编程语言中就是完成特定功能的一个词句组(代码块),这组语句可以作为一个单位使用,并且给它取一个名字。可以通过函数名在程序的不同地方多次执行(这叫函数的调用)。函数在编程语言中有基本分为:预定义函数,自定义函数。预定义函数可以直接使用,而自定义函数顾名思义需要我们自己定义函数。

在数学中的定义,这里就不介绍了。因为没卵用。哈哈

1.1 为什么要使用函数

在编程中使用函数主要有两个优点:

降低编程难度:通常将一个复杂的大问题分解成一系列的小问题,然后将小问题划分成更小的问题,当问题细化为足够简单时,我们就可以分而治之,各个小问题解决了,大问题就迎刃而解了。

代码重用:避免重复劳作,提供效率

代码更加简洁美观,可读性增加

1.2 Python中的函数

在Python中,函数由若干语句组成代码块、函数名称、参数列表构成,它是组织代码的最小单元,使用函数可以完成一定的功能,在Python中函数主要分为三类:内置函数、第三方函数库、自定义函数。常用的内置函数在前面已经介绍,第三方函数库需要先引入模块,通过模块调用,在模块学习中进行介绍,这里主要说的是如何自定义一个函数。

2 函数的基本使用

在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。下面是一个函数的基本结构

注意:

函数名就是标识符,命名要求一样

语句块必须缩进,约定4个空格

Python的函数没有return语句,隐式会返回一个None

定义中的参数列表成为形式函数,只是一种符号表达式(标识符),简称形参

我们以自定义一个求绝对值的函数为例:

上面只是一个函数的定义,j具体来看一下各个部分的解释:

函数名字叫做abs,接受1个形式参数x。

return x:表示要返回的值是x,函数可以无返回值。

函数是一个可调用对象,函数名加括号就表示调用。

和变量是的使用方式相同,在使用函数时,需要预先进行定义。

直接打印函数名,不会触发函数的执行,反而会打印函数的内存地址。

我们自定义的函数abs,由于与内置函数重名,那么将会覆盖掉内置函数,所以请谨慎命名。

函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。如果没有return语句,函数执行完毕后会隐士的返回None。如果我们确实要return None可以简写为return,或者不写return语句(会让人看不懂,建议只写return)。

调用函数,那么只需要使用函数名加括号,就能执行,但如果函数定义了参数,那么必须在执行的时候传递参数给函授,否则会报异常!关于调用我们还需要了解:

函数定义,只是声明了一个函数,它不会被执行,调用时才会执行

调用方式就是函数名后加上小括号,如果有必要需要在括号内写上参数

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

函数是可调用对象,可以使用callable()进行判断

3 函数的参数

定义函数的时候,括号中指定的就是函数的参数(形式参数),当我们调用函数时,需要将数据进行传递,这种传递参数的方式就叫做传参,严格来说函数只可以使用两种方式:位置传参和关键字传参。

位置传参:按照参数定义顺序传入实参

关键字传参:使用形参的名字来传入实参的方式

需要注意的时:参数传递时如果使用了形参的名字,那么传入参数的顺序就可以和定义的顺序不同,当位置传参和关键字传参混用时,位置传参必须放在关键字传参前面传入。

3.1 参数的默认值

在定义形式参数时,为参数指定对应的值,就叫做参数的默认值,当定义了参数的默认值以后,我们传参时可以选择传递该参数的值,也可以选择不传递,当不传递此参数的值时,该参数就使用指定的默认值,否则将会使用传递的值。

参数默认值也属于位置参数,只不过是给位置参数定义了默认值。

当定义参数的默认值时,注意默认值参数必须要放在位置参数的右边

使用默认值参数的好处是:

参数的默认值可以在未传入足够的实参的时候,对没有给定的参数赋值为默认值。

参数非常多的时候,并不需要用户每次都输入所有的参数,简化函数调用。

3.2 可变参数

可变参数顾名思义表示参数的数量是可变的,并且可以使用一个形参匹配任意个实参。针对传递参数方式的不同又分为可变位置传参和可变关键字传参。

3.2.1 可变位置传参

在形参前使用*号,表示该形参是可变参数,可以接受多个实参,在函数内部,可变参数会封装成元祖(即便是没有传递)

在函数定义时,一般的规范是使用 *args, 表示收集多个位置传参。

3.2.2 可变关键字传参

在形参前使用**号,表示该形参是可变关键字参数,可以接受多个关键字参数,在函数内部,可变关键字参数会封装成字典(即便是没有传递)

3.2.3 可变参数混合使用

前面说的各种参数是可以混合使用的,当混合使用时遵循一定的顺序,简单总结一下,按照从左至右的顺序来说:位置参数,默认值参数,可变位置参数,可变关键字参数:def function(位置参数,默认值参数,可变位置参数,可变关键字参数)。

无论如何,顺序不能颠倒。

3.2.4 可变参数小结

针对可变参数以及不同的混用方式可以有如下结论:

分为位置可变参数和关键字可变参数

位置可变参数在形参前使用一个星号*

关键字可变参数在形参前使用两个星号**

可变位置参数和可变关键字参数都可以收集若干个实参,可变位置参数收集形成一个tuple,可变关键字参数收集形成一个dict

混合使用参数的时候,在定义阶段要遵循如下顺序:位置参数,默认值参数,可变位置参数,可变关键字参数

当位置传参和关键字传参同时使用时,不可以重复赋值!,这一点使用的时候很重要。

3.3 keyword-only参数*

Python3的函数参数中,新增了keyword-only参数,什么叫keyword-only参数?我们说当在一个星号参数(可变位置参数)后,出现的普通参数,我们称它为keyword-only参数,因为多余的位置参数都会被*args收集,只能通过keyword的方式对这些形参进行赋值,所以它们只能使用'关键字传参'。

特殊形式:

这里*表示不接受位置传参,只能使用关键字对参数进行赋值

注意:使用了keyword-only参数,那么在定义形参的时的顺序就有所改变了,它们是:位置参数,默认值参数,可变位置参数,keyword-only参数,可变关键字参数

3.4 参数解构

前面我们说过Python的封装与结构,这里的参数也可以利用这种思想进行结构,现有如下函数:

将t在传递参数时结构为10,20,作为位置传参传递给add函数

将d在传递参数时结构为x=100,y=200,作为关键字传参传递给函数

这种方法在后面函数的调用过程中非常常用

现在再来回头看一下,什么时参数解构?

给函数提供实参的时候,可以在集合类型前使用*或者**,把集合类型的结构解开,提取出所以的元素作为函数的实参。

非字典类型使用*解构成位置参数

字典型使用**解构成关键字参数

提取出来的元素数目要和参数的要求匹配,也要和参数的类型匹配,否则请使用*args,**kwargs

4 函数的返回值

我们通常编写函数除了代码可以复用,更多的时候需要的是知道函数的运算结果,那么函数把运算的结果返回给我们,这个结果就叫作做函数的返回值。使用return关键字进行返回。

总结:

Python函数使用return语句返回"返回值"

所有函数都有返回值,如果没有return语句,隐式调用return None

return语句并不一定是函数的语句块的最后一条语句

一个函数可以存在多个return语句,但是只有一条可以被执行,如果没有一条return语句被执行,隐式调用return None

return None可以简写为return

函数执行到return就会返回,所以return后面的语句永远不会被执行

return可以理解为,结束当前函数计算,返回值!

多个返回值会被包装成一个tuple进行返回,所以函数永远只能返回一个数据。返回搜狐,查看更多

责任编辑:

python函数参数定义顺序_Python函数定义-位置参数-返回值相关推荐

  1. python 传参数 传引用_Python 函数参数 传引用还是传值

    最近学习用Python编程,但是遇到用函数处理数据的时候,对于数据的传递形式优点理解不清,以至于无法用Python使用链表等数据结构.在此特地记录几点学习经验. 总结 传值.引用这个是c/c++.ja ...

  2. python函数参数为列表_python函数中把列表(list)当参数时的入坑与出坑

    在Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑. 入坑 挖坑 def f(x,li=[]): for i in range(x): li.append(i ...

  3. python变量作用域搜索顺序_Python函数作用域的查找顺序

    函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...

  4. python传入参数加星号_Python 带星号(* 或 **)的函数参数详解

    1. 带默认值的参数 在了解带星号(*)的参数之前,先看下带有默认值的参数,函数定义如下: >> def defaultValueArgs(common, defaultStr = &qu ...

  5. python中demo函数是什么意思_Python函数(中)

    本文标识 :Python_7 本文编辑 :Jack 风 编程工具 : Anaconda.Pycharm 阅读时长 :8分钟 Python函数(中) 1.回顾函数应用 函数的嵌套应用 程序设计的思路,复 ...

  6. python info函数的作用是_Python函数__new__及__init__作用及区别解析

    [同] 二者均是Python面向对象语言中的函数,__new__比较少用,__init__则用的比较多. [异] __new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是 ...

  7. c语言中函数参数处理顺序以及默认参数原则

    c语言中函数参数处理顺序 下面我们来看2个案例,分析下c语言中函数参数处理顺序. 第一个: #include "stdio.h"void fn(int a,int b,int c) ...

  8. 【C 语言】字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )

    文章目录 前言 一.业务子函数接口定义要点 二.完整代码示例 前言 字符串开发模型 : strstr-while/do-while 模型 : 在 字符串 中 查找 子串特征 ; 两头堵模型 : 两个指 ...

  9. python函数的使用方法_Python函数使用

    Python函数用def指定函数名,可以指定输入参数,可以指定参数的默认值,也可以用return指定返回值. 调用时除了默认的位置赋值,也可按关键字赋值. 一.函数不带参数.没有返回值 defhell ...

最新文章

  1. HIbernate——hibernate中的各种查询
  2. [20170603]12c Top Frequency histogram.txt
  3. Visual Media Server – 2 - 下载模块草图
  4. 《剑指offer》数组中只出现一次的数字
  5. 并行开发 —— 第三篇 plinq的使用
  6. 微服务go还是java,Java微服务 vs Go微服务,究竟谁更强!?
  7. 影院要求自费购买3D眼镜是“霸王条款” 官方都开始吐槽了!
  8. linux内核学习笔记【一】临时内核页表 Provisional kernel Page Tables
  9. 什么是mysql显错注入_十种MYSQL显错注入原理讲解(三)
  10. 计算机桌面通过网络在拼接屏上显示,拼接屏与电脑之间的连接方法
  11. xlsx表格怎么筛选重复数据_excel表格中如何筛选重复数据
  12. java doc转pdf又来了,这一次超简单
  13. 【车间调度】改进的帝国企鹅算法求解车间调度问题【含Matlab源码 2041期】
  14. 寻求任意颜色转CMY的方法,帮个忙
  15. 【web压测】压测常用工具、压测指标到底是什么?
  16. http://free.logomaker.cn/tools/icoMaker.aspxICO图标在线制作 -- 为你的网站/软件制作图标(ICO)
  17. 给windows右键,添加快捷键
  18. 编写测试代码事物回滚案例
  19. 数据结构实验报告—学生成绩管理系统(Java实现)
  20. python实时股票数据折线图_如何用python获取实时的股票数据?

热门文章

  1. 接口返回时间较长,如何提高响应速度?
  2. leetcode 421. Maximum XOR of Two Numbers in an Array | 421. 数组中两个数的最大异或值(位运算,Trie前缀树)
  3. leetcode 814. Binary Tree Pruning | 814. 二叉树剪枝(Java)
  4. 【Java设计模式】GOF32 - 单例模式
  5. dart系列之:元世界pubspec.yaml文件详解
  6. io_uring设计理念及使用方式总结
  7. vue office在线编辑_VUE和Antv G6实现在线拓扑图编辑
  8. IntelliJ IDEA使用(一)基本设置与类、方法模板设置
  9. MySQL(八)子查询和分组查询
  10. 04.elasticsearch_get操作