函数与匿名函数

函数与匿名函数

一、函数

在计算机科学中,函数是程序负责完成某项特定任务的代码单元,具有一定的独立性。

1.函数的定义

在Python中,函数在定义时需要满足这样的规则:

  • 使用关键字def引导;
  • def后面是函数的名称,括号中是函数的参数,不同的参数用逗号“,”隔开,参数可以为空,但括号不能省略;
  • 函数代码块要缩进;
  • 用一对"""包含的字符串作为函数的说明,用来解释函数的用途,可省略;
  • 使用关键字return返回一个特定的值,如果省略,返回None。

例如,我们定义一个简单的加法函数,它接受两个变量x和y,计算x与y的的和啊,并返回a的值:

def add(x,y):"""Add two numbers"""a = x + yreturn  a

2.函数的调用

定义好函数后,函数并不会自动执行。我们需要调用它才能执行相关的内容。

函数的调用使用函数名加括号的形式,参数放在括号中,参数分为形参和实参,定义函数时是形参,调用函数时是实参。

def add(x,y):          #形参"""Add two numbers"""a = x + yreturn  a
add(1,2)         #调用方法,实参

当传入的参数数目与实际不符时,会报错。

当传入的参数不支持加法时,也会报错。

传入参数时,Python提供了两种模式,第一种是按照参数的顺序传入,另一种是使用键-值模式,按照参数名称传入参数:

def add(x,y):"""Add two numbers"""a = x + yreturn  a
add(x=1,y=2)     #键-值模式,可以调换顺序

也可以两种模式一起使用,前提是键-值模式一定在参数模式右边,否则会报错:

def add(x,y):"""Add two numbers"""a = x + yreturn  a
add(1,y=2)          #add(x=1,2)会报错

3.带默认参数的函数

我们可以给函数参数设定默认值,默认参数需要在定义设定,定义时,所有带默认值的参数必须放在不带默认值的参数后面:

def handle(x,type='None'):print(x,type)
handle('hello')         #结果为:hello,None
handle('hello','mysql')   #可覆盖,结果为:hello,mysql

4.参数组

参数组在定义函数时使用一个星号" * "或者两个星号" ** "来实现。

使用一个星号的参数使用如下:

def test(x,*args):     print(x)           #结果为:1print(args)       #结果为:(2, 3, 4, 5, 6)print(args[0])   #结果为:2
test(1,2,3,4,5,6)

参数中的*args是一个可变数目的参数,我们可以把它看成一个元组。

调用test(1,2,3,4,5,6)时,第一个参数1传给了x,剩余的参数组成一个元组传给了args,因此,args的值为(2,3,4,5,6)。

使用两个星号的参数使用如下:

def test(x,**kwargs):print(x)      #结果为:1print(kwargs)     #结果为:{'y': 2, 'z': 3, 'w': 4}
test(1,y=2,z=3,w=4)

**kwargs表示这是一个不定名字的参数,它本质上是一个字典。

调用test(1,y=2,z=3,w=4)时,第一个参数1传给了x,剩余的参数组成一个字典传给了kwargs,kwargs为字典{'y': 2, 'z': 3, 'w': 4}。

这两种模式也可以一起使用,前提是一个星号参数在两个星号参数左边:

def test(x,*args,**kwargs):print(x)        #结果为:1print(args)      #结果为:(2, 3, 4)print(kwargs)     #结果为:{'y': 2, 'z': 3}
test(1,2,3,4,y=2,z=3)

二、匿名函数

当我们在传入函数时,有些时候,不需要过多的定义函数,直接传入匿名函数更方便。

1.匿名函数格式

匿名函数格式如下:

lambda x:x+1
#相当于
def calc(x)return x+1

2.匿名函数的调用

匿名函数不能直接调用,必须赋予一个变量:

lambda x:x+1
func = lambda x:x+1  
print(func(10))     #结果为:11

 

转载于:https://www.cnblogs.com/lzc69/p/11097998.html

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

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

相关文章

[最短路]飞行

题目描述 WFYZ的校园很大,这里生活着很多生物,比如住在钟楼上的的鸽子,其中鸽子冉冉和她的妹妹凝凝白天在不同的地方吃虫,而在晚上她们都回到钟楼休息。她俩是两只懒鸟,于是提出了一个计划,尽量减少她们在飞…

Java状态和策略设计模式之间的差异

为了在Core Java应用程序中正确使用状态和策略设计模式,对于Java开发人员清楚地了解它们之间的区别很重要。 尽管状态和策略设计模式的结构相似,并且都基于开放式封闭设计原则,从SOLID设计原则表示为“ O”,但它们在意图上完全不同…

【原创】系统分析师--任重而道远

今天查到了系统分析师的成绩。有坏消息,也有好消息。 坏消息当然就是意料之中的没过了,好消息是我基本上没有花什么时间去准备,但是结果却比想象中的要好。 案例分析这一场过了。基础知识差几分,论文只是及格分的一半&#xf…

XML文档的简易增删查改

dom4j解析一、利用dom4j操作元素节点 1.查询第一本书的书名,并输出到控制台 2.给第一本书添加一个特价节点, 并修改第一本书的售价节点的内容为19.8元 3.删除第二本书的作者节点二、利用dom4j操作属性节点 1.给第一本书添加一个属性,如:出版社…

廖雪峰Java3异常处理-1错误处理-2捕获异常

1捕获异常 1.1 finally语句保证有无错误都会执行 try{...}catch (){...}finally{...} 使用try...catch捕获异常可能发生异常的语句放在try{...}中使用catch捕获对应的Exception及其子类1.2 捕获多个异常 try{...} catch() {...} catch(){...}finally{..} 使用多个catch子句&…

更新数据库

方法一:在对SQL数据库进行更新时,用CommandBuilder对像来自动构建sql命令,来起到更新的作用;这种方法用起来比较方便,具体代码如下: 以下代码都在xp系统下测试通过 环境:vs.net2005 \ sql server 2000\xpus…

在崩溃或断电后测试Lucene的索引耐久性

Lucene有用的事务功能之一是索引持久性 ,它可以确保一旦成功调用IndexWriter.commit ,即使操作系统或JVM崩溃或断电,或者您杀死-KILL JVM进程,重启后索引也将保持完整(未损坏),并将反映崩溃前的…

Bash 脚本 set 命令教程

http://www.ruanyifeng.com/blog/2017/11/bash-set.html set命令是 Bash 脚本的重要环节,却常常被忽视,导致脚本的安全性和可维护性出问题。本文介绍它的基本用法,让你可以更安心地使用 Bash 脚本。 一、简介 我们知道,Bash 执行脚…

Jmeter、postman、python 三大主流技术如何操作数据库?

1、前言 只要是做测试工作的,必然会接触到数据库,数据库在工作中的主要应用场景包括但不限于以下: 功能测试中,涉及数据展示功能,需查库校验数据正确及完整性;例如商品搜索功能 自动化测试或性能测试中&a…

[转][HTML]css属性

1、字体属性(type)font-family(使用什么字体)font-style(字体的样式,是否斜体):normal/italic/obliquefont-variant(字体大小写):normal/small-capsfont-weight(字体的粗细):normal/bold/bolder/lithterfont-size(字体的大小)&…

7-OKHttp使用详解,步骤挺详细的,适合初学者使用!

OKHttp使用详解,步骤挺详细的,适合初学者使用! 一,OKHttp介绍 okhttp是一个第三方类库,用于android中请求网络。 这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和Leak…

变量与递归函数

变量与递归函数一、变量 变量分为全局变量和局部变量。 python中全局变量和局部变量的最大区别在于局部变量只能通过函数去访问,而全局变量可以直接访问。 举个例子: name linxu #全局变量 def change_name():namepython #局部变量print(name) …

使用MOXy 2.5.1快速且有点脏的JSON模式生成

因此,这些天我正在为即将推出的Oracle云服务开发新的REST API,因此我需要做的一件事情就是能够为模型中的bean自动生成JSON模式。 我正在使用MOXy从POJO生成JSON,从EclipseLink 2.5.1版本开始,它现在具有从bean模型生成JSON模式的…

手机端input[type=date]的placeholder不起作用

<div class"input clearfix"><label class"fl">起始日期</label><input class"fl text_date" type"date" name"" value"" placeholder"年/月/日" /></div><div cla…

Python中的TCP编程,实现客户端与服务器的聊天(socket)

参考大神blog:自己再写一个 https://blog.csdn.net/qq_31187881/article/details/79067644转载于:https://www.cnblogs.com/studybrother/p/10306903.html

利用ASP.NET向服务器上传文件[转]

文件上传技术是一个很实用的技术&#xff0c;有着很广泛的应用&#xff0c;在ASP.NET自身的前一个版本ASP里实现这个功能&#xff0c;就必须使用第三方的组件或者自己开发组件了&#xff0c;现在&#xff0c;用ASP.NET实现起来就简单得多了&#xff0c;我们不需要使用任何组件就…

JavaSE:如何设置/获取您自己的文件和目录属性

在上一篇文章“确定特定文件系统支持的视图”中 &#xff0c;了解如何询问文件系统存储&#xff0c;并了解特定文件属性视图的可支持性。 简而言之&#xff0c;我们将探索最高级和重要的文件属性视图之一&#xff0c;即用户定义的文件属性视图 。 特别是&#xff0c;在系统之…

java中HashMap详解

HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员&#xff0c;其中 HashMap 是 Map 接口的常用实现类&#xff0c;HashSet 是 Set 接口的常用实现类。虽然 HashMap 和 HashSet 实现的接口规范不同&#xff0c;但它们底层的 Hash 存储机制完全一样&#xff0c;甚…

java代码编写的文本特征提取_Test1 java语言写的特征提取源代码,有搞文字识别的可以下载一看,简单易学 Develop 274万源代码下载- www.pudn.com...

文件名称: Test1下载 收藏√ [5 4 3 2 1 ]开发工具: Java文件大小: 35 KB上传时间: 2015-03-02下载次数: 46提 供 者: 常杰详细说明&#xff1a;java语言写的特征提取源代码&#xff0c;有搞文字识别的可以下载一看&#xff0c;简单易学-Feature extraction of the Java …

Iframe父页面与子页面之间的相互调用

父页面&#xff1a; <!DOCTYPE html> <html> <head><title>parents</title><meta charset"UTF-8"> </head> <body> <div id"default">div内容</div> <iframe src"child.html" i…