函数进阶(三) day14
目录
昨日内容
迭代器
迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象
可迭代对象
含有__iter__的方法的数据类型
除了数字类型都是可迭代对象
迭代器对象
含有__iter__和__next__方法的数据类型
只有文件是迭代器对象
可迭代对象加上__iter__就是迭代器对象
for循环原理
lt = [1,2]
lt_iter = lt.__iter__()
while True:
try:
print(lt_iter.__next__())
except StopIteration as e:
break
三元表达式
条件成立 if条件 else 条件不成立
列表推导式
[i for i in range(10)]
字典生成式
{i:i for i in range(10)}
zip
把多个可迭代对象一次性读取每一个可迭代对象种的元素,拼成元素
生成器表达式
(i for i in range(10))节省空间
生成器
本质是迭代器,自定义迭代器,含有yield关键字的函数
def ge():
yield
yield
- 暂停函数
- 通过next取出一个yield的值
递归
函数调用函数本身,有退出条件
count = 0
def a():
global count
print(count)
if count = 100:
return
count += 1
a()
今日内容
匿名函数
lambda 参数:<代码块>
匿名函数一般不单独使用,和filter()/map()/sorted()/列表的sort()内置方法连用
sort/max /min
内置方法是原值排序
salary_dict = { 'nick':2000, 'wick':3000, 'jason':5000, 'egom':10000 } # 按照薪资排序 salary_list = list(salary_dict.items()) # 方法1 def func(i): return i[1] salary_list.sort(key=func) print(salary_list) # 方法2 salary_list.sort(key=lambda i:i[1]) print(salary_list)sorted
重新创建一个新的列表排序
salary_list = sorted(salary_list,key=lambda i:i[1],reverse = True)filter过滤筛选(迭代器)
判断匿名函数的返回值的真假,真则留下
print(list(filter(lambda i:i[1] > 5000,salary_list))) # [('egom':10000)]map绘制/映射
匿名函数的返回值是map()的结果之一
print(list(map(lambda i:i[1]+2000,salary_list))) # [4000,5000,7000,12000]
内置方法
掌握
bytes 转换二进制串
bytes('中国',encoding = 'utf8')chr/ord
print(chr(97)) # a print(ord('a')) # 97divmod
print(divmod(10,4)) # 取整/取余enumerate
lt = [1,2,3] for i,j in enumerate(lt): print(i,j) # 索引/值eval 把字符串的引号去掉,留下的是什么就是什么
s = '[1,2,3]' print(eval(s)) # [1,2,3] type:strhash 可变不可哈希
print(hash(1)) # 判断是否可哈希,可哈希返回原值,否则报错
了解
| 方法 | 作用 |
|---|---|
| abs | 绝对值 |
| all | 如果全为真则为True,否则为False |
| any | 只有有一个为真,则为真,否则为假 |
| bin | 转换为二进制 |
| oct | 八进制 |
| hex | 十六进制 |
| dir | 列出模块所有方法 |
| frozenset | 不可变集合 |
| globals/loals | 列出所有全局变量/当前位置所有变量 |
| pow | 幂 |
| round | 四舍五入 |
| slice | 切片 |
| sum | 求和 |
| __import__ | 通过字符串导入模块 |
异常处理
只能捕捉逻辑错误
try:
代码
except Exception as e: # 万能异常
print(e) # 错误描述
代码
finally:
代码 # 无论报错与否,最终都会执行
assert 断言
assert 条件
assert 1 == 1 # 不做处理
assert 1 == 2 # 报错
raise 主动抛出错误
内置方法使用
面向过程编程(思想)
IPO编程 == 面向过程编程
面向过程编程:类似于流水线,一一步一步的往下走
优点:逻辑非常清晰
缺点:上一步错了,下一步跟着错
函数进阶(三) day14的更多相关文章
- Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器
Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器 一丶关键字:global,nonlocal global 声明全局变量: 1. 可以在局部作用域声明一 ...
- Java进阶(三十六)深入理解Java的接口和抽象类
Java进阶(三十六)深入理解Java的接口和抽象类 前言 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太 ...
- Java进阶(三十四)Integer与int的种种比较你知道多少?
Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值 ...
- 【python 3】 函数 进阶
函数进阶 1.函数命名空间和作用域 命名空间一共分为三种: 全局命名空间 局部命名空间 内置命名空间 *内置命名空间中存放了python解释器为我们提供的名字:input , print , str ...
- day11.1函数进阶 列表集合 字典中的函数变量,函数作为形参
函数进阶 1.函数作为变量 a=123 name="gao" nums=[1,2,3] data=nums#指向同一个内存地址 #查看内存地址篇章 def func(): prin ...
- python基础 (初识函数&函数进阶)
函数基础部分 .什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率. 2.定义函数 定义:def 关键词开头,空格之后接函数名 ...
- day 10 - 1 函数进阶
函数进阶 命名空间和作用域 命名空间 命名空间 有三种内置命名空间 —— python解释器 就是python解释器一启动就可以使用的名字存储在内置命名空间中 内置的名字在启动解释器的时候被加载进内存 ...
- python基础之 初识函数&函数进阶
函数基础部分 1.什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率. 2.定义函数 定义:def 关键词开头,空格之后接函数名 ...
- python大法好——递归、内置函数、函数进阶
1.递归(自己干自己) def fun(n): n=n/2 print(n) if(n>2) fun(n) #函数调用 fun(10) 结果是5 2 1 0 递归的执行过程:递归执行到最里面一层 ...
随机推荐
- Kerberoasting攻击
前面我们介绍了<Windows本地认证>.<Windows网络认证>.<Windows域认证>和<SPN扫描>,这次继续讲解域内相关的东西. 0x01介 ...
- Flutter免费(视频)教程汇总
Flutter学习导航 Flutter简介: Flutter可以轻松快速地构建漂亮的移动应用程序. Flutter是谷歌的移动应用SDK,用于短时间内在iOS和Android上制作高质量的原生界面应用 ...
- JAVA线程基础概念及使用
一.线程和进程的区别 在操作系统中所有运行的任务通常对应一个进程,进程是系统进行资源分配和调度的一个独立单位.线程是进程的组成部分,一个进程最少包含一个线程.并发和并行的区别是,并发指的在同一时刻内, ...
- ajax跨域问题以及解决方案
转:https://blog.csdn.net/csdn_ds/article/category/6937392/3 在工作中,大家应该都遇到过ajax跨域问题,浏览器的错误如下: XMLHttpRe ...
- 一个有意思的js块作用域问题
1.问题 首先把问题放出来,昨天看了一个掘友发的一个问题,然后跟我同事一起研究了一下,没找出来是为什么,然后我回来一直在想为什么,然后各种找资料研究,从各个方面找为什么,比如js上下文,作用域,js垃 ...
- linux查看系统的一些版本号指令
1.查看系统 [root@iZbp1eoiap1e1jb6pvo390Z ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch ...
- 从零开始搭建WebAPI Core_SqlSugar管理系统 (持续更新中......)
从零开始搭建WebAPI Core_SqlSugar管理系统 前言 本系列皆在从零开始逐步搭建,后台管理系统服务端部分,后续还会推出前端部分. 这次的目的是搭出一个功能完善的 本次系列技术栈以下几个部 ...
- 浅谈个人对客户端JavaScript同步、异步、执行顺序等概念的理解
一.同步和异步的概念. 同步:即按代码的顺序执行任务. 在下列代码中,按照同步概念,则是先打印1后打印2. console.log(1); console.log(2); 异步:即执行一个任务的同时执 ...
- vue.js 实战 todo list
vue.js 起源 vue.js 的作者是尤雨溪,是一名中国人,之前在谷歌工作,现在在全职维护 vue 项目. vue.js 是 2014 年推出来的.现在已经更新到 2.x 版本,3.0 版本会在 ...
- 【RocketMQ源码学习】- 1. 入门
为什么读RocketMQ 消息队列在互联网应用中使用较为广泛,学习她可以让我门更加了解使用技术的工作原理 透过学习她的源码,拓宽认知 RocketMQ经历了阿里双十一 有哪些名词 Producer 消 ...