菜比之路

走菜比的路,让大牛说去吧
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

【python】函数相关知识

Posted on 2016-08-31 13:38  毕加索的ma  阅读(321)  评论(0编辑  收藏  举报
函数定义规范:
def test(a):
    """
    返回输入字符
    :param a:
    :return: a
    """
    return a


# 函数定义规范:
# def:定义函数的关键字
# test:函数名
# ():可定义形参
#""" """: 函数介绍
#return:定义返回值

 

函数参数

形参:在定义函数和函数体的时候使用的参数,目的是在函数调用的时候接受实参(形参和实参要一一对应)
实参:调用函数传给函数的参数,可以是常量、变量、表达式、函数
实参:大概分为位置参数、默认参数、关键字参数、参数组

调用函数实参使用标准: 形参和实参要一一对应;关键字参数一定要放在位置参数的后面;关键字参数调用,位置无需固定
def test(x,y):
    print("y= %s"%y,end=",")
    print("x= %s"%x)

test(3,4)  ##纯位置参数调用
#>>>y= 4,x= 3
test(y=5,x=3)##纯关键字参数调用,可以无序
#>>>y= 5,x= 3
test(3,y=5)
#>>>y= 5,x= 3
test(x=3,4)   ###这样调用会报错,因为关键字参数一定要放在位置参数的后面
#>>>报错
test(3,x=4) ##这样也会报错,相当于位置参数给形参x赋值了,然后关键字参数又给x赋值了
#>>>TypeError: test() got multiple values for argument 'x'
形参使用标准: 必须是最先为位置参数,然后为默认参数,最后为参数组(先**args,再**kwargs)
def test(x,y,z=3,*args,**kwargs):
    print("x= %s"%x,end=",")
    print("y= %s"%y,end=",")
    print("z= %s" %z)

test(1,3,4)
#>>>x= 1,y= 3,z= 4

 默认参数和参数组调用

默认参数:既可以用位置参数调用,也可以用关键组参数调用
*args:把N个位置参数转换为元组形式
有两种方法调用:1.接受一般位置参数
2.*和数组|元组|集合进行搭配
**kwargs:把N个关键字参数转换为字典形式
有两种方法调用:1.接受一般关键字参数
2.*和字典进行搭配
 
def test(x,y,z=3,*args,**kwargs):
    print("x= %s"%x,end=",")
    print("y= %s"%y,end=",")
    print("z= %s" %z,end=",")
    print(args,end=",")
    print(kwargs)

"""
默认参数即可以用位置参数调用,也可以用关键组参数调用
"""
test(1,3,4)
#>>>xx= 1,y= 3,z= 4,(),{}
test(1,3,z=5)
#>>>x= 1,y= 3,z= 5,(),{}

"""
*args:把N个位置参数转换为元组形式
      有两种方法调用:1.接受一般位置参数
                  2.*和数组|元组|集合进行搭配
"""
test(1,2,3,4,5,6)
#>>>x= 1,y= 2,z= 3,(4, 5, 6),{}
test(1,2,3,*(4,5,6))
#>>>x= 1,y= 2,z= 3,(4, 5, 6),{}
test(1,2,3,*[4,5,6])
#>>>x= 1,y= 2,z= 3,(4, 5, 6),{}
test(1,2,3,*{4,5,6})
#>>>x= 1,y= 2,z= 3,(4, 5, 6),{}


"""
*args:把N个关键字参数转换为字典形式
      有两种方法调用:1.接受一般关键字参数
                  2.*和字典进行搭配
"""
test(1,2,3,m=4,n=5)
#>>>x= 1,y= 2,z= 3,(),{'m': 4, 'n': 5}
test(1,2,3,**{"m":4,"n":5})
#>>>x= 1,y= 2,z= 3,(),{'m': 4, 'n': 5}
关键字参数调用无序性:
def test(x,y,z=3,*args,**kwargs):
    print("x= %s"%x,end=",")
    print("y= %s"%y,end=",")
    print("z= %s" %z,end=",")
    print(args,end=",")
    print(kwargs)

test(1,2,m=4,n=5,z=6)
#>>>x= 1,y= 2,z= 6,(),{'m': 4, 'n': 5}

 

返回值:  

返回值数为0时,返回None;
返回值数为1时,返回object;
返回值数>1时,返回元组

def test1(x):
    pass

def test2(x):
    return x

def test3(x,y,z):
    return x,y,z


print(test1(1))
#>>>None
print(test2(1))
#>>>1
print(test3(True,"hello",3))
#>>>(True, 'hello', 3)

 

高阶函数:

一个函数可以接受另一个函数作为参数。
a:把一个函数名当做实参传给另一个函数
b:返回值中包含函数名
def add(x, y, f):
    return f(x) + f(y)  ##理解f为函数名
#当我们调用add(-5, 6, abs)时,参数x,y和f分别接收-5,6和abs

print(add(-5,6,abs))  ##调用时直接使用函数名调用
#>>>11

  

递归函数:
递归函数特点:
1.必须有一个明确的结束条件
2.每次进入更深的递归时,问题规模相比上次递归应有所减少
3.递归效率不高
def test(n):
    if n>0:
        n = n // 2
        print(n)
        return test(n)
    return "over"

print(test(10))