函数最重要的目的是方便我们重复使用相同的一段程序。
将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句。
1.函数的定义
在Python中,函数声明和函数定义是视为一体的。在Python中,函数定义的基本形式如下:
def function(params):
block
return expression/value
实例如下:
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.Xie
-
# @Time :2017/11/1 22:01
-
# @File :fun.py
-
-
-
# 定义函数
-
def printme(astr):
-
print astr
-
return
2.函数的调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
如下实例调用了printme()函数:
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.Xie
-
# @Time :2017/11/1 22:01
-
# @File :fun.py
-
-
-
# 定义函数
-
def printme(astr):
-
print astr
-
return
-
-
-
# 调用函数
-
printme("第一次调用用户自定义函数!")
-
printme("再次调用同一函数")
运行结果如下:
第一次调用用户自定义函数!
再次调用同一函数
说明:
(1)在Python中采用def关键字进行函数的定义,不用指定返回值的类型。
(2)函数参数params可以是零个、一个或者多个,同样的,函数参数也不用指定参数类型,因为在Python中变量都是弱类型的,Python会自动根据值来维护其类型。
(3)return语句是可选的,它可以在函数体内任何地方出现,表示函数调用执行到此结束;如果没有return语句,会自动返回NONE,如果有return语句,但是return后面没有接表达式或者值的话也是返回NONE。
一般我们把没有return语句的函数叫做过程
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.Xie
-
# @Time :2017/11/1 22:01
-
# @File :fun.py
-
-
def sayHello():
-
print 'hello'
-
-
-
def square_sum(a,b):
-
c = a**2 + b **2
-
return c
-
-
-
print sayHello()
-
print square_sum(3, 4)
运行结果如下
hello
None
25
第一个函数
sayHello没有return,所以返回None .第二个函数square_sum有return语句,返回函数的执行结果。
3.函数的传参
参数分形参和实参,定义函数时,函数名后括号里就是形参,调用函数时,函数名后面括号里就是实参
实例如下:
-
#!/usr/bin/env python
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.Xie
-
# @Time :2017/11/1 22:01
-
# @File :fun.py
-
-
def modify1(m, k):
-
m = 2
-
k = [4,5,6]
-
return
-
-
-
def modify2(m, k):
-
m =2
-
k[0] = 0
-
return
-
-
-
n = 100
-
L =[1, 2, 3]
-
-
modify1(n, L)
-
print n
-
print L
-
-
modify2(n, L)
-
print n
-
print L
运行结果:
100
[1, 2, 3]
100
[0, 2, 3]
分析如下:
从结果可以看出,执行modify1( )之后,n和L都没有发生任何改变;
执行modify2( )后,n还是没有改变,L发生了改变。因为在Python中参数传递采用的是值传递方式,在执行函数modify1时,
先获取n和L的id( )值,然后为形参m和K分配空间,让m和K分别指向对象100和对象[1,2,3]。m=2这句让m重新指向对象2,而K=[4,5,6]这句让K重新指向对象[4,5,6]。
这种改变并不会影响到实参n和L,所以在执行modify1之后,n和L没有发生任何改变;在执行函数modify2时,
同理,让m和K分别指向对象2和对象[1,2,3],然而K[0]=0让K[0]重新指向了对象0(注意这里K和L指向的是同一段内存),所以对K指向的内存数据进行的任何改变也会影响到L,
因此在执行modify2后,L发生了改变。
当实参是元组合字典传参方式如下
-
#!/usr/bin/env python
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.Xie
-
# @Time :2017/11/1 22:01
-
# @File :fun.py
-
-
def printinfo(*a, **aa):
-
print a
-
print info
-
-
atuple = (1,2,3)
-
info = {'name': 'tom', 'age': 28}
-
printinfo(*atuple, **info)
运行结果:
(1, 2, 3)
{'age': 28, 'name': 'tom'}
阅读(1218) | 评论(0) | 转发(0) |