我是靠谱客的博主 含蓄诺言,最近开发中收集的这篇文章主要介绍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可调用对象接受任意参数的函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部