函数高级

一、默认参数

1、默认参数概念

默认参数指函数/方法在定义时为形参赋值,对应的形参称为默认参数。

默认参数是一个参数定义期的概念,与调用无关。

2、默认参数的作用

如果参数定义默认参数,在调用函数/方法时,未对该参数进行传值,则使用默认值作为该参数的值。

3、默认参数基本语法
定义格式:
def 函数名(形参1 = 值1,…):
函数体
……
调用格式一(同普通参数,无特殊):
函数名(实参) 使用实参作为形参的值,不使用默认值
调用格式二:
函数名() 使用默认值作为形参的值
复制代码

代码演示:

def test(a = 2,b = 5):
print(a)
print(b)
test()
复制代码

运行结果:

2
5
复制代码
4、注意事项
  • 1.默认参数的定义必须在位置参数的右侧

  • 2.默认参数在调用传值时,按照位置参数进行对待,从左至右依次赋值,不能跳过左侧的某个参数直接为后面的参数赋值

二、关键字参数

1、关键字参数概念

函数/方法在调用时为指定名称的形参进行赋值,对应实参称关键字参数。
关键字参数是一个参数调用期的概念,与定义无关。

2、关键字参数的作用

按名称确认实参为指定的形参赋值。

3、关键字参数基本语法

定义格式(同普通参数定义,无特殊):

def 函数名(形参 ,…):
函数体
……
复制代码

调用格式:

函数名( 形参名 = 实参)
复制代码

代码演示:

def test(a = 2, b = 5):
print(a)
print(b)
test(b = 100)
复制代码

运行结果:

2
100
复制代码
4、注意事项
  • 1.关键字参数必须出现在位置参数的后面
  • 2.不允许使用关键字参数对同一个形参进行多次赋值
  • 3.关键字参数既可以为位置参数赋值,也可以为默认参数赋值。通常使用关键字参数解决默认参数选择性赋值问题。

三、可变参数

1、可变参数的概念

函数/方法在定义时,定义一个特殊的形参,用于接收调用时传入的任意数量的实参,对应的形参称为可变参数。

可变参数是一个参数定义期与调用期都有效的概念。

2、可变参数的作用

简化函数定义过程,定义可以接收无数个实参的形参

形参接受到的数据,无论数量多少,包装成一个元组对象

3、可变参数基本语法

定义格式:

def 函数名(*args ,…):
函数体
……
复制代码

调用格式(同普通参数,无特殊):

函数名( 实参1,…… )
复制代码

代码演示:

def test(*args):
print(args)
test(1,2,3,4,5,6,7,6)
复制代码

运行结果:

(1, 2, 3, 4, 5, 6, 7, 6)
复制代码
4、注意事项
  • 1、可变参数在一个函数/方法定义中只能出现一个
  • 2、可变参数只能出现在位置参数的后面,位置参数在左侧,可变参数在右侧
  • 3、关键字参数只能出现在位置参数的后面,赋值时必须使用关键字参数传值,否则值会被可变参数接收
  • 4、定义函数的参数时,先定义位置参数,再定义可变参数,最后定义默认参数

代码演示:

def test(a, b, *args, c = 1):
pass
复制代码

四、字典参数

1、字典参数的概念

函数/方法在定义时,定义一个特殊的参数,用于接受未定义直接使用的关键字参数,对应的形参称为字典参数。

2、字典参数的作用

简化函数定义过程,接收未定义直接使用的关键字参数。
在多层级调用间进行关键字参数的逐级传递。

未定义的关键字参数,无论数量多少,接收后包装成一个字典对象。

3、字典参数基本语法

定义格式:

def 函数名(**kwargs,···):
函数体
······
复制代码

调用格式:

函数名(未定义的变量名1 = 实参1,未定义的变量名2 = 实参2,…… )
复制代码

代码演示:

def test(**kwargs):
print(kwargs)
test(a = 1,b = 2,c = 6)
复制代码

运行结果:

{'a': 1, 'b': 2, 'c': 6}
复制代码
4、注意事项
  • 1.字典参数在一个函数/方法定义中只能出现一个
  • 2.定义函数的参数时,先定义位置参数,再定义可变参数,然后定义默认参数,最后定义字典参数

代码演示:

def test(a, b, *args, c = 1,**kwargs):
pass
复制代码
5、其他

所有的容器都支持解包操作,格式:*容器变量名

五、递归函数

1、递归函数概念

函数/方法在执行过程中出现了对自身函数/方法的调用,称该过程为递归调用,称这样的函数为递归函数。

2、递归函数基本语法

同普通函数

3、递归函数定义要求

1、函数体中具有对自身函数的调用
2、函数体中具有明确的函数执行结束判定条件

4、递归函数调用要求

Python语言中函数调用最大层级为1000层,超过该层级,程序将报错(不同语言设置不同)

六、匿名函数

1、匿名函数概念

匿名函数即没有名称的函数,在python语言中,匿名函数是使用lambda关键字定义的一个特殊表达式,也称为lambda表达式。

2、匿名函数基本语法
格式一:
定义: 函数名 = lambda 形参 : 返回值
调用:结果 = 函数名(实参) 格式二:
定义并调用: 结果 = (lambda 形参 : 返回值)(实参)
复制代码
3、匿名函数特殊语法
无参格式:	结果 = (lambda :返回值)()

多返回值格式:  无,可使用数据存储模型返回多个数据
无返回值格式:无,必须有具体值或结果为None
复制代码

转载于:https://juejin.im/post/5c18bb6a6fb9a049ca374917

