2020-12-10

函数

在python中一切都可以视作为对象,包括函数def function_try():’’‘it is funciton try doc’’‘print(‘function_try doc’)if name == “main”:# __doc__属性用于生成对象的帮助文本print(function_try.doc)# __name__则是输出了具体的函数名print(function_try.name)我们还可以将函数名赋值给变量,通过变量的形式来访问。def function_try():’’‘it is funciton try doc’’‘print(‘function_try doc’)if name == “main”:fun = function_try# __doc__属性用于生成对象的帮助文本print(fun.doc)# __name__则是输出了具体的函数名print(fun.name)函数也可以通过参数被传递给另外一个函数。def function_try():’’‘it is funciton try doc’’'print(‘function_try doc’)def function_try1(func):print(func.doc)print(func.name)func()if name == “main”:fun = function_tryfunction_try1(fun)高阶函数接受函数为参数,或者把函数作为结果返回的函数是高阶函数map函数def cube(x):return x * xdata = map(cube, range(1, 11))print(list(data)) # 此处要加listdef add_num(n):return n + 1print(list(map(add_num, range(1, 6))))再看几个例子:result = [‘1’, ‘2’, ‘3’]print(list(map(int, result))) # [1, 2, 3]# 也可以用列表推导式print([int(i) for i in result])t = ((1, ‘a’), (2, ‘b’))print(type(t))print(dict(t))print(dict((y, x) for x, y in t))# map方法# print(dict(map(None, t))) # 这个python3已废弃print(dict(map(reversed, t)))filter函数Filter的作用在于根据第一个参数为true还是false来进行过滤。下面例子中将大于3的数值过滤出来。s = [1, 2, 3, 4, 5]print(list(filter(lambda x: x > 3, s)))# [4, 5]reduce函数就是将参数累加的应用于函数中。就好比我们要对1到100进行求值。代码如下。效果等同于sum(range(100))# python3 已经将reduce移到functools模块中from functools import reducefrom operator import addprint(reduce(add, range(100)))lambda 函数这是Python支持一种有趣的语法,它允许你快速定义单行的最小函数例子:g = lambda x: x * 2print(g(3))# 相等于下面的表达式print((lambda x: x * 2)(3))D = {‘jack’: 23, ‘rose’: 21, ‘flank’: 22}value_sort = sorted(D.items(), key=lambda d: d[1]) # 值(value)排序print(value_sort)# [(‘rose’, 21), (‘flank’, 22), (‘jack’, 23)]key_sort = sorted(D.items(), key=lambda d: d[0]) # 按键(key)排序按print(key_sort)# [(‘flank’, 22), (‘jack’, 23), (‘rose’, 21)]key_reverse = sorted(D.items(), key=lambda d: d[0], reverse=True) # 按键(key)降序print(key_reverse)# [(‘rose’, 21), (‘jack’, 23), (‘flank’, 22)]# 值(value)降序value_reverse = sorted(D.items(), key=lambda d: d[1], reverse=True)print(value_reverse)# [(‘jack’, 23), (‘flank’, 22), (‘rose’, 21)]python lambda是在python中使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python lambda还有哪些和def不一样呢?1 python lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量。2 python lambda它只是一个表达式,而def则是一个语句。下面是python lambda的格式,看起来好精简阿。lambda x: print xlambda表达式在“:”后只能有一个表达式。也就是说,在 def中,用return可以返回的也可以放在lambda后面,不能用return返回的也不能定义在python lambda后面。因此,像if或for或print这种语句就不能用于lambda中,lambda一般只用来定义简单的函数。下面举几个python lambda的例子吧单个参数的:g = lambda x:x*2print(g(3))# 结果是62.多个参数的:m = lambda x,y,z: (x-y)zprint(m(3,1,2))#结果是4sorted函数sorted是另外返回一个排序后的列表,原列表fruits并没有发生改变fruits = [‘strawberry’, ‘fig’, ‘apple’, ‘cherry’, ‘rasberry’, ‘banana’]ret = sorted(fruits, key=len)print(‘before sorted %s’ % fruits)# before sorted [‘strawberry’, ‘fig’, ‘apple’, ‘cherry’, ‘rasberry’, ‘banana’]print(‘after sorted %s’ % ret)# after sorted [‘fig’, ‘apple’, ‘cherry’, ‘banana’, ‘rasberry’, ‘strawberry’]与它很相像的sort函数,看下面的例子:a = [5, 4, 3, 2, 1]sorted(a) # 将a从大到小排序,不影响a本身结构print(“a=”, a) # a= [5, 4, 3, 2, 1]a.sort() # 将a从小到大排序,影响a本身结构print(a) # [1, 2, 3, 4, 5]b = a.sort()print(“b=”, b) # b= Nonec = [‘aa’, ‘bb’, ‘BB’, ‘CC’, ‘zz’]print(sorted©)# 按列表中元素每个字母的ascii码从小到大排序# 如果要从大到小,请用sorted(b,reverse=True)# [‘BB’, ‘CC’, ‘aa’, ‘bb’, ‘zz’]call__方法前面介绍到可以把函数当做对象。那么我们可以像调用函数那样调用类么。答案是肯定的。只需要我们重写类中的__call__就可以了class function_try(object):def init(self, value):self.data = valuedef call(self, *args, **kwargs):print(‘function try was called’)for a in args:print(a)if name == “main”:f = function_try(3)f(‘hello’, ‘world’)除了__doc, __name__这些函数还有很多属性。可以用dir(func)的方法进行查看函数注解Python 3提供了一种句法,用于为函数声明中的参数和返回值附加元数据Python不做检查、不做强制、不做验证,什么操作都不做# def test(text, max_len=5):# 下面是python3 新写法def test(text: str, max_len: ‘int>0’ = 5) -> str:if len(text) > max_len:return "OK"text = “hello world”# print(len(text))a = test(text)print(a, type(a))print(test.annotations)#{‘text’: , ‘max_len’: ‘int>0’, ‘return’: }冻结参数的函数最后介绍一个可以冻结参数的功能。Functions.partial.在某些场景下,我们期望可以冻结一个参数,并将这个参数作用于其他参数。from functools import partialfrom operator import multriple = partial(mul, 3) # 将第一个参数固定为3print(triple(7)) # 73=21print(list(map(triple, range(1, 10)))) # 1,10分别和3相乘

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值