Python函数和lambda表达式

可以通过python内置的help()函数查看其它函数的帮助文档

函数说明文档:放置在函数声明之后,函数体之前,说明文档可以通过help(函数名)或者函数名.__doc__查看

函数可以返回多个值,函数返回时多个值被封装成一个元组,调用时可以直接使用多个变量接收函数的返回值。

形参

def girth(width,height):
    print("width:",width)
    print("height:",height)
    return 2*(width+height)


print(girth(1.2,2.3)) #根据位置传入参数
print(girth(width=1.2,height=2.3)) #关键字参数
print(girth(height=2.3,width=1.2)) #使用关键字参数时可交换位置
print(girth(1.2,height=2.3)) #部分使用位置参数,部分使用关键字参数

参数收集:python可以定义数量可变的参数,在形参前面加*,意味着该参数可接收多个值,多个值被当做元组传入。可变形参可以位于形参列表的任意位置。

def test(a,*books):
    print(books)
    print(a)

test(5,"C++","C#","Python")  #('C++', 'C#', 'Python')
                                            # 5
View Code

关键字参数收集:在形参前面加两个星号,则python会将关键字参数收集为字典

def test(x,y,*books,**scores):
    print(x,y)
    print(books)
    print(scores)

test(1,2,'C++','Python',math=90,English=89)
# 1 2
# ('C++', 'Python')
# {'math': 90, 'English': 89}
View Code

python中的函数参数传递是值传递

 

局部函数:函数定义在其他函数的封闭函数体内,如果封闭函数没有返回局部函数,则局部函数只能在封闭函数内调用;如果封闭函数将局部函数返回且程序使用了变量接收封闭函数的返回值,则局部函数的作用域会被扩大。

def get_math_func(type,nn):
    def square(n):
        return n*n
    def cube(n):
        return n*n*n
    def factorial(n):
        result=1
        for i in range(2,n+1):
            result*=i
        return result
    #调用局部函数
    if type=='square':
        return square(nn)
    elif type=='cube':
        return cube(nn)
    else:
        return factorial(nn)

print(get_math_func('square',5)) #25
print(get_math_func('cube',6)) #216
print(get_math_func('',5)) #120
View Code

python所有函数都是function对象,可以吧函数赋值给变量,作为函数参数以及返回值。

#函数fn作为参数
def map(data,fn):
    result=[]
    for e in data:
        result.append(fn(e))
    return result

def square(x):
    return x*x

data=tuple(range(10))
print(map(data,square)) #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

lambda表达式

lambda表达式的语法格式为   lambda 参数列表:表达式,参数列表使用逗号分割

lambda表达式实质上就是匿名的、单行函数体的函数

def square(n):
    return n*n

def cube(n):
    return n*n*n

def factorial(n):
    result=1
    for i in range(2,n+1):
        result *=i
    return result

def map(data,fn):
    result=[]
    for e in data:
        result.append(fn(e))
    return result

data=list(range(8))
print(map(data,square)) # [0, 1, 4, 9, 16, 25, 36, 49]
print(map(data,lambda x: x*x if x%2==0 else 0)) # [0, 0, 4, 0, 16, 0, 36, 0]
View Code

 

posted @ 2018-05-26 11:19  summer91  阅读(212)  评论(0编辑  收藏  举报