python- 函数高级的更多相关文章

  1. python函数高级特性

    掌握了Python的数据类型.语句.函数,基本可以编写出很多有用的程序了.但是Python中,代码不是越多越好,而是越少越好.代码不是越复杂越好,而是越简单越好.基于这一思想,我们来介绍python中 ...

  2. 五年级--python函数高级运用

    一.装饰器 二.迭代器 三.生成器 四.练习 一.装饰器 1.1 闭包函数用法 # 需求: # 执行一个函数前需要认证是否登录,如果登录则不需再登录. # 只认证一次,后续操作无需认证 # 要求认证使 ...

  3. Python —— 函数高级特性(切片、迭代、列表生成式、生成器、迭代器)

    一.切片(Slice) 在很多编程语言中,针对字符串提供了很多截取函数(i.e.  substring),目的就是对字符串切片.python中没有针对字符串的截取函数,需要通过“切片”来完成. 取一个 ...

  4. Python函数高级

    函数对象 在面向对象编程中 一切皆对象 函数在python中是第一类对象 函数可以这么用 可以被引用 def func(): print('hello world !') ​ f=func f() 可 ...

  5. 12、Python函数高级(命名空间、作用域、装饰器)

    一.名称空间和作用域 1.命名空间(Namespace) 命名空间是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的. 命名空间提供了在项目中避免名字冲突的一种方法.各个命名空 ...

  6. python 函数高级功能

    闭包 我们可以将闭包理解为一种特殊的函数,这种函数由两个函数的嵌套组成,且称之为外函数和内函数,外函数返回值是内函数的引用,此时就构成了闭包. # 闭包 # 外部函数的参数被内部函数引用,内部函数对外 ...

  7. Python函数装饰器高级用法

    在了解了Python函数装饰器基础知识和闭包之后,开始正式学习函数装饰器. 典型的函数装饰器 以下示例定义了一个装饰器,输出函数的运行时间: 函数装饰器和闭包紧密结合,入参func代表被装饰函数,通过 ...

  8. 进击的Python【第七章】:Python的高级应用(四)面向对象编程进阶

    Python的高级应用(三)面向对象编程进阶 本章学习要点: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法 ...

  9. 进击的Python【第六章】:Python的高级应用(三)面向对象编程

    Python的高级应用(三)面向对象编程 本章学习要点: 面向对象编程介绍 面向对象与面向过程编程的区别 为什么要用面向对象编程思想 面向对象的相关概念 一.面向对象编程介绍 面向对象程序设计(英语: ...

  10. 进击的Python【第五章】:Python的高级应用(二)常用模块

    Python的高级应用(二)常用模块学习 本章学习要点: Python模块的定义 time &datetime模块 random模块 os模块 sys模块 shutil模块 ConfigPar ...

随机推荐

  1. Kubernetes Pod钩子

    目录 1.Pod容器钩子最终目的 2.何为Pod容器钩子 3.基于PostStart演示 4.基于PreStop演示 5.优雅停止Java应用 1.Pod容器钩子最终目的 之前在生产环境中使用dubb ...

  2. 使用Putty登录亚马逊云主机

    亚马逊云主机配置之后会提示 提供一个 pem证书, 打开 SSH 客户端.(了解操作方法 使用 PuTTY 连接) 找到您的私有密钥文件(test001.pem).向导会自动检测您用于启动实例的密钥. ...

  3. Github基础使用教程 ———功能介绍

    Github基础使用手把手教程    --功能介绍 本人Github小白,刚摸索的差不多,记录一下经验,小白写出来的东西各位萌新一定看的懂啦~ 本篇内容主要针对想快速学会使用Github这个强大工具的 ...

  4. 怎样让scratch里的人物两腿走动

    需要人物角色至少有两个“造型”,表现走路时的两个动作.以默认的“小猫”觉色为例,它有两个“造型”,可以用来表现奔跑的动作. 但是要想让小猫跑起来,需要脚本来实现,简单跑动脚本如下 scratch学习视 ...

  5. GlusterFS 4.1 版本选择和部署

    GlusterFS 4.1 版本选择和部署 目录 GlusterFS 4.1 版本选择和部署 1 前言相关 1.1 glusterfs优势 1.2 版本选择 1.3 volume知识 2 服务部署 2 ...

  6. C语言 加密解密

    加密解密算法,对于一个未接触加密的人来说,这听起来是多么可望而不可及,但是只要我们理解了加密的本质,对于它就没那么陌生了,更难的是加密的算法,而不是加密这个术语上! 我们知道,文本文件是以ascii码 ...

  7. java网络编程socket\server\TCP笔记(转)

    java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅     1 TCP的开销 a ...

  8. 表字段或表名出现Mysql关键字或保留字导致问题 Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have

    MySQL 5.7使用的关键字和保留字 https://dev.mysql.com/doc/refman/5.7/en/keywords.html 当我们建表的时候如果使用了关键字或者保留字,则在执行 ...

  9. 实战|使用Spark Streaming写入Hudi

    欢迎关注微信公众号:ApacheHudi,解锁下一代数据湖技术 1. 项目背景 传统数仓的组织架构是针对离线数据的OLAP(联机事务分析)需求设计的,常用的导入数据方式为采用sqoop或spark定时 ...

  10. SpringBoot实现图片上传demo&Nginx进行代理显示

    公司项目需要一个图片上传的功能,就图片能上传到服务器(公司用的windows服务器),然后nginx能进行代理访问到就行了,先简单介绍一下nginx,然后再来实现功能. 一.nginx简介 Nginx ...