Python基础篇【第2篇】: Python自定义函数
Python函数
1. 函数定义
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
2. 定义
- 函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
 - 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
 - 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
 - 函数内容以冒号起始,并且缩进。
 - Return[expression]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 No
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expressi 
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年,他从阿姆斯特丹大学获得了数学和计算机硕 ...
 
随机推荐
- BEGIN_TEMPLATE_MESSAGE_MAP
			
最近转做服务端开发,或多或少有点坑爹的感觉.目前正在恶补Linux C/C++编程,主要还是集中在Linux系统API的学习.不过也好,以后更新的内容不仅仅只有Windows了. 今天说一点简单的东西 ...
 - RSS
			
RSS的基本概念 什么是RSS,RSS是在线共享内容的一种简易方式(也叫聚合内容,Really Simple Syndication).网站提供RSS输出有利于让用户获取网站内容的最新更新.用户可以使 ...
 - Ubuntu user switch
			
To list all users you can use: cut -d: -f1 /etc/passwd To add a new user you can use: sudo adduser n ...
 - 第十章:Intent详解
			
[正文] Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要. 一.什么是Intent 1.Intent的概念: Android中提供了Intent机制来协助应用 ...
 - SVG DOM常用属性和方法介绍
			
将以Adobe SVG Viewer提供的属性和方法为准,因为不同解析器对JavaScript以及相关的属性和方法支持的程度不同,有些方法和属性是某个解析器所特有的.SVG支持DOM2标准. 12.2 ...
 - node.js之windows下环境终极配置
			
大家都知道现在node.js相当流行,出门在外,如果都没听说过node.js,基本上算是out了,前段时间做一个项目,用到了实时通讯功能,当时用的就是node.js来做的,我有幸有研究了一番,别的不敢 ...
 - Apache2.2与php5.17 mysql配置
			
php5.217应该用线程安全搬,不然各种无语的Apache打不开,PHPInfo没有Mysql的信息,记得把php.ini放入系统盘Windows目录下,Win764位的libmysql.dll也放 ...
 - javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")
			
原因很简单:因为在js中{}表示一个语句块(代码段),所有加上"()"表示表达式
 - Application.Exit()结束程序,但线程还在的解决方法。
			
出现此情况大多原因是使用了多线程编程,或者你所调用的dll使用了多线程.我们知道,一般情况下的线程执行完指定的任务之后是会关闭了的,但是如果对于一些循环类线程,或者忘记关掉的线程时,这个时候就需要我们 ...
 - JSP基础总结 脚本元素
			
JSP脚本元素 1. JSP声明语句 JSP声明语句以<%!开始,以%>结束,其语法格式为:<%! 声明语句 %> 使用声明语句的变量为全局变量,也就是说,当有多个用户在执行 ...