我是靠谱客的博主 含蓄诺言,最近开发中收集的这篇文章主要介绍Python高级编程--01一等函数函数似为对象高阶函数列表推导 vs map、filter、reduce可调用对象接受任意参数的函数,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
一等函数
在 Python 中,函数是一等对象。编程语言理论家把“一等对象”定义为满足下述条件的程序实体:
在运行时创建
能赋值给变量或数据结构中的元素
能作为参数传给函数
能作为函数的返回结果
有了一等函数,就可以使用函数式风格编程。函数式编程的特点之一是使用高阶函数
函数似为对象
python中几乎所有东西都是对象,对象拥有属性和方法
def factorial(n):
"""
return n!
""""
return 1 if n<2 else n*factorial(n-1)
"""
factorial.__doc__
'n return n!n'
print(type(factorial))
<class 'function'>
f(5)
120
list(map(f, range(6)))
https://www.runoob.com/python/python-func-map.html
[1,1,2,6,24,120]
"""
高阶函数
usernames = ["sophia", "emma", "olivia", "ava", "mia", "isabella", "zoe"]
sorted(usernames, key=len)
'''
['ava', 'mia', 'zoe', 'emma', 'sophia', 'olivia', 'isabella']
'''
sorted(usernames, key=lambda x: x[0])
'''
['ava', 'emma', 'isabella', 'mia', 'olivia', 'sophia', 'zoe']
'''
列表推导 vs map、filter、reduce
list(map(f, range(6)))
'''
[1,1,2,6,24,120]
'''
[f(n) for n in range(6)]
'''
[1,1,2,6,24,120]
'''
list(map(f,filter(lambda n:n%2,range(6)))
'''
筛选[0:6]之间的偶数,然后当做参数传给f函数
[1,6,120]
'''
[f(n) for in range(6) if %2]
'''
相同的效果,不同的实现
[1,6,120]
'''
from functools import reduce
from operator import add
reduce(add,range(10))
'''
45
'''
可调用对象
不仅 Python 函数是真正的对象,任何 Python 对象都可以表现得像函数。为此,只需实现实例方法 call。
import random
class Surprise:
#初始化准备
def __init__(self, items):
self._items = list(items)
#输入list随机排序
random.shuffle(self._items)
def pick(self):
try:
#pop将list最后一位删除,并打印出来
print(self._items.pop())
return self._items.pop()
except IndexError:
raise
def __call__(self):
return self.pick()
#自动调用call方法,最后的()不带的话不显示print结果
Surprise(["dark chocolate", "milk", "white", "alcoholic"])()
运行结果:
'alcoholic'
接受任意参数的函数
- 任意数量的位置参数
def avg(first, *rest):
print(rest, type(rest))
print((first + sum(rest)) / (1 + len(rest)))
return (first + sum(rest)) / (1 + len(rest))
avg(1, 2, 3, 4)
运行结果:
(2, 3, 4) <class 'tuple'>
2.5
- 任意数量的关键字参数
def kws_f(**kwargs):
print(kwargs, type(kwargs))
kws_f(a=1, b=2, c=3)
运行结果:
{'a': 1, 'b': 2, 'c': 3} <class 'dict'>
- 综合应用
# 生产HTML标签
def make_element(name, *contents, cls=None, **attrs):
if cls:
attrs['class'] = cls
pairs = [f"{attr}={value}" for attr, value in attrs.items()]
attr_str = ' '.join(pairs)
if not contents:
return f"<{name} {attr_str}/>"
elements = [f"<{name} {attr_str}>{content}</{name}>" for content in contents]
return 'n'.join(elements)
make_element('img', cls='pic-frame', src='a.jpg')
'''
'<img src=a.jpg class=pic-frame/>'
'''
print(make_element('item', *usernames, size='small', quantity='1'))
'''
<item size=small quantity=1>sophia</item>
<item size=small quantity=1>emma</item>
<item size=small quantity=1>olivia</item>
<item size=small quantity=1>ava</item>
<item size=small quantity=1>mia</item>
<item size=small quantity=1>isabella</item>
<item size=small quantity=1>zoe</item>
'''
最后
以上就是含蓄诺言为你收集整理的Python高级编程--01一等函数函数似为对象高阶函数列表推导 vs map、filter、reduce可调用对象接受任意参数的函数的全部内容,希望文章能够帮你解决Python高级编程--01一等函数函数似为对象高阶函数列表推导 vs map、filter、reduce可调用对象接受任意参数的函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复