#嵌套函数
# name = '小圆圈'
# def change():
# name = '小圆圈学编程'
# print('第一层',name)
# change2() #可以直接调用外部函数
# print('第三层,小圆圈学编程很认真')
# def change2():
# name = '小圆圈学编程免费'
# print('第二层',name)
# change()
# print('第四层',name)
#嵌套函数,外部不可以直接调用内部嵌套的函数,只用外部函数执行了,内部函数才可以执行
# def calc(x):
# def inner():
# print(x+1)
# return inner
# # inner() #嵌套函数,外部不可以直接调用内部嵌套的函数
# print(calc(1)) #此时打印的是inner函数的内存地址
# calc(1)() #既然内存地址一样,此时的calc(1)相当属于是inner函数
# 写函数,专门计算图形的面积
# 其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积
# 调用函数area(‘圆形’,圆半径) 返回圆的面积
# 调用函数area(‘正方形’,边长) 返回正方形的面积
# 调用函数area(‘长方形’,长,宽) 返回长方形的面积
# def area(name,*args):
# def Rectangle(x,y):
# print('长方形的面积为:',x*y)
# def Square(x):
# print('正方形的面积为:',x*x)
# def garden(r):
# pi = 3.14159265
# print('圆形的面积为:',pi*r*r)
# if name == '长方形':
# Rectangle(*args) #在判断语句中,可以直接调用嵌套函数
# elif name == '正方形':
# Square(*args)
# elif name == '圆形':
# garden(*args)
# area('圆形',4)
# area('长方形',4,6)
# area('正方形',4)
#匿名函数
# lambda函数就是可以接受任意多个参数(包括可选参数)并且返回单个表达式值得函数
# 好处:
# 1.lambda函数比较轻便,即用即扔,适合完成只在一处使用的简单功能
# 2.匿名函数,一般用来给filter,map这样的函数式编程服务
# 3.作为回调函数,传递给某些应用,比如消息处理
# def calc(x,y):
# return x**y
# print(calc(2,8))
#
# c = lambda x,y:x**y
# print(c(2,8))
#通过函数实现
# def calc(x):
# return x**2
# res = map(calc,[1,2,3,4,5])
# for i in res:
# print(i)
#通过匿名函数实现
# res = map(lambda x:x**2 if x>3 else x**3,[1,2,3,4,5]) #匿名函数后面不能加条件循环
# for i in res: #最复杂的也至于三元运算
# print(i)
#
#三元运算
# name = 'walter'
# sex = None
# sex = 'male' if name=='walter' else 'female'
# print(sex)
#高阶函数:函数作为形参输入
#注意特征1.可以接受一个或者多个函数进行输入
#2.return 返回为另一个函数
# def get_abs(n):
# return int(str(n).strip('-'))#strip
# def add(x,y,f):
# return f(x) + f(y)
# res = add(3,-6,get_abs) #此时get_abs不能在()加了就是调用了
# print(res)
#如何通过函数去绝对值
# def get_abs(n):
# return int(str(n).strip('-'))#strip只限定字符串
# print(get_abs(-9))
#函数调用函数
# def get_abs(n):
# return int(str(n).strip('-'))
# def add(x,y,f):
# return f(x)+f(y)
# print(add(5,-10,get_abs))