Python-基础知识学习之函数、匿名函数(function,lambda)

函数同其他语言一样,是一段可以重复使用的代码片段,不过在Python中,函数的功能和c和c++等传统语言还是有很大的不同,它更加灵活对边,使用起来也方便很多。

函数的声明使用关键字def + 函数名(参数1,参数2,关键字参数1),返回使用return,如果不写return,默认会返回一个none,下面是一个函数的定义:

def func1(x, y, z=1.5):
    if z > 1:
        return z*(x+y)
    else:
        return z/(x+y)

这个函数有三个参数,其中z是有默认值的,这个同C和C++一样,但是我们在调用这个函数时,一方面可以和C++一样按照顺序传递参数的值,另一方面,我们可以使用关键字传递参数,这么做的好处就是不需要记住参数的具体顺序,我们只要指定了这个参数是哪一个就行,比如:

func1(x=5, y=6, z=7)
#可以不按照之前的顺序来
func1(y=6, z=7, x=5)
#得到的结果是一样的

函数中的临时定义的变量,只能作用于函数内部,当退出函数时,这个变量就会销毁。如果想使用全局变量,那么需要在变量前加关键字global,这只适合定义一些表示状态的变量,如果有大量的全局变量,那么就创建一个类来管理更加方便。

在之前我们知道有一种类型是元组,我们在函数返回值可以返回一个元组,这样就能达到返回多个值的功能,比如:

def get_max_min_value(a, b, c, d, e)
    dmax = max(a, b, c, d, e)
    dmin = min(a, b, c, d, e)
    return (dmax, dmin)

除了返回元组,我们还可以返回一个字典,或者list都可以实现这个功能

在Python中,函数其实就是一个对象,那么在做其他操作的时候,可以将函数当做一个值传递过去:

import re #导入正则表达式模块

arr_strs = ['Hello', 'World!', 'Google', 'facebook', 'tencent  qq##', 'Ali baba?']

def clean_strings(strings):
    result = []
    for value in strings:
        value = value.strip()
        value = re.sub('[!#?]', '', value)
        value = value.title()
        result.append(value)
    return result

print(clean_strings(arr_strs)
#打印
    ['Hello', 'World', 'Google', 'Facebook', 'Tencent  Qq', 'Ali Baba']


#单独定义一个处理不好字符的函数,然后放到函数列表中去,进行统一操作
def remove_punctuation(value):
    return re.sub('[!#?]', '', value)

clean_ops = [str.strip, remove_punchuation, str.title] #将函数放到一个list中去

def clean_strings(strings, ops):
    result = []
    for value in strings:
        for func in ops:
            value = func(value)
        result.append(value)
    return result

print(clean_strings(arr_strs) #得到的结果和上面是一样的


#还可以将函数单做参数传递给其他函数
for v in map(remove_punctuation, arr_strs):
    print(x)
#结果是指将不好的符号处理掉,没有将首字母大写

除了我们正常定义的函数之外,有时候图方便,经常会使用匿名函数(Lambda),也就是一句话的函数:

def short_func(x):
    return x*2

#像这种简单的函数,可以使用匿名函数,一句话就能搞定

ret = lambda x: x*2

#其效果是一样的,有时候这么做会让代码更加简洁,下面是对一个字符串排序:

strs = ['foo', 'card', 'bar', 'aaaa', 'abab']

strs.sort(key=lambda x: len(set(list(x)))) #根据使用不同字符数量排序
print(strs)

#打印
    ['aaaa', 'foo', 'abab', 'bar', 'card']

匿名函数还有一个重要的用处,是可以把一个函数变成更多其他重复要用的函数,比如:

def add_n(x, y):
    return x+y

#由于我们在使用中其中一个参数只用到了3,那么我们可以重新利用匿名函数定一个add_three的函数

add_three = lambda x: add_n(x, 3)

print(add_three(3))
#打印
    6

#当然,Python的内建模块已经做了这个处理,在functools模块中:
from functools import partial
add_three = partial(add_n, 3)

print(add_three(3))
#得到结果是一样的

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏小败在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值