记录复习过程中的点滴!!
整型-int 布尔型-bool 字符串-str 列表-list 元组-tuple 字典-dict
assert expression # 用于判断一个表达式,在表达式条件为 false 的时候触发异常。
不可变数据类型:数值型、字符串型string和元组tuple。
不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象。 而对于相同的值的对象,
在内存中则只有一个对象(一个地址)。
可变数据类型:列表list和字典dict。
允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值, 而不会
新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在
不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用
计数,是实实在在的对象。
sum = lambda a, b: a*b
print(sum(2, 2))
进程:
1、操作系统进行资源分配和调度的基本单位,多个进程之间相互独立
2、稳定性好,如果一个进程崩溃,不影响其他进程,但是进程消耗资源大,开启的进程数量有限制
线程:
1、CPU进行资源分配和调度的基本单位,线程是进程的一部分,是比进程更小的能独立运行的基本单位,
一个进程下的多个线程可以共享该进程的所有资源
2、如果IO操作密集,则可以多线程运行效率高,缺点是如果一个线程崩溃,都会造成进程的崩溃
3、Python有一个名为Global Interpreter Lock(GIL)的结构。GIL确保每次只能执行一个“线程”。
一个线程获取GIL执行相关操作,然后将GIL传递到下一个线程。
应用:
IO密集的用多线程,在用户输入,sleep 时候,可以切换到其他线程执行,减少等待的时间
CPU密集的用多进程,因为假如IO操作少,用多线程的话,因为线程共享一个全局解释器锁,
当前运行的线程会霸占GIL,其他线程没有GIL,就不能充分利用多核CPU的优势
any():只要迭代器中有一个元素为真就为真
all():迭代器中所有的判断项返回都是真,结果才为真
python中什么元素为假?
答案:(0,空字符串,空列表、空字典、空元组、None, False)
IOError:输入输出异常
AttributeError:试图访问一个对象没有的属性
ImportError:无法引入模块或包,基本是路径问题
IndentationError:语法错误,代码没有正确的对齐
IndexError:下标索引超出序列边界
KeyError:试图访问你字典里不存在的键
SyntaxError:代码逻辑语法出错,不能执行
NameError:使用一个还未赋予对象的变量
1、复制不可变数据类型,不管copy还是deepcopy,都是同一个地址当浅复制的值是不可变对象
(数值,字符串,元组)时和=“赋值”的情况一样,对象的id值与浅复制原来的值相同。
2、复制的值是可变对象(列表和字典)
浅拷贝copy有两种情况:
第一种情况:复制的对象中无复杂子对象,原来值的改变并不会影响浅复制的值,
同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。
第二种情况:复制的对象中有复杂子对象 (例如列表中的一个子元素是一个列表),
改变原来的值中的复杂子对象的值,会影响浅复制的值。
深拷贝deepcopy:完全复制独立,包括内层列表和字典
json.dumps():字典转json字符串
json.loads():json字符串转字典
str.upper()
str.lower()
Python中函数参数是引用传递(注意不是值传递)。
对于不可变类型(数值型、字符串、元组),因变量不能修改,所以运算不会影响到变量自身;
对于可变类型(列表字典)来说,函数体运算可能会更改传入的参数变量。
1. eval() 函数用来执行一个字符串表达式,并返回表达式的值。
x = 7
eval( '3 * x' )
output: 21
2. eval 方法能使字符串本身的引号去掉,保留字符的原本属性。
a = "123" # <class 'str'>
b = eval(a) # <class 'int'>
b: 123
from random import shuffle
shuffle(list)
is是身份运算符,判断两个对象的内存id是否相等
==是比较运算符,判断两个对象的值是否相等
进行值比较的时候使用==,判断是否是同一对象的时候使用is