1、定义
python函数以关键字def标识
def test(name):
print 'hello %s'%(name)
name=raw_input('please input your name: ')
test(name)
PS:在python中代码块以缩紧的方式进行标识,所以缩进对齐的语句为一个代码块,这比像C++\java使用{}进行标识的方法方便不少,但是也对一些代码对齐不规范的同学带来一些麻烦
def 函数名(参数列表):
函数体
2、参数列表
python在函数中的参数与C++类似,没有特殊说明说明是传值参数,即改变函数内部的局部变量,函数外的变量值是不会改变的
def test(num):
num+=1
print num
num=1
test(num)
print num
当我们想使用参数改变外部变量是应该怎么办呢?
1)使用函数返回值改变
def test(num):
num+=1
print num
return num
num=1
num=test(num)
print num
2)给函数参数传入一个列表或字典
def test(num):
num[0]=num[0]+1
print num[0]
num=[1]
test(num)
print num[0]
为什么我们传入一个变量不会改变,而传入一个列表,列表的值就改变了呢?
其实是这个样子的,我们函数中的num列表和函数外的num列表引用的是同一个列表,所以在函数内部修改时,函数外部变量所引用的列表也跟着改变(怎么这么别扭呢?)PS:这是不是和我们在c++中传引用和指针差不多呢?
3、关键字参数和默认值参数
在上面的介绍中,函数的传参都是按照函数参数列表中的位置顺序决定的,当我们把传参的顺序改变是,函数就不会完成预期的工作。
关键字参数在函数传参是为每一个参数指定一个名字,这样无论在参数列表中的顺序是什么样子的,都会匹配到实际的参数(还是这么别扭呢?)
def test(first,second):
res=first-second
return res
print test(1,2)
print test(2,1)
print test(first=1,second=2)
print test(second=2,first=1)
默认值参数指在函数定义中在参数列表中设置参数额度默认值,当我们在使用函数时如果传入了新的值则使用新值,如果未传入参数,则使用默认值
def test(first=1,second=2):
res=first-second
return res
print test(1,2)
print test()
4、函数传列表、字典
在python中可以使用*(**)传递参数,可以传递多个参数,把*后面的参数当作一个列表(字典)处理
def test(*list):
print list
print list[0]+list[4]
num1=1
num2=2
num3=3
num4=4
num5=5
test(num1,num2,num3,num4,num5)