函数

举些你可能已经使用过的函数例子:判断数据类型:type(str)

字符串类型数据转为整数型:int(str)

...

复制代码

通过观察规律不难发现,Python 中所谓的使用函数就是把你要处理的对象放到一个名字后面的括号就可以了。简单的来说,函数就是这么使用,可以往里面塞东西得到处理结果。这样的函数在 Python 中还有这些:

以 Python3.5 版本为例,一个有 68 个这样的函数,它们被称为内建函数。这里內建的是指这些函数为安装好了 Python 就可以使用。

2.1 函数格式

定义函数的格式:

其中,def 和 return 为关键字。

注意: 函数缩进后面的语句被称为是语句块,缩进是为了表名语句的逻辑与从属关系。缩进这个问题不能忽视,否则会导致代码无法成功运行,这里需要特别注意。

2.2 函数参数

①位置参数,举例,看代码:def trapezoid_area(base_up, base_down, height):

return 1/2 * (base_up + base_down) * height

复制代码

接下来我们开始调用该函数:

trapezoid_area(1,2,3)

复制代码

不难看出,填入的参数1,2,3分别对应着参数 base_up,base_down 和 height。这种传入参数的方式被称作为位置参数。

②关键词参数:在函数调用的时候,将每个参数名称后面赋予一个我们想要传入的值,如调用 fun1 函数时候:fun1(a=1, b=2, c=3)。

看下图:第一行的函数参数按照反序传入,因为是关键词参数,所以并不影响函数正常运作;

第二行的函数参数反序传入,但是到了第三个却变成了位置函数,遗憾的是这种方式是错误的语法,因为如果按照位置来传入,最后一个应该是参数 height 的位置。但是前面 height 已经按照名称传入了值3,所以是冲突的。

第三行的函数参数正序传入,前两个是以关键字的方式传入,最后一个以位置参数传入,但是位置参数不能再关键词参数后面,所以是错误的。

第四行的函数参数正序传入,前两个是以位置的方式传入,最后一个以关键字参数传入,这个函数是可以正常运行的。

③不定长参数

有时我们在设计函数接口的时候,可会需要可变长的参数。也就是说,我们事先无法确定传入的参数个数。

Python 提供了一种元组的方式来接受没有直接定义的参数。这种方式在参数前边加星号 * 。如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。例如:def print_user_info( name , age , sex = '男' , * hobby):

# 打印用户信息

print('昵称:{}'.format(name) , end = ' ')

print('年龄:{}'.format(age) , end = ' ')

print('性别:{}'.format(sex) ,end = ' ' )

print('爱好:{}'.format(hobby))

return;

# 调用 print_user_info 函数

print_user_info( '小明' , 25, '男', '打篮球','打羽毛球','跑步')

复制代码

输出的结果:昵称:小明 年龄:25 性别:男 爱好:('打篮球', '打羽毛球', '跑步')

复制代码

通过输出的结果可以知道,* hobby 是可变参数,且 hobby 其实就是一个 tuple (元祖)。

可变长参数也支持关键参数,没有被定义的关键参数会被放到一个字典里。这种方式即是在参数前边加 **,更改上面的示例如下:def print_user_info( name , age , sex = '男' , ** hobby ):

# 打印用户信息

print('昵称:{}'.format(name) , end = ' ')

print('年龄:{}'.format(age) , end = ' ')

print('性别:{}'.format(sex) ,end = ' ' )

print('爱好:{}'.format(hobby))

return;

# 调用 print_user_info 函数

print_user_info( name = '小明' , age = 25 , sex = '男', hobby = ('打篮球','打羽毛球','跑步'))

复制代码

输出的结果:昵称:小明 年龄:24 性别:男 爱好:{'hobby': ('打篮球', '打羽毛球', '跑步')}

复制代码

通过对比上面的例子和这个例子,可以知道,* hobby 是可变参数,且 hobby 其实就是一个 tuple (元祖),** hobby是关键字参数,且 hobby 就是一个 dict (字典)。

④ 只接受关键字参数

关键字参数使用起来简单,不容易参数出错,那么有些时候,我们定义的函数希望某些参数强制使用关键字参数传递,这时候该怎么办呢?将强制关键字参数放到某个*参数或者单个*后面就能达到这种效果,比如:def print_user_info( name , *, age, sex = '男' ):

# 打印用户信息

print('昵称:{}'.format(name) , end = ' ')

print('年龄:{}'.format(age) , end = ' ')

print('性别:{}'.format(sex))

return;

# 调用 print_user_info 函数

print_user_info( name = '小明' ,age = 25 , sex = '男' )

# 这种写法会报错,因为 age ,sex 这两个参数强制使用关键字参数

#print_user_info( '小明' , 25 , '男' )

print_user_info('小明',age='22',sex='男')

复制代码

通过例子可以看,如果 age , sex 不适用关键字参数是会报错的。

2.3 匿名函数

有没有想过定义一个很短的回调函数,但又不想用 def 的形式去写一个那么长的函数,那么有没有快捷方式呢?

——答案是有的。

Python 使用 lambda 来创建匿名函数,也就是不再使用 def 语句这样标准的形式定义一个函数。

匿名函数主要有以下特点:lambda 只是一个表达式,函数体比 def 简单很多。

lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。

lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。

