专栏首页python3python学习笔记 函数

python学习笔记 函数

一等函数

在python中,函数是一等对象。编程语言理论家把“一等对象”定义为满足以下条件的程序实体:

  • 在运行时创建
  • 能赋值给变量或数据结构中的元素
  • 能作为参数传给函数
  • 能作为函数的返回结果

在python中,整数、字符串和字典都是一等对象,没有什么特别之处。

标题“一等函数”是“把函数视作一等对象”的简称,虽然并不完美,但只是一种称谓。

>>> def factorial(n):
...     '''returns n'''
...     return 1 if n < 2 else n * factorial(n - 1)
...
>>> factorial(42)
1405006117752879898543142606244511569936384000000000
>>> type(factorial)
<class 'function'>
>>> fact = factorial
>>> fact
<function factorial at 0x00000228D7391EA0>
>>> fact(5)
120
>>> map(factorial, range(11))
<map object at 0x00000228D92236D8>
>>> list(map(factorial, range(11)))
[1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]
>>>

程序中定义了一个阶乘函数 factorial, 其本身是一个递归函数,可以理解为函数可以作为函数的返回值(的一部分),可以做正常运算,也可以复制给另一个变量fact,也可以作为高等函数map 的一个参数。

高等函数

接受函数作为参数,或者把函数作为结果返回的函数是高等函数

python中常用的高等函数包括map, filter, sorted, reduce等等

>>> fruits = ['strawberry', 'apple', 'banana', 'peach', 'fig', 'cherry']
>>> sorted(fruits)
['apple', 'banana', 'cherry', 'fig', 'peach', 'strawberry']
>>> def reverse(word):
...     return word[::-1]
...
>>> reverse('testing')
'gnitset'
>>> sorted(fruits, key=reverse)
['banana', 'apple', 'fig', 'peach', 'strawberry', 'cherry']

sorted 是一个高级函数,其可以接受函数 reverse 作为参数

>>> from functools import reduce
>>> from operator import add
>>> reduce(add, range(100))
4950
>>> sum(range(100))
4950

从python3.0 起,reduce不再是内置函数,其作用被减弱,可轻易被替代。上例是计算0~99 的和。sum 和 reduce 的通用思想是把某个操作连续运用到序列的元素上,累积计算,把一系列值规约成一个值。

匿名函数

lambda关键字在python表达式内创建匿名函数

然而,python简单的句法限制了 lambda 函数的定义体只能使用纯表达式,即lambda 函数的定义体中不能赋值,不能使用while、try等python语句。

匿名函数适合用于作为函数的参数

>>> fruits
['strawberry', 'apple', 'banana', 'peach', 'fig', 'cherry']
>>> sorted(fruits, key=lambda word: word[::-1])
['banana', 'apple', 'fig', 'peach', 'strawberry', 'cherry']

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python语法之函数

    函数:   将特定功能代码编写在一个函数里   便于阅读和复用   对一组表达特定功能表达式的封装   使程序模块化 python内置函数:   ...

    py3study
  • python高阶函数

    高阶函数定义: 1.函数接收的参数是一个函数名; 2.函数返回的是一个函数名; 只要满足上述条件中的任意一个条件的函数均属于高阶函数

    py3study
  • 谈谈自己的理解:python中闭包,闭包

    闭包这个概念好难理解,身边朋友们好多都稀里糊涂的,稀里糊涂的林老冷希望写下这篇文章能够对稀里糊涂的伙伴们有一些帮助~

    py3study
  • Lua 5.3 的调试库

    如果 message 有,且不是字符串或 nil, 函数不做任何处理直接返回 message。 否则,它返回调用栈的栈回溯信息。 字符串可选项 message ...

    bering
  • 人工智能|神经网络中的激活函数

    激活函数是深度学习,也是人工神经网络中一个十分重要的学习内容,对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有非常重要的作用。那么,激活函数的作用...

    算法与编程之美
  • Python中的函数式编程教程,学会用一行代码搞定

    在本文中,您将了解什么是函数范型,以及如何在Python中使用函数式编程。在Python中,函数式编程中的map和filter可以做与列表相同的事情。这打破了P...

    HuangWeiAI
  • 这些年,你们一起踩过的坑(2)

    上次我们踩坑总结文章 这些年,你们一起踩过的坑(1) 受到了不少同学的认可。我也确信文中所涉及的问题是非常具有普遍性的,对绝大多数初学者都会有帮助。

    Crossin先生
  • 啊,函数呐!!!

    一份需要你补充完整的函数导图!我还是一个初学者,这篇文章是我所知道的所有关于函数的知识,如有不完善或者错误,希望能够在评论下方指出,哈哈哈,大神勿喷。

    sunseekers
  • 11g中利用listagg函数实现自动拼接INSERT语句

    本来今天想继续写另一篇外传,但总是熬这么晚不是个事儿,况且今儿北京又输了,恨铁不成钢,堵得慌。。。

    bisal
  • 深度学习中【激活函数】存在的意义是什么?

    在深度学习网络中,我们经常可以看到对于某一个隐藏层节点的激活值计算一般分为两步,如下图:

    ShuYini

扫码关注云+社区

领取腾讯云代金券