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']
相关推荐
夜斗不是神 2020-11-17
huavhuahua 2020-11-20
Yasin 2020-11-16
xiaoseyihe 2020-11-16
千锋 2020-11-15
diyanpython 2020-11-12
chunjiekid 2020-11-10
wordmhg 2020-11-06
YENCSDN 2020-11-17
lsjweiyi 2020-11-17
houmenghu 2020-11-17
Erick 2020-11-17
HeyShHeyou 2020-11-17
以梦为马不负韶华 2020-10-20
lhtzbj 2020-11-17
pythonjw 2020-11-17
dingwun 2020-11-16
lhxxhl 2020-11-16