notes for lxf(二)
函数
abs()绝对值 max()返回最大值
raise 后接异常类 引发异常
函数返回多个值其实就是返回一个tuple
函数默认返回None
如果有必要检查参数类型用isinstance() type()查看数据类型
定义函数——确定函数名和参数个数——检查参数数据类型——return返回
定义默认参数必须指向不变对象
可变参数*args表示args接收的是一个tuple 关键字参数**kw表示kw接收的是一个dict 命名关键字参数需要一个特殊分隔符*必须传入参数名 如果有可变参数就不用加*
函数参数组合顺序 位置参数 默认参数 可变参数 命名关键字参数 关键字参数
对于任意函数都可以用func(*args, **kw)形式调用它 无论参数是如何定义的
在函数内部可以调用其它函数 如果一个函数调用的是自身本身 这个函数就是递归函数
函数调用通过栈实现 每当进入一个函数调用 栈就会增加一层栈帧 每当函数返回 栈就会减一层栈帧 递归调用次数过多会导致栈溢出
解决递归栈溢出的方法是通过尾递归优化 在函数返回时调用自身本身 使用递归本身无论调用多少次 都只占用一个栈帧
递归可以用逆向思维想想看(汉诺塔)
切片
L[-1]取最后一个元素 L[start:last:step]前闭后开 L[:]复制一个list
不要试图在循环中修改列表
迭代dict 默认情况下迭代的是key for i in d.values()迭代value for k, v in d.items()迭代key和value
isinstance(object, collections.Iterable/Iterator)判读是否为可迭代对象/迭代器
enumerate()用于一个将可遍历的数据对象返回索引-数据
列表生成式[i for i in range(10) if i > 3] [m + n for m in 'abc' for n in 'xyz']
generator生成器 一边循环一边计算的机制
定义一 只需要把列表生成式的[]改成()就创建了一个generator 和list的区别仅在于最外层的[]和()
定义二 如果一个函数中包含yield关键字那么这个函数就不是简单的函数而是一个generator
next(generator)获得生成器的下一个返回值 或for i in generator:
函数是顺序执行 遇到return语句或最后一行(最后是return None) 函数就返回 generator的函数 遇到yield就返回 下次执行从yield开始
迭代器 可以被next()函数调用并不断返回下一个值的对象成为迭代器 Iterator 可以直接用于for循环的对象称为可迭代对象Iterable
生成器都是迭代器 但是list dict str是Iterable不是Iterator 可以使用iter()函数变成Iterator
像list str dict都是有限的序列 而Iterator表示的是一个不知道序列长度的数据流 只能通过next()实现按需计算下一个数据 Iterator是惰性的
for循环本质上是不断通过next()函数实现的(先把可迭代对象用iter()变成迭代器 再用next()不断调用)
notes for lxf(二)的更多相关文章
- notes for lxf(五)
类和实例的绑定方法和属性 实例绑定 obj.func = func obj.func(obj, &argv) obj.func = MethodType(func, obj) 第一个参数是方 ...
- notes for lxf(四)
类名首字母通常大写 创建实例 类名 +() __init__方法 创建实例时把一些属性绑上去 __init__方法第一参数永远是self 表示船舰的实例本身 类是实例的模板 实例是一个一个具体的对象 ...
- notes for lxf(三)
纯函数式编程是没有变量的,只要输入确定输出就确定 指高度抽象的编程范式 特点 函数本身可以作为参数传入 或者允许返回一个函数 Higher-order function 一个函数可以接收另一个函数作为 ...
- notes for lxf(一)
python代码不能用word和windows自带的记事本保存 word保存的不是纯文本文件 记事本会在文件开始的地方加上特殊字符(UTF-8 BOM) 交互模式启动了解释器 直接运行.py文件是一次 ...
- Salesforce LWC学习(二十七) File Upload
本篇参考: https://developer.salesforce.com/docs/component-library/bundle/lightning-file-upload/documenta ...
- 【php基础】XML,DTD实例
要求一:能看懂别人写的DTD文件,自己能写更好.例如products.dtd: <!ENTITY AUTHOR "John Doe"> <!ENTITY COMP ...
- 【新特性】JDK10
一.局部变量类型推断 很多人抱怨Java是一种强类型,需要引入大量的样板代码.甚至在这些情况下,给定好变量名,通常很清楚发生了什么,明显类型声明往往被认为是不必要的.许多流行的编程语言都已经支持某种形 ...
- Oracle 11G RAC11.2.0.4 + Redhat7.3安装手册
安装思路: 1.安装两台redhat7 linux系统 2.网络配置(双网卡,public,vip,private,scan) 3.存储配置(内存配置,ASM共享存储:6块5G共享盘udev,根目录留 ...
- Lotus Notes中编程发送邮件(二)
在编程发送各种类似通知的邮件时,时常会需要发件人显示为某个特定的帐户,比如某个部门的名称或者管理员的名字.另一种需求是,用户收到某封邮件后,回复邮件的地址不同于发件人栏显示的地址.而正常情况下,发送邮 ...
随机推荐
- apue——无缓冲读写操作
stdrw.c文件 #include "apue.h" #define BUFFSIZE 4096 #include <stdio.h> int main(int ar ...
- (八) Usb摄像头描述符解析
目录 Usb摄像头描述符解析 总结 参考资料 打印设备描述符 打印配置描述符 打印接口联合体描述符 打印接口描述符 打印当前设置的额外描述符 代码解析额外的描述符 打印端点描述符 title: Usb ...
- I/O模型系列之二:Unix的五种网络I/O模型
1. Unix的五种I/O模型 从上往下:阻塞程度(高-----低)I/O效率 (低-----高) 阻塞I/O(Blocking I/O):传统的IO模型 非阻塞I/O(Non-Blocking I ...
- 树莓派安装 MySQL 时出现错误的解决方法
今天被要求解决一个树莓派无法正常安装 MySQL 的问题.以下是解决过程记录. 我在 Mac 上利用 SSH 连接到树莓派,执行 sudo apt-get install mysql-server m ...
- awk删除重复文件
#!/bin/bash #查找并删除重复文件,每个文件只保留1份 ls -LS --time-style=long-iso | awk 'BEGIN { getline; getline; name1 ...
- 如何使用门罗币远程节点remote node?
当使用门罗币钱包的时候,都需要启动monerod,用来同步门罗币区块. 但是因为区块体积目前已经超过40G了, 所以需要花费很多天时间才能把数据同步完. 这对于使用门罗币非常的不方便. 远程节点rem ...
- 怎样解决canvas 插件 和html 页面中的事件冲突问题 ?
很简单 ,在html 执行事件所在的div中 设置 position:relative;
- 【vagrant】硬盘扩容
如题,笔者之前一直在使用vagrant作为虚拟机使用. vagrant的好处自然不必说,只是有一天遇到了一个麻烦事--虚拟硬盘空间不!够!了! 笔者使用了df -h命令一看,结果发现,主硬盘(/dev ...
- 第十六节,OpenCV(学习五)边缘检测
边缘检测 边缘检测的目的是标识数字图像中亮度变化明显的点,边缘检测是特征提取的重要领域. 1.检测方法 边缘检测的方法大致分为两类:基于搜索和基于零交叉 基于搜索的边缘检测方法首先计算边缘强度,通常用 ...
- 关于VC预定义常量_WIN32,WIN32,_WIN64等预定义宏的介绍(整理、转载)
参考帖子: (1)MSDN上专门讲预定义宏:https://msdn.microsoft.com/en-us/library/b0084kay(v=vs.80).aspx (2)VS中属性页的配置介绍 ...