目录
bool
- python可对任意类型取布尔值
- 猜测:内存全0时为False
- 比较运算结果为bool
逻辑运算
- 逻辑运算左右操作数均为bool,如不是需要进行转化,即先将操作数转化为bool再逻辑运算
delete del del()
- c++中delete析构数据
- python中del删引用变量,我理解的是把变量从符号表中去掉。当数据引用数为0时,该数据内存无效。
- python中del()析构对象。
解释性语言
- python与java类似,都是C编写的解释器或虚拟机执行
- python标准库是C实现的。
tuple
- 括号不是必须的,逗号是必须的
变量理解
- 变量理解为引用,可以改变指向
可变数据类型 不可变数据类型
- tuple是不可变数据类型,指针指向的第一层不可变
- set是可变数据类型,但是set是不可变数据类型的序列,第一层可变,第二层不可变
位运算符 逻辑运算符
- 位运算符为&
- 逻辑运算符,python中为and,c中为&&,逻辑运算结果为bool
pass关键字代替C语言中空语句块
- pass == {}
生成器
- reversed()
- (x for x in range())
id()
- 获得指向数据的地址
python中,没有变量,只有指针
- python把一切数据,一切的一切都看作对象,在python中,没有变量,只有指针,要说变量,也是指针变量。
- 对象都是在堆上存放的
None 是 NoneType 数据类型的唯一值
- 不能再创建其它 NoneType 类型的变量,但是可以将 None 赋值给任何变量
- 对于所有没有 return 语句的函数定义,Python 都会在末尾加上 return None,使用不带值的 return 语句(也就是只有 return 关键字本身),那么就返回 None。
python所有都是代码区,一切皆对象
- python所有都是代码区,一切皆对象
函数对象
元类
对象 字典
- 对象能产生字典dict dir
- 作用域可生成字典。globals() locals()产生作用域字典
exec() eval()
- 执行结果,产生的变量加入local字典
- local字典可用于type(),这是类声明的原理。
可用于module()参数,这是import的原理。
with
context理解
- 每一段程序都有很多外部变量。只有像Add这种简单的函数才是没有外部变量的。一旦你的一段程序有了外部变量,这段程序就不完整,不能独立运行。你为了使他们运行,就要给所有的外部变量一个一个写一些值进去。这些值的集合就叫上下文。
- 譬如说在C++的lambda表达是里面,[写在这里的就是上下文](int a, int b){ … }。
tensor op
- Nodes in the graph are called ops (short for operations).
An op takes zero or more Tensors, performs some computation, and produces zero or more Tensors.
类比:一个神经元有多个输入,一个或者多个输出。这里的OP可以看作神经元,tensor可以看作输入的数据。 - In TensorFlow terminology, a Tensor is a typed multi-dimensional array.
For example, you can represent a mini-batch of images as a 4-D array of floating point numbers with dimensions [batch, height, width,channels].
tensor是一个数组,每个数组元素是多维的,其实就是一个矩阵。 - 转载
Anaconda、Miniconda、Conda、pip的相互关系
迭代器 可迭代对象 for循环
- 理解迭代器和可迭代对象
- 迭代器就是能被next()调用得到下一次迭代值的对象,迭代器不直接保存迭代的序列值,而保存得到下一次迭代值的算法。可迭代对象就是能被iter()方法调用得到迭代器的对象,能进行for循环的必须是可迭代对象
- 迭代器或迭代器对象:实现了__next__()魔法方法的(类所实例化的)对象,该方法返回迭代器下一个值(保存得到下一个迭代值的算法),一般也实现了__iter__()非必须。可迭代对象:实现了__iter__()魔法方法的(类所实例化的)对象,该方法返回一个迭代器对象
- for循环的底层实现原理:
实质是调用内建方法iter()得到迭代器对象,然后通过每次调用next(迭代器)得到i的迭代值。例如以下的代码:for i in 可迭代对象: 循环体
for i in x: print(i) #完全可以改写为: iterator = iter(x) while True: i = next(iterator) print(i)
- for循环只能对可迭代对象进行,可迭代对象又需要迭代器的实现
- 实际上,为了简化和方便,完全可以在一个类中同时实现__iter__()和__next__()方法,也即该类实例化的对象既是一个可迭代对象也是迭代器,代码如下:
class Fib: def __init__(): self.a = 1 self.b = 2 sele.current = self.a def __iter__(self): return self def __next__(): if(self.num-1>=0): self.num = self.num-1 self.current = self.a self.a = self.b self.b = self.b+self.current #以上两步赋值操作可省略中间变量直接写为self.a,self.b = self.b,self.a+self,b return self.curent else: raise StopIteration
迭代器 可迭代对象 生成器
cpython源码
bound method && function
- type(类中绑定的方法) = bound method
type(未绑定的方法) = functionclass A: def b(self): pass @classmethod def c(cls): print('c') pass @staticmethod def d(): pass a = A() print(A) print(a) print(A.b) print(a.b) print(A.c) print(a.c) print(A.d) print(a.d) ''' <class '__main__.A'> <__main__.A object at 0x000001A94D491D08> <function A.b at 0x000001A94D499438> <bound method A.b of <__main__.A object at 0x000001A94D491D08>> <bound method A.c of <class '__main__.A'>> <bound method A.c of <class '__main__.A'>> <function A.d at 0x000001A94D4991F8> <function A.d at 0x000001A94D4991F8> '''
- 类实例化对象拥有全部类方法,实例方法须经绑定处理过
可调用对象
- Python中有七种可调用对象
- 暂时分开理解可调用对象和函数