标签:python 函数
1.1 函数定义函数
(1)函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给他取一个名字。
(2)可以通过函数名在程序的不同地方多次执行(即,函数的调用)
(3)预定义函数,可以直接使用
(4)自定义函数,用户自己编写
(5)为社么使用函数:
① 降低编程难度
- 通常将一个复杂的大问题分解成一系列小问题,然后将小问题划分成更小的问题,当问题细化为足够简单时,就可以分而治之,各个小问题解决了,大问题就迎刃而解了。
② 代码重用
- 避免重复劳动,提升效率
定义函数:
函数的定义和调用:
- def 函数名([参数列表]): // 定义 - 函数名([参数列表]) // 调用
函数名的命名规则:
函数名可以是以字母,数字,下划线命名的,但是不能以数字开头
函数名在定义的时候跟变量有点区别
"变量"都是定义成 小写 的;
"函数名" 如果是由两个单词组成,第二个单词首字母要大写,也就是说,如果由多个单词组成,除了开头第一个单词首字母不要大写,其余单词首字母都要大写;两个单词之间可以通过下划线连接;
"类"的命名:每个单词首字母都要大写;
要养成这样的规范习惯。
定义函数例子:
def fun(): print "hello world"
函数调用:
fun() hello world
举例:
当我执行脚本的时候,提示我从键盘读取输入:
结果:
1.2 函数的参数
形参和实参:
- 在定义函数的时候,函数名后面括号中的变量名称叫做“形式参数”,或者称为“形参”
- 在调用函数时,函数名后面括号中的变量名称叫做“实际参数”,或者称为“实参”
形参:
def fun(x, y): print x + y
x , y 是2个形式参数
调用(传参):
fun(2, 3) 5
举例:
判断并打印最大的数
调用
实际参数:
import sys print sys.argv[1]
打印参数
python test.py 1 2 1
举例:
判断是否是数字
结果:
1.3 函数的默认参数
练习
打印系统所有的PID
要求从 /proc 读取
os.listdir()
import os os.listdir()
os.listdir() 帮助信息
用法:
os.listdir('/proc')
脚本:
import sys import os def isNum(s): for i in s: if i in '0123456789': pass else: break else: print s for i in os.listdir('/proc'): isNum(i)
默认参数
缺省参数(默认参数)
def fun(x, y = 100): print x, y
调用:
fun(1, 2) fun(1)
结果自然不同
举例解释:
调用的时候,实参会代替100
只有一个参数的时候,y使用默认的值
举例:
若指定参数,则
错误举例:
def fun(x=2, y): print x + y
报错:
结论:
默认参数只能在最后的形参上,不能在前面或中间,只能在最后,方向从右到左,比如有3个参数,定义默认参数可以是"最后一个参数" ,或"第二个和最后一个",或"第一和第二和第三个参数"都定义。
默认参数主要看位置
本节总结:
默认参数就是我们在调用函数的时候,如果没有给函数传值得话,会使用默认参数给函数传值
1.4 函数的变量
局部变量和全局变量
- python中的任何变量都有特定的作用域
- 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序特定部分使用的变量,称之为局部变量;
- 在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称之为全局变量。
局部变量:
def fun(): x = 100 print x fun()
全局变量:
x = "global var" def fun(): x = 100 print x fun() print x
通过关键字声明:
在函数里面,把x声明为全局变量
x = 100 def fun(): global x x += 1 print x fun()
同理,在函数内部将关键字声明为全局变量,当函数被调用的时候,在外部能打印出函数内部的变量:
x = 100 def fun(): global x x += 1 global y y = 1 fun() print x print y
locals 的用法(试一下):
x = 100 def fun(): x = 1 y = 1 print locals() fun() print locals()
链接:http://blog.csdn.net/scelong/article/details/6977867
1.5 函数的返回值
- 函数被调用后会返回一个指定的值
- 函数调用后默认返回None
- return 返回值
- 返回值可以是任意类型
- return执行后,函数终止
- return与print的区别
函数被调用后会返回一个指定值
执行脚本:
None就是函数的返回值
修改脚本:
执行脚本:
这个返回值可是任意类型,也可以返回True
1.6 多类型传值和冗余参数
多类型传值
定义函数
def fun(x, y): return x + y print fun(3, 5)
将一个元组传入函数
t = (3, 7) fun(*t) 10 #返回的函数结果
举例:
传入多个参数的三种形式:
错误的写法:
所以,元组不能写在前面
另外,还可以指定参数值,如下
传入的参数名字一定要和函数内形参的名字要一致,下面两种错误的方法:
'x'被函数当成了一个字符串变量
a,b,c 报类型错误,与函数的形参不一致,函数不知道这三个新导入的参里面是什么
名字一定要和形参一致。
函数传入字典的方法
把字典作为参数传入函数
同理,定义的字典里面的 key 也要和函数里面的形参一致
定义的字典里面的key,要加引号,比如 'x':1,否则,不加引号字典会把x定义为变量,定义字典会报错。
总结:
可以向函数内部传入元组和字典,可以把元组里面的元素作为参数传给函数,也可以把字典里面的value作为参数传给函数,但是定义字典的时候字典的key一定要和函数的形参一致。
冗余参数
定义函数的时候,函数有3个参数,调用函数的时候,只能给传3个参数,不能传多,也不能传少
有时候,我们要让函数接收多一些的参数,但是传的时候可能只传了少数几个,或者传入更多参数。
def fun(x, y=1, *args, **kwargs)
解释:
x 叫默认参数(命名参数)
y=1 叫关键字参数
*args 和 **kwargs 叫 可变参数(或者冗余参数)
举例:
定义函数
传入一个参数,返回
再传入一个参数,返回
2被认为是冗余参数,并且是以元组的形式往里传。
传入字符串、列表传入进去,都会存入元组里:
再传入一个参数 y=2:
返回的是字典,可以多传入几个:
多类型传值里面我们定义了元组类型的变量 t,我们把他作为参数传入函数
同理,字典也可以以参数形式传入函数或者 a=3这种形式:
1.7 函数的递归调用
递归就是在函数内部调用他自己
通常用递归去调用阶乘
最基本的阶乘:就是循环方式实现阶乘
举例1:
举例2:
下面使用递归的方式实现阶乘:
首先,递归的注意事项:
所谓"默认结果" 就是当参数等于0的时候,返回1
形象一点:
上图 f(0) 的时候,结果就是1
举例:
举例:
标签:python 函数
原文地址:http://blog.51cto.com/286577399/2046625