#!/user/bin/env python
# -*- coding:utf-8 -*-
# 1.函数递归调用,函数返回值如果是另一个函数,而不是一个确切值,返回的则是这个函数的地址,需要我们加上()后才可以调用使用,
# name="ceshi"
# def hs1(x):
# print(x)
# return hx #这里返回的就是一个调用的函数。
# def hx():
# print("我是韩系")
# c=hs1("hangsna")
# print(c)
# 例2:
# name="text"
# def tx(x):
# print(x)
# return ty
# def ty():
# name="ty"
# print(name)
# z=tx(name)
# q=z()
# print(q)#text 、ty、None因为ty没有返回值所以会返回一个none。
# 2.匿名函数,没有名称的函数,优点是不占用内存空间,只有在调用的时候才会占用内存。匿名函数以lambda起始定义。
# 例:
# name="aliex"
# fun =lambda name:name+"sb"
# print(fun(name))
# 7.一个例题:数字列表[1,2,6,9,15]把列表里的数字变为平方做为一个新的列表输出。
# 普通实现方式
# li1=[1,2,6,9,15]
# li2=[]
# for i in li1:
# i=i**2
# li2.append(i)
# # print(i)
# print(li2)
# 函数实现方式
# li1=[1,2,6,9,15]
# def add_one(x):
# return x+1
# def test(gn,y):
# li2=[]
# for i in y:
# z=gn(i)
# li2.append(z)
# return li2
# li3=test(add_one,li1)
# print(li3)
# map() lambda 实现方式
# li1=[1,2,6,9,15]
# map_test=list(map(lambda x:x**2,li1))
# print(map_test)
# map其它地方上的实现
# a="hellowword"
# res=set(map(lambda x:x.upper(),a))
# print(res) #map输出的是一个迭代器,需要有个转换,把数据取出。在python2.0输出的都直接是列表
# filter高阶函数的用法
# zi=["zs_sb","xz_sb","zee","zx_sb"]
# fs=list(filter(lambda z:not z.endswith("sb"),zi))
# fl=list(filter(lambda z:z.endswith("sb"),zi))#把符合某条件的元素取出来,组成新的迭代,用list取出成列表。 not是取反把不符合的
# #元素取出来
# print(fs)
# print(fl)
# from functools import reduce
# num1=[1,2,3,100]
# int2=reduce(lambda x,y:x+y,num1,0)
# print(int2)
# int3=reduce(lambda x,y:x*y,num1,1)
# print(int3)
# int4=reduce(lambda x,y:x+y,range(1,100),0)
# print(int4)
# i =0
# y=0
# while i <100:
# y = y+i
# i +=1
# print(y) #验证1到100之间的和 和reduce函数的结合生成