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

一、变量可以指向函数

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

  1. gg = abs
  2. print( gg(-10) )

  输出:10

  函数名也是变量

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

  1. abs = 10
  2. print( abs )

  输出:10

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

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

  传入参数

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

  1. def test( a, b, c ):
  2. print( c(a), c(b) )
  3.  
  4. test( -10, -9, abs )

  输出:10 9

  说明:是不是很神奇。

二、map \ reduce 

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

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

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

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

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

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

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

  Reduce

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

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

  输出结果:12345

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

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

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

  输出:32

  Filter

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

  案例:

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

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

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

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

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

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

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

  Sorted

  sorted 函数可以对list进行排序

  1. #正着取 按ASCLL吗大小取
  2. print( sorted(['c', 'a', 'b']))
  3.  
  4. #按ASCLL码大小取
  5. print( sorted(['C', 'c', 'A', 'a', 'B', 'b']))
  6.  
  7. #正着取
  8. print( sorted(['C', 'c', 'A', 'a', 'B', 'b'], key=str.lower))
  9.  
  10. #取反的
  11. 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 则 从小到大排

      

Python基础学习(三)的更多相关文章

  1. Python基础学习三

    Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置 ...

  2. 【Python基础学习三】数字(Number)

    Python Number 数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间. Python 四种数值类型: 整型(Int) - 通常 ...

  3. Python基础学习三 list-增删改查、切片、循环、排序

    一.list 增删改查 1.增加 方式一: stus = ['xiaohei','xiaobai','xiaohuang','cxdser'] stus.append('test001')#从最后面开 ...

  4. Python基础学习三 文件操作(一)

    文件读写 r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[不可读: 不存在则创建:存在则只追加内容:] r+,[可读.可写:可追加,如果打开的文件不存 ...

  5. Python基础学习三 字符串

    字符串方法 slit = ['a', 'b', 'c', 'd', 'f', 'g'] s2='hhhhhhhhhh' tu = (1,2,3,4,5) d={'name':'nnn','age':1 ...

  6. Python基础学习三 字典、元组

    一.元组 元组,提示别人,这个值是不能被改变的,元组的定义方式是用(),小括号: 元组只有两个方法,那就是count和index mysql1 = ('127.0.0.1',3306,'my','ro ...

  7. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  8. Day1 Python基础学习

    一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作 ...

  9. Python基础学习总结(持续更新)

    https://www.cnblogs.com/jin-xin/articles/7459977.html 嗯,学完一天,白天上班,眼睛要瞎了= = DAY1 1,计算机基础. CPU:相当于人的大脑 ...

  10. Day1 Python基础学习——概述、基本数据类型、流程控制

    一.Python基础学习 一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编 ...

随机推荐

  1. 矩阵乘法&&矩阵快速幂&&最基本的矩阵模型——斐波那契数列

    矩阵,一个神奇又令人崩溃的东西,常常用来优化序列递推 在百度百科中,矩阵的定义: 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合 ,最早来自于方程组的系数及常数所构成的方阵.这一 ...

  2. 列表生成式+过滤器(filter)+映射(map)+lambda总结

    这些都是python的特色,不仅强大,而且好用,配合起来使用更是无敌. 零.lambda lambda用于产生一个匿名表达式,组成部分为:lambda + ‘函数表达式’ ‘函数表达式’由一个冒号加上 ...

  3. QT要点

    1. QT设计器最终会被解释为ui_**.h. 2. QString与init之间的转换: QString转int: bool bIsOk; int a = str.toInt( &bIsOk ...

  4. ES6 之reduce的高级技巧

    reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值.reduce() 方法接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 ...

  5. JavaWeb项目学习教程(1) 准备阶段

    写在最前面 为什么要写一个这样的教程?作为一个软件工程专业的学生,上课老师讲得飞快,几乎都是在课后自己消化,我知道学习记录的重要性.我自己本身还有很多很多基础的东西都没有学会,比较博客园的人有很大的差 ...

  6. python 游戏(船只寻宝)

    1. 游戏思路和流程图 实现功能:船只在可以在大海上移动打捞宝藏,船只可以扫描1格范围内的宝藏(后续难度,可以调整扫描范围,可以调整前进的格数) 游戏流程图 2. 使用模块和游戏提示 import r ...

  7. vue入门全局配置

    全局配置 Vue.config 是一个对象,包含 Vue 的全局配置.可以在启动应用之前修改下列属性: silent 类型:boolean 默认值:false 用法: Vue.config.silen ...

  8. Final阶段用户使用报告

    此作业要求参见:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2477] 组名:可以低头,但没必要 组长:付佳 组员:张俊余 李文涛 孙 ...

  9. 关于增强的for循环

    增强的for循环例子:public static<AnyType> void print(Collection<AnyType> coll){ for(AnyType item ...

  10. grunt入门讲解1:grunt的基本概念和使用

    Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.老版本的 Node. ...