python基础教程lesson9

作者: laokou 分类: 水处理 发布时间: 2017-11-08 13:19
#开始进阶啦,函数式编程
#函数式编程开始-。-
print("函数参数中包含函数,以前说过,这次测试一下")
def double(fun,x):
        return fun(x)*2
def sq(x):
        return x*x
print(double(sq,4))
#注意:1、两个函数不是嵌套关系
#2、调用时先调用fun(x) 返回一个值,再操作后重新返回
#3、正是因为两个函数不是嵌套关系,所以带函数为参数的函数可以灵活调用任意函数再加工
#如果是嵌套,直接一个函数给其返回值就可以了
#比如:
def cu(x):
    return x*x*x
print(double(cu,5))
print("这样double函数就非常灵活,任意函数再加工,不需要了解以前函数的组成(只要其有返回值)")
print(double(sum,([2,3,4,5,6])))
print("不需要了解sum的组成,其本身为合计,再乘以2返回")
print("注意,这个sum里面的参数用【】圈起来,因为其参数是一个列表")
print("这样可以利用内置函数进行自己组合啦")
print("函数有一种区分方法,分别为纯函数与 非纯函数")
print("依赖IO,随机数,时间等的是非纯函数,比如print本身")
print("像给定参数值返回一个数值,比如上面那种return x*x的就是纯函数啦")
#-----------------------------------------------------------
print("下面有一个有意思的东西啦,叫lamabda")
print("lambda直接返回一个值,比如:",(lambda x:x*2)(5))
print("注意,直接调用的方法,一个()里是lambda的表达式,然后跟着一个()是参数")
print("或者用赋值的方式")
tmp=lambda x:x*2
print(tmp(5))
print("注意:1、赋值的时候没有(),直接是一个变量,这个变量其实是一个函数")
print("也就是说lamba表达式(后面没有赋值)会返回一个函数给一个变量")
print(type(tmp))
print("-------------------重点来啦-------------------")
print("1、试验返回一个函数给一个变量是否可行,我们试一下")
print("2、试验函数方式实现lambda,看其共同点与区别")
print("第二个看着简单,先试验第二个")
def tmp2(x):
    return x*2
print(type(tmp2),"可以看出这点是相同的")
try:
    print(type(tmp2()))
except:
    print("如果看到这句话说明测函数的类型时,如果函数要求传参,而type里没有,会报错")
try:
    print(type(tmp()))
except:
    print("如果看到这句话,说明lambda也是一样,需要传参,不传参就会报错")
print("目前来看lambda和定义函数相似")
print("我们继续试验怎么返回一个函数")
def tmp2():
    def tmp3(x):
        return x*2
    return tmp3
tmp5=tmp2()
print(type(tmp5))
try:
    print(type(tmp5()))
except:
    print("必须有参数")
print("看来是可以的啦,哈哈")
print("刚试验了一下,对于三种不同的方式比较内容有点复杂,单独列一个环节")
print("-------------------继续-------------------")
print("有一个有用的函数 map,实现遍历功能,结合函数使用")
def ret(x):
    return x
list1=[1,2,3,4,5]
list2=list(map(ret,list1))
list3=map(ret,list1)
print(list2)
print(type(list3))
print("不太好玩,需要用一个list把返回的数组织起来")
print("map是怎么实现返回多个参数的呢?,还是说返回了一个列表?")
print("python2中可以把map返回给一个变量,python3必须用list圈起来了")
print("map的类型是map")
list5=list(map(lambda x:x,list1))
print(list5)
print("lambda可以嵌套在里面")
print("除了map外,还有filter")
list6=list(filter(lambda x:x<3,list1))
print(list6)
print("这些应该是处理数据用的,先记住")
print("-------------")
print("有一个yield的参数,配合for、while使用,替换函数的返回值")
def test():
    i=10
    while i>1:
        yield i
        i -=1
for i in test():
    print(i)
print("重点信息:函数不用返回值,for语句")
print("有一个递归很重要,以后讲解,这里简单介绍一下")
def addd(x):
    if x==1:
        return x
    else:
        return x*addd(x-1)
print(addd(10))
print("除了列表[],元组(),字典{}外,{}还有一种数据类型叫做集合")
sets={1,2,3,4,5}
print(type(sets))
print(sets)
print("集合有一个函数,叫set,参数为一个列表")
list=[2,3,4,5,6]
sets2=set(list)
print(sets2)
print("同列表,元组一样,可以用in来确定")
print("----------测试专用分割---------------")
list=[1,2,3,4,5]
tuple=(1,2,3,4,5)
dict={1:"one",2:"two",3:"three",4:"four",5:"five"}
set={1,2,3,4,5}
print(type(list),type(tuple),type(dict),type(set))
print(list,tuple,dict,set)
print(1 in list,1 in tuple,1 in dict,1 in set)
print("集合有一个重点内容,就是元素不能重复,如果重复自动去除重复项")
set2={1,1}
print(set2)
print("集合的另一个特性是排列按照从小到大")
set3={2,3,1,1}
print(set3)
print("即使集合的元素是字符串,也有一定的排序方式")
set4={"a","b"}
print(set4)
print("集合有自己的方法")
set3.add(9)
set3.remove(3)
print(set3)
print("两个set可以有各种方法,返回新set,比如|或,&和")
set1={1,2,3,4}
set2={3,4,5,6}
print(set1|set2,set1&set2,set1-set2,set2-set1,set1^set2)