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 则 从小到大排
Python基础学习(三)的更多相关文章
- Python基础学习三
Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置 ...
- 【Python基础学习三】数字(Number)
Python Number 数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间. Python 四种数值类型: 整型(Int) - 通常 ...
- Python基础学习三 list-增删改查、切片、循环、排序
一.list 增删改查 1.增加 方式一: stus = ['xiaohei','xiaobai','xiaohuang','cxdser'] stus.append('test001')#从最后面开 ...
- Python基础学习三 文件操作(一)
文件读写 r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[不可读: 不存在则创建:存在则只追加内容:] r+,[可读.可写:可追加,如果打开的文件不存 ...
- Python基础学习三 字符串
字符串方法 slit = ['a', 'b', 'c', 'd', 'f', 'g'] s2='hhhhhhhhhh' tu = (1,2,3,4,5) d={'name':'nnn','age':1 ...
- Python基础学习三 字典、元组
一.元组 元组,提示别人,这个值是不能被改变的,元组的定义方式是用(),小括号: 元组只有两个方法,那就是count和index mysql1 = ('127.0.0.1',3306,'my','ro ...
- Python入门基础学习 三
Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...
- Day1 Python基础学习
一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作 ...
- Python基础学习总结(持续更新)
https://www.cnblogs.com/jin-xin/articles/7459977.html 嗯,学完一天,白天上班,眼睛要瞎了= = DAY1 1,计算机基础. CPU:相当于人的大脑 ...
- Day1 Python基础学习——概述、基本数据类型、流程控制
一.Python基础学习 一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编 ...
随机推荐
- 升级webpack2
更新:webpack3已经出来了,官方说从2到升级到3不用改一行配置,98%的人没有错误. 项目中用的是webpack1.webpack2已经出来一段时间了.决定升级.其实改动不是很大.修改加测试共花 ...
- TLV5620参考电压的问题
1. TLV5620参考电压的,上面红线的VID的意思应该是引脚(REFA-REFD)输入的电压值(3.3V),下面的应该是实际参考值,根据实际测试VID=3.3V的时候,Vref=2.2V,至于为什 ...
- JavaScript实现选项卡(三种方法)
本文实例讲述了js选项卡的实现方法. 一.html代码: <div id="div1"> <input class="active" type ...
- [JOI2017春季合宿]Port Facility[set、二分图]
题意 你有两个栈,有 \(n\) 个货物,每个货物有一个进栈时间和出栈时间(所有时间的并集是1~2n),问有多少种不同的入栈方案. \(n\le 10^6\) 分析 把每个货物的存在看成区间,相交的区 ...
- [UOJ#268]. 【清华集训2016】数据交互[动态dp+可删堆维护最长链]
题意 给出 \(n\) 个点的树,每个时刻可能出现一条路径 \(A_i\) 或者之前出现的某条路径 \(A_i\) 消失,每条路径有一个权值,求出在每个时刻过后能够找到的权值最大的路径(指所有和该路径 ...
- linux下如何解除被占用的端口号
在本例中,假设8080端口被占用. 1.查看8080端口是否被占用: netstat -anp | grep 8080输出结果:tcp 0 0 :::8080 ...
- 【技巧】如何清空SQLServer的日志文件
一.应用场景 在一次项目实施的过程中,发现一个小问题,在开发环境中备份下来的数据库大约15G,压缩后更小一些,但是在另外一台设备上部署的时候,发现总是提示空间不足.通过查询发现数据库的日志文件比较大, ...
- Postman安装与入门使用
Postman官方下载地址:https://www.getpostman.com/apps Postman 是一个很强大的 API调试.Http请求的工具.我们可以用来很方便的模拟get或者post或 ...
- Jenkins邮件通知
Jenkins邮件通知 Jenkins 配备了一个开箱工具,添加一个电子邮件通知的构建项目. 第1步 - 配置SMTP服务器. 转到 Manage Jenkins → Configure System ...
- hyperledger-fabirc1.2-ca-server的生产示例
hyperledger-fabirc1.2-ca-server的生产示例,带TLS 在fabirc-samples/first-network中启动网络,其ca证书是利用crypto的工具生成的,但是 ...