定义:“能接受另一个函数作为参数的函数,称为高级函数”。
map&reduce
1、“map(function_name, Iterable_object)”,“map()”返回的是一个“Iterator”对象,而这个“Iterator”对象所做的运算,由传入的“function_name”所指向的函数决定。
2、“reduce(function_name, Iterable_object)”,“reduce()”返回的是一个经过“function_name”所指函数运算的“value”。
from functools import reduce
def normalize(str_name):
return str_name[0].upper() + str_name[1:].lower()
list_name1 = ['adam', 'LISA', 'barT']
list_name2 = list(map(normalize, list_name1))
print(list_name2)
print()
def prod_operation(x, y):
return x * y
def prod(list_name):
return reduce(prod_operation, list_name)
print(prod([3, 5, 7, 9]))
print()
def StringToFloat(str_name):
def function_integer(x, y):
return x * 10 + y
def function_float(x, y):
return 0.1 * x + y
def CharacterToNumber(char_name):
return int(char_name)
float1 = reduce(
function_integer, map(
CharacterToNumber, str_name[:str_name.find('.')]))
float2 = 0.1 * reduce(
function_float, map(
CharacterToNumber, str_name[:str_name.find('.'):-1]))
return float1 + float2
str_name = '123.456'
float_name = StringToFloat(str_name)
print(float_name)
print(type(float_name))
filter
1、“filter”和“map”相类似,都是对一个“list”中的所有元素做“function”的运算,但是“filter”会根据“function”的返回值去决定留下或者删去元素,也就是“过滤”。
2、“bool(None)”的结果是“False”,所以在下面第二个例子中,除了“A”、“b”、“C”之外的所有元素才会删除。
def is_odd(number):
return number % 2 == 1
def not_empty(str_name):
return str_name and str_name.strip()
print(list(filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9])))
print(list(filter(not_empty, ['A', ' ', 'b', None, 'C', ''])))
def _odd_iter():
n = 1
while True:
n += 2
yield n
def _not_divisible(n):
return lambda x: x % n > 0
def primes():
yield 2
it = _odd_iter()
while True:
n = next(it)
yield n
it = filter(_not_divisible(n), it)
for n in primes():
if n < 1000:
print(n)
else:
break
def is_palindrome(n):
s = str(n)
if int(s[::]) == int(s[::-1]):
return True
output = filter(is_palindrome, range(1, 1000))
print('1~1000:', list(output))
sorted
1、“sorted”是排序,可以快速对“list”里的元素进行排序。但是“list”的元素必须类型相近,否则会出现无法排序。比如浮点数和整数类型本质上都是数字,可以;字符串与字符串,可以;但是浮点数和字符串不可以。
2、作为高阶函数,“key=”就是做排序的依据函数的调用处。
list_name = [-11, -2, -3, 4, 1]
print(sorted(list_name))
print(sorted(list_name, key=abs))
print(sorted(list_name, reverse=True))
print(sorted(list_name, key=abs, reverse=True))
list_name1 = ['a', 'A', 'b', '1', 1, 0, 'OK', None, 0.5]
print(sorted(list_name1))