zoukankan      html  css  js  c++  java
  • Python基础学习(三)

    了解了Python的基础使用,接下来继续练手廖雪峰老师的教学案例。

    一、变量可以指向函数

      说明,一个函数可以赋值给一个变量,该变量就会具有该函数的功能,举例:

    gg = abs
    print( gg(-10) )
    

      输出:10

      函数名也是变量

      比较神奇的是将函数名赋值一个其他类型的数据,竟然也是可以的。

    abs = 10
    print( abs )
    

      输出:10

    另外如果继续 执行 print( abs(-10)  ) 是会报错的,为什么呢,因为abs 已经是整型了,而不是一个函数了。(在开发中不要这样写!)

    因为 abs 函数实际上是定义在 import  builtins 模块中,所以要修改 abs 变量的指向在其他模块也生效,就需要改 模块中的定义,将abs指定某一个变量。 import builtins; builtins.abs = 10.

      传入参数

      说明:由于一个变量可以接收 一个函数,所以在写方法传参的时候也是可以传递函数的用变量接收一个函数。案例:

    def test( a, b, c ):
        print( c(a), c(b) )
    
    test( -10, -9, abs )
    

      输出:10 9

      说明:是不是很神奇。

    二、map reduce 

      python内置了map() 和 reduce() 函数

      map()接收两个参数,一个是函数,一个是Iterable,map可以将传入的函数依次作用到序列的每一个元素上,并把结果作为一个新的Iterator返回, 案例:

    def fun(x):
        return x*x
    
    print( list(map(fun, [1,2,3,4,5])) )
    

      输出:[1, 4, 9, 16, 25]

      说明:map返回的是一个对象

    print( list(map(str, [1,2,3,4])))
    

      输出:['1', '2', '3', '4']

      Reduce

       reduce 它会接收两个参数,reduct 把结果继续和序列的下一个元素做累计计算,例如:

    from functools import reduce
    def fun(x, y):
        return x * 10 + y
    
    result = reduce( fun, [1,2,3,4,5] )
    
    print( result )
    

      输出结果:12345

      说明,它会将多次调用函数的结果在累加起来,这样就成了 12345

    from functools import reduce
    def fun(x, y):
        return x * 10 + y
    
    def char2num(s):
        digits = {'0':0, '1':1, '2':2, '3':3}
        return digits[s]
    
    result = reduce( fun, map(char2num, '32') )
    

      说明:这个案例是通过字符串也可以是list 则通过 map 可以单个循环字符串元素,达到获取单个数据 最后通过 fun 函数依次获取 map 中的 list 数据 结合成 整型,从而达到将字符串转换成整型的一个效果。

      输出:32

      Filter

      filter 和 map 类似, filter 同样是接收一个函数 和 一个序列,和 map 不同的是 filter 把传入的函数依次作用于每个元素,然后根据返回值是 true 或者 false 决定是否保留元素。

      案例:

    def is2(n):
        return n % 2 == 0
    
    result = list( filter(is2, [1,2,3,4,5,6,7,8,9,10]) )
    print( result )
    

      返回结果:[2, 4, 6, 8, 10]

      另一个案例,将一个序列中的空字符串删掉:

    def not_empty( s ):
        return s and s.strip()
    result = list( filter(not_empty, ['a', '', 'c', None, 'e', ' ']) )
    print( result )
    

      输出:['a', 'c', 'e']

      说明:由此可见filter() 这个高阶函数,关键字于正确实现一个“筛选”函数功能

         注意到filter()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。

      Sorted

      sorted 函数可以对list进行排序

    #正着取 按ASCLL吗大小取
    print( sorted(['c', 'a', 'b']))
    
    #按ASCLL码大小取
    print( sorted(['C', 'c', 'A', 'a', 'B', 'b']))
    
    #正着取
    print( sorted(['C', 'c', 'A', 'a', 'B', 'b'], key=str.lower))
    
    #取反的
    print( sorted(['C', 'c', 'A', 'a', 'B', 'b'], key=str.lower, reverse = True))
    

      输出:

          ['a', 'b', 'c']
          ['A', 'B', 'C', 'a', 'b', 'c']
          ['A', 'a', 'B', 'b', 'C', 'c']
          ['C', 'c', 'B', 'b', 'A', 'a']

      说明:默认情况下,对字符串排序,是按照ASCLL码的大小比较的,由于大Z 小于 小a  所以大写的Z 会排在小写字母a的前面。

         另外,如果忽略大小写可以使用 key=str.lower 则 从小到大排

          

  • 相关阅读:
    C语言:通过函数指针来完成两个数的加减乘除(函数指针当做参数使用)
    C语言:通过函数指针来完成两个数的加减乘除
    C语言:通过指针函数输出二维数组中每个学生的成绩
    C语言:通过指针对字符串进行拼接
    C语言:通过指针对数组元素进行排序
    C语言:通过返回指针的形式找出数组的最大值和最小值
    C语言:十进制进制转换为其他进制(思想:查表法)
    C语言:其他进制转换为十进制(方法二)
    C语言:其他进制数转换为十进制(方法一)
    socket programming Max size of tcp/ip socket Buffer?
  • 原文地址:https://www.cnblogs.com/dump/p/9513140.html
Copyright © 2011-2022 走看看