python函数的定义与使用
定义函数
函数:组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 定义函数格式:
函数的调用:
def Max ( a, b) :
if a > b:
return a
else :
return b
print ( Max( 3 , 5 ) )
返回值
使用return返回函数计算结果 可以有多个return语句,但是真正执行时最多运行1次,碰到return语句,函数结束 没有return语句,函数返回值为None return可以返回多个变量
传参机制
形参与实参
形式参数:定义函数时的输入参数 实际参数:调用函数时传递的参数
def f ( x) :
x *= 2
print ( "这是形式参数:x = {}" . format ( x) )
x = 100
print ( "这是实际参数:x = {}" . format ( x) )
f( x)
print ( "这是实际参数:x = {}" . format ( x) )
值传递
值传递:函数中的形式参数变化,不会导致实际参数的变化,这是由于传递的是数值单方向的。参数为不可变类型,字符串、数字、元组
def Swap ( x, y) :
x, y = y, x
print ( "这是swap函数" )
print ( "x = " , x, "y = " , y)
print ( "id(x) = " , id ( x) , "id(y) = " , id ( y) )
x, y = 3 , 5
print ( "这是主函数" )
print ( "x = " , x, "y = " , y)
print ( "id(x) = " , id ( x) , "id(y) = " , id ( y) )
Swap( x, y)
print ( "这是主函数" )
print ( "x = " , x, "y = " , y)
print ( "id(x) = " , id ( x) , "id(y) = " , id ( y) )
引用传递
引用传递:函数中形式参数变化,会导致实际参数一起变化,这是由于传递的是变量。参数为可变类型,列表、字典
def F ( x) :
x. append( 4 )
print ( "这是swap函数" )
print ( "x = " , x)
print ( "id(x) = " , id ( x) )
x = [ 1 , 2 , 3 ]
print ( "这是主函数" )
print ( "x = " , x)
print ( "id(x) = " , id ( x) )
F( x)
print ( "这是主函数" )
print ( "x = " , x)
print ( "id(x) = " , id ( x) )
如何传参不出错?在大多数情况下:
尽量不要传递列表、字典这种可变数据 即使传参,也尽量不要改动这些参数 技巧:传递列表、字典这类变量时,传递一个副本,这样就算修改实参也不会发生变化
位置参数
def f ( a, b, c, d, e) :
print ( "a = " , a)
print ( "b = " , b)
print ( "c = " , c)
print ( "d = " , d)
print ( "e = " , e)
f( 1 , 2 , 3 , 4 , 5 )
关键字参数
def f ( a, b, c, d, e) :
print ( "a = " , a)
print ( "b = " , b)
print ( "c = " , c)
print ( "d = " , d)
print ( "e = " , e)
f( e= 1 , d= 2 , a= 3 , b= 4 , c= 5 )
f( 1 , 2 , c= 3 , d= 4 , c= 5 )
默认参数
定义函数时,给一个形参默认值,所有的默认参数必须放在最后面。
def f ( a, b, c= 3 , d= 4 , e= 5 ) :
print ( "a = " , a)
print ( "b = " , b)
print ( "c = " , c)
print ( "d = " , d)
print ( "e = " , e)
f( 1 , 2 )
f( 1 , 2 , 5 )
f( 1 , 2 , d= 4 )
不定长参数(*)
形式参数前加*, 表示不定长参数,可以按照位置参数的格式传递多个参数 加了星号*的参数会以元组(typle)的形式导入,存放所有未命名的变量参数。
def f ( a, b, * argtuple) :
print ( "a = " , a)
print ( "b = " , b)
print ( "argtuple = " , argtuple)
f( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 )
不定长参数(**)
形式参数前加**, 表示不定长参数,可以按照位置参数的格式传递多个参数 加了星号**的参数会以字典(dict)的形式导入。
def f ( a, b, ** args) :
print ( "a = " , a)
print ( "b = " , b)
print ( "args = " , args)
f( 1 , 2 , c1= 3 , d= 4 , e= 5 )
变量作用域
作用域:变量的有效范围
局部变量:函数内部的变量,仅作用域函数内部 全局变量:函数外部的变量,作用于全局
total = 0
def f ( a, b) :
total = a + b
print ( "此处的total是局部变量,total =" , total)
f( 10 , 20 )
print ( "此处的total是全局变量,total =" , total)
total = 0
def f ( a, b) :
global total
total = a + b
print ( "此处的total是全局变量,total = " , total)
f( 10 , 20 )
print ( "此处的total是全局变量,total = " , total)