基本语法:lambda [arg1 [,arg2,.....argn]]:expression

示例:sum = lambda num1 , num2 : num1 + num2;

print( sum( 1 , 2 ) )

复制代码

输出的结果: 3

注意:尽管 lambda 表达式允许你定义简单函数,但是它的使用是有限制的。 你只能指定单个表达式,它的值就是最后的返回值。也就是说不能包含其他的语言特性了, 包括多个语句、条件表达式、迭代以及异常处理等等。

匿名函数中,有一个特别需要注意的问题,比如,把上面的例子改一下:num2 = 100

sum1 = lambda num1 : num1 + num2 ;

num2 = 10000

sum2 = lambda num1 : num1 + num2 ;

print( sum1( 1 ) )

print( sum2( 1 ) )

复制代码

你会认为输出什么呢?第一个输出是 101,第二个是 10001,结果不是的,输出的结果是这样:10001

10001

复制代码

这主要在于 lambda 表达式中的 num2 是一个自由变量,在运行时绑定值,而不是定义时就绑定,这跟函数的默认值参数定义是不同的。所以建议还是遇到这种情况还是使用第一种解法。

python基础入门笔记_Python基础入门笔记:函数相关推荐

  1. python爬虫知识大全_Python爬虫入门有哪些基础知识点

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

  2. python新手入门课_Python基础视频12集入门课程

    视频+笔记:├─1简介与实验环境配置9│ Python基础.pptx│ Python简介.pptx│ 实验环境配置2-1.pdf│ 2.1简介与实验环境配置.mp4│ 请简述 Python 语言与 C ...

  3. python与数据思维基础笔记_Python小课笔记--Python基础:数据和函数(二)

    截图来自Python小课 文|仟樱雪 在Python小课-1-2节中,已经学习了基础模块--数据--数据类型(整数.字符串),以及基础模块--变量,基础模块--函数(input函数.print函数). ...

  4. middles在python中什么意思_Python 基础知识入门(2)

    字符串格式化 Python字符串格式化有两种方式:百分号方式.format方式: 百分号的方式相对比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并在: 一.百分号方式 %[ ...

  5. python3入门基础语法总结_Python基础语法总结

    1.Python标识符 在 Python 里,标识符有字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中的标识符是区分大 ...

  6. python新手入门指导_Python初学者入门指导,Python自学者的福音来了

    这是一篇 Python 入门指南,针对那些没有任何编程经验,从零开始学习 Python 的同学.不管你学习的出发点是兴趣驱动.拓展思维,还是工作需要.想要转行,都可以此文作为一个参考.在这个信息爆炸的 ...

  7. python爬虫文献综述_Python爬虫入门(1):综述

    首先爬虫是什么?网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 根据我的经验,要学习Python爬虫, ...

  8. python爬虫文献综述_Python爬虫入门一之综述

    大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章作为参考,也欢迎大家一共分享学习经验. Pyth ...

  9. python新手入门指导_python新手入门指导

    python新手入门指导 来源:天津IT培训学院时间:2020/8/21 9:34:54 首先,这篇文章是写给想入门Python但是编程基础0或者刚接触的新手同学.不管你是因为兴趣还是工作以及转行需求 ...

  10. python的基础知识点总结_Python 基础知识点总结

    本篇基于Python 2.7.9 根据廖雪峰Python教程整理 URL:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb4931 ...

最新文章

  1. Kaggle八项大奖斩获其6:用于筛选和分析文献的paperai
  2. Elasticsearch-05Elasticsearch之查询与过滤
  3. spring5新特性
  4. linux基础网络设置
  5. 【SpringMVC 笔记】Json 交互处理
  6. MyEclipse卡死解决方法
  7. OpenSSL生成root CA及签发证书
  8. svn: Commit failed (details follow): svn: Authorization failed
  9. mysql 字节 字符_字符与字节 | 字痕随行
  10. latex 中的长度单位,尺寸
  11. 3ds Max Taper、Twist和Bend的运用——衣架的制作
  12. 虚拟机ping不通主机
  13. 消息称聊天宝团队解散 罗永浩已经退出股东行列
  14. 多媒体基础学习笔记:MPEG-7
  15. USB 3.0 Rx Detect之超速U盘的识别
  16. Java实现3DES加密解密(DESede/ECB/PKCS5Padding使用)
  17. mysql所选路径已经存在_mysql安装常见问题解决办法
  18. 不惧变化 抓住机遇 | A+CLUB 8月深圳站
  19. 右键菜单“新建”的修改
  20. 大赞:分区恢复工具TestDisk!!动态盘转换

热门文章

  1. nice值 linux进程,Linux进程优先级和nice值
  2. 以计算机为题写一篇英语作文,请以“未来的钢笔”为题写一篇不少于80词的英语作文...
  3. linux生成ssl证书给haproxy,如何为多个SSL证书配置HAProxy
  4. Windows进程间各种通信方式浅谈(转)
  5. LINQ 学习路程 -- 查询操作 ElementAt, ElementAtOrDefault
  6. EasyUI DataGrid undefined处理
  7. C++ 指针与引用的差别
  8. android 系统框架 dx
  9. windos下编译ffmpeg生成dll、lib库(开启265)
  10. 天正电气lisp是什么文件_模仿天正电气低压系统图 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...