python 函数的应用(2)

1. 返回函数

函数可以有返回值,除了返回值外,函数中也可以返回函数。

# 函数返回值
def calc_sum(*args):
    su = 0 
    for n in args:
        su += n
    return su
print(calc_sum(1,2,3,4))
10
# 函数返回函数
def ret_sum(*args):
    def calc_sum():
        su = 0 
        for n in args:
            su += n
        return su
    return calc_sum
clc_sum = ret_sum(1,2,3,4)
clc_sum()
10
f1 = ret_sum(1,2,3,4)
f2 = ret_sum(1,2,3,4)
print( f1 == f2)
False

2. 递归函数

    如果一个函数在内部调用自身,这个函数就称作递归函数。递归函数的简单定义如下:

  def recurision():
    retrun recurision
# 简单的例子: 求5的阶乘

def fun(n):
    s = 1
    if n != 1:
        s = n * fun(n-1)
    return s 
fun(5)
120
def fun(n):
    if n == 1:
        return 1
    return n * fun(n-1)
fun(5)
120

计算过程如下:

fun(5)
5 * fun(4)
5 * (4 * fun(3))
5 * (4 * (3 * fun(2)))
5 * (4 * (3 * (2 * fun(1)))
5 * (4 * (3 * (2 * 1)))
5 * (4 * (3 * 2))
5 * (4 * 6)
5 * 24
120

3. filter()函数

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。以下是 filter() 方法的语法:
filter(function, iterable)

  • function – 判断函数。
  • iterable – 可迭代对象。
# 过滤出列表中的所有奇数:
def is_odd(n):
    return n % 2 == 1
 
templist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
# python 3 返回的是迭代器对象,需要list转化一下:
newlist = list(templist)
print(newlist)
[1, 3, 5, 7, 9]

item for item in filter是Python 3中filter函数的取值方式,因为从Python
3起,filter函数返回的对象从列表改为迭代器(filter object)。filter object支持迭代操作,比如for循环:

# 过滤出1~100中平方根是整数的数:
import math
def is_sqr(x):
    return math.sqrt(x) % 1 == 0
newlist= []
for item in  filter(is_sqr, range(1, 101)):
    newlist.append(item)
print(newlist )
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

4. 匿名函数

匿名函数就是不再使用def语句这样的标准形式定义一个函数。 Python使用lambda创建匿名函数。 lambda函数的语法只包含一个语句,语句如下:lambda [arg1 [,arg2,…argn]]:expression

def fun(x,y):
    return x + y
fun(1,2)
3
fun = lambda x,y : x+ y  
fun(1,2)
3
# 过滤出列表中的所有奇数:
newlist = []
for item in  filter(lambda n : n % 2 ==1,[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]):
    newlist.append(item)
print(newlist)
[1, 3, 5, 7, 9]
# 过滤出1~100中平方根是整数的数:
import math
newlist = []
for item in  filter(lambda x: math.sqrt(x) % 1 ==0 ,  range(1, 101)):
     newlist.append(item)
print(newlist )
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

5. 偏函数

偏函数是将所要承载的函数作为partial()函数的第一个参数,原函数的各个参数依次作为partial()函数的后续参数,除非使用关键字参数。

from functools import partial

def add(m,n):
    return m + n
def sub(m,n):
    return m - n 
def mult(m,n):
    return m * n
def div(m,n):
    if n != 0:
        return m /n
    else:
        print("除数不能为0")
        
partial_fun = partial(add,6,2)
# partial_fun = partial(sub,6,2)
# partial_fun = partial(mult,6,2)
# partial_fun = partial(div,6,2)
partial_fun()
8
发布了15 篇原创文章 · 获赞 0 · 访问量 226

猜你喜欢

转载自blog.csdn.net/qq_38249388/article/details/105017388
今日推荐