函数
1.函数的创建
def 函数名( [ 输入参数] ) :
函数体
[ return xxx]
2.函数的参数传递
2.1 位置实参
2.2 关键字实参
def calc ( a, b) :
print ( 'a=' , a)
print ( 'b=' , b)
c = a + b
return c
ans = calc( 10 , 20 )
print ( ans)
res = calc( b = 13 , a = 15 )
print ( res)
'''
a= 10
b= 20
30
a= 15
b= 13
28
'''
2.3 传递的内存分析
在函数调用过程中,进行参数的传递 如果是不可变对象,在函数体的修改不会影响实参的值:arg1的修改为100,不影响n1的值 如果是可变对象,在函数体的修改会影响到实参的值:arg2的修改,append(10),会影响到n2的值
def fun ( arg1, arg2) :
print ( 'arg1' , arg1)
print ( 'arg2' , arg2)
arg1 = 100
arg2. append( 10 )
print ( 'arg1' , arg1)
print ( 'arg2' , arg2)
n1 = 11
n2 = [ 22 , 33 , 44 ]
print ( 'n1' , n1)
print ( 'n2' , n2)
fun( n1, n2)
print ( 'n1' , n1)
print ( 'n2' , n2)
3.函数的返回值
(1)如果函数没有返回值【执行完毕之后,不需要给调用处提供数据处理】,return可以省略不写 (2)函数的返回值,如果是1个,直接返回类型 (3)函数的返回值,如果是多个,返回的结果为元组
def fun1 ( ) :
print ( "world" )
fun1( )
def fun2 ( ) :
return 'hello'
print ( fun2( ) )
def fun3 ( ) :
return 'hello' , 'world'
print ( fun3( ) )
4.函数的参数定义
函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参
def fun ( a, b = 10 ) :
print ( a, b)
fun( 100 )
fun( 20 , 30 )
个数可变的位置参数
定义函数时,可能无法事先确定传递的位置实参的个数,使用可变的位置参数 使用*定义个数可变的位置形参 结果为一个元组
def fun ( * args) :
print ( args)
fun( 10 )
fun( 10 , 20 )
个数可变的关键字形参
定义函数时,可能无法事先确定传递的关键字实参的个数时,使用可变的关键字形参 使用**定义个数可变的关键字形参 结果为一个字典
def fun ( ** args) :
print ( args)
fun( a = 10 )
fun( a = 10 , b = 20 , c = 30 )
'''
def fun1(*args, *a):
pass
以上代码,程序会报错,可变的位置参数,只能是1个
'''
'''
def fun2(**args, **a):
pass
以上代码,程序会报错,个数可变的关键字参数,只能是1个
'''
def fun3 ( * args1, ** args2) :
pass
'''
def fun4(**args1, *args2):
pass
在一个函数的定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参
要求:个数可变的位置形参,放在个数可变的关键字形参之前
'''
5.函数的参数总结
序号 参数的类型 函数的定义 函数的调用 备注 1 位置参数 √ 将序列中的每个元素都转换为位置参数 √ 使用* 2 关键字实参 √ 将字典中的每个键值对都转换为关键字实参 √ 使用** 3 默认值参数 √ 4 关键字形参 √ 使用* 5 个数可变的位置形参 √ 使用* 6 个数可变的关键字形参 √ 使用**