#!/usr/bin/env python3
# -*- coding:utf-8 -*-

# 高阶函数-小结
# 把函数作为参数传入，这样的函数称为高阶函数，函数式编程就是指这种高度抽象的编程范式。

print(abs(-1))
print(abs)
f = abs
print("f =", f)
print("f(-10) =", f(-10))
# 由于abs函数实际上是定义在import builtins模块中的，所以要让修改abs变量的指向在其它模块也生效，要用import builtins; builtins.abs = 10。
# 既然变量可以指向函数，函数的参数能接收变量，那么一个函数就可以接收另一个函数作为参数，这种函数就称之为高阶函数。
# 例如：一个简单的高阶函数：
def add(x, y, f):
    return f(x) + f(y)
print(add(1, -5, abs)) # 6

'''
a = 3
a, b = 1, a
print('a=',a,'\n''b=',b)

输出：a= 1
      b= 3

如果按正常思维肯定是先将1赋值给a，然后再将a值赋给b，实际上也确实是这样的，但是前面提到这样赋值其实右边相当于一个元组tuple，
而tuple中的元素是不变的，所以后面的b=a中的a相当于t(1)是不变的,是前面a=3就已经确定好的，就是说a, b = 1, a这条语句是先执行右边即先创建一个元组，
然后再是分为两条语句执行的先将1赋值给a，然后将元组中的a赋值给b
'''