Python基础篇【第2篇】: Python自定义函数
Python函数
1. 函数定义
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
2. 定义
- 函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- Return[expression]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 No
- def functionname( parameters ):
- "函数_文档字符串"
- function_suite
- return [expressi
- def functionname( parameters ):
3. 语法
- def functionname( parameters ):
- '''函数_文档说明字符串'''
- function_body
- return [expression]
4. 函数调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。这个函数的基本结构完成以后,你可以通过另一个函数调用定义的函数名进行执行,也可以直接从Python提示符执行。
5. 函数参数
以下是调用函数时可使用的正式参数类型:
- 必备参数
- 命名参数
- 缺省参数
- 不定长参数
必备参数:
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- #可写函数说明
- def printme( str ):
- "打印任何传入的字符串"
- print str;
- return;
- #调用printme函数
- printme();
- 此时调用没有提供必备参数,因此会出现如下报错
- Traceback (most recent call last):
- File "test.py", line 11, in <module>
- printme();
- TypeError: printme() takes exactly 1 argument (0 given)
命名参数
命名参数和函数调用关系紧密,调用方用参数的命名确定传入的参数值。你可以跳过不传的参数或者乱序传参,因为Python解释器能够用参数名匹配参数值。
用命名参数调用printme()函数:
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- #可写函数说明
- def printme( str ):
- "打印任何传入的字符串"
- print str;
- return;
- #调用printme函数
- printme( str = "My string");
- 以上实例输出结果:
- My string
下例能将命名参数顺序不重要展示得更清楚:
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- #可写函数说明
- def printinfo( name, age ):
- "打印任何传入的字符串"
- print "Name: ", name;
- print "Age ", age;
- return;
- #调用printinfo函数
- printinfo( age=50, name="miki" );
- 以上实例输出结果:
- Name: miki
- Age 50
缺省参数
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入:
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- #可写函数说明
- def printinfo( name, age = 35 ):
- "打印任何传入的字符串"
- print "Name: ", name;
- print "Age ", age;
- return;
- #调用printinfo函数
- printinfo( age=50, name="miki" );
- printinfo( name="miki" );
- 以上实例输出结果:
- Name: miki
- Age 50
- Name: miki
- Age 35
不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。基本语法如下:
- def functionname([formal_args,] *var_args_tuple ):
- "函数_文档字符串"
- function_suite
- return [expression]
加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。如下实例:
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- # 可写函数说明
- def printinfo( arg1, *vartuple ):
- "打印任何传入的参数"
- print "输出: "
- print arg1
- for var in vartuple:
- print var
- return;
- # 调用printinfo 函数
- printinfo( 10 );
- printinfo( 70, 60, 50 );
- 以上实例输出结果:
- 输出:
- 10
- 输出:
- 70
- 60
- 50
6.匿名函数
python 使用 lambda 来创建匿名函数。
- lambda只是一个表达式,函数体比def简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语法
lambda函数的语法只包含一个语句,如下:
- lambda [arg1 [,arg2,.....argn]]:expression
举例
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- # 可写函数说明
- sum = lambda arg1, arg2: arg1 + arg2;
- # 调用sum函数
- print "相加后的值为 : ", sum( 10, 20 )
- print "相加后的值为 : ", sum( 20, 20 )
- 以上实例输出结果:
- 相加后的值为 : 30
- 相加后的值为 : 40
Python基础篇【第2篇】: Python自定义函数的更多相关文章
- Python基础知识总结笔记(四)函数
Python基础知识总结笔记(四)函数python中的函数函数中的参数变量作用域偏函数PFA递归函数高阶函数BIFs中的高阶函数匿名函数lambda闭包Closure装饰器Decorator函数式编程 ...
- Python基础之【第一篇】
Python简介: python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语 ...
- Python 基础【第八篇】变量
1.变量定义: 给数据进行命名,数据的名字就叫做变量 2.变量格式: [变量名] = [值] 注:变量名命名需要满足下面两条准则 准则一:标示符开头不能为数字.不能包含空格.特殊字符准则二:标示符不能 ...
- python基础【第四篇】
python第二节 1.while循环 Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.基本形式为: while 条件: 循环体 ...
- MySQL基础篇(03):系统和自定义函数总结,触发器使用详解
本文源码:GitHub·点这里 || GitEE·点这里 一.系统封装函数 MySQL 有很多内置的函数,可以快速解决开发中的一些业务需求,大概包括流程控制函数,数值型函数.字符串型函数.日期时间函数 ...
- python基础(14)-反射&类的内置函数
反射 几个反射相关的函数可参考python基础(10)-匿名函数&内置函数中2.2.4反射相关 类的一些内置函数 __str__()&__repr__() 重写__str__()函数类 ...
- Python基础【day01】:python介绍发展史(一)
本节内容 Python介绍 发展史 Python 2 or 3? 一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏 ...
- python第十四课--排序及自定义函数之自定义函数(案例二)
案例二: python中定义有/无返回值的函数,演示python没有函数重载这一说 需求:自定义函数:计算两个整数的和值两个原则:1).有没形参有,两个 2).有没返回值可有可无 def my_sum ...
- python第十四课--排序及自定义函数
1.排序 特点: 1).升序:从小到大 2).降序:从大到小 课堂实现选择排序:参看老郭选择排序.py文件 2.函数:(方法/method) 自定义函数: 概念:它表示一段作用范围(作用域),当中封装 ...
- 『Python基础』第2节: Python简介及入门
一. Python介绍 Python是一门高级计算机程序设计语言,1989年,荷兰的Guido von Rossum创造了它.Guido是是一个牛人,1982年,他从阿姆斯特丹大学获得了数学和计算机硕 ...
随机推荐
- UIImageWriteToSavedPhotosAlbum
UIImageWriteToSavedPhotosAlbum: Next UIKit Function Reference Overview The UIKit framework defines a ...
- nginx https使用
默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,通常这些文件并不在同一个软件包中.通常这 ...
- Yii2 主从 数据库
配置方法 参考资料:http://www.linuxidc.com/Linux/2015-07/120134.htm 读写分离(Read/Write Splitting). 1.原理:让主数据库(ma ...
- Node.js 事件
Node.js 事件 Node.js 所有的异步I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, ...
- ASP.NET使用Razor语法无法正确识别.cshtml文件
ASP.NET使用WebPage编程的好处之一是可以使用强大的Razor语法, 但初次使用Razor语法会碰到一个比较头疼的问题就是无法直接写一个.cshtml让浏览器去识别,查资料也没有找到相关问题 ...
- 用python定时文章发布wordpress
用python定时文章发布wordpress: 流程: 采集 - 筛选文章 - wordpress文章发布. wordpress文章发布代码:python利用模块xmlrpclib发布文章非常便捷,省 ...
- 网站优化之Asp.Net篇<一>
一>禁用viewstate. 二>禁用动态编译.访问一个Aspx文件时 会编译为一个新的类放在C盘Asp.net临时文件夹下.下次请求不会再编译,会把先前的编译结果返回. 任何对Asp.n ...
- 视频转gif
如何把视频变成GIF https://shop16541393.koudaitong.com/v2/feature/1x6q09fa?openid=ov0dfwb6-DBFqTzvekSNAjT59U ...
- Qt线程(2) QThread中使用WorkObject
一般继承QThread的WorkThread都会在重载的run()中创建临时的WorkObject,这样能确定这个WorkObject在该thread中使用 那如果这个WorkObject是个Sing ...
- mysql 可能会用到的一些 函数
DATE_SUB(sysdate(), INTERVAL 8 HOUR) //当前时间前 8小时 ifnull("","") Parameter //添加一 ...