>>如果python的or关键字连接的是0 or 1 则 0 代表false,1代表TRUE,
>>区分集合的add和update方法:
当参数为可遍历元素:
1)add将参数作为一个整体添加如集合中。注意add的参数必须是不可变对象(如列表和字典不能作为add的参数)
2)update将参数分为子元素,遍历添加入集合中。update的参数没有要求。
>>元组是不可变对象,是基于元组整体而言是不可变的,即元组中的每个元素所引用的数据的地址是不变的。如果元组的子元素是可变元素比如列表,该子元素是可变的。如下图
>>函数的默认参数必须是不可变类型的数据,即不能是列表(不管是空列表还是有数据的列表) 如:
可以看到第一次以后再次调用函数,默认参数不再是空列表。解决办法:
>>可变参数: 如果要将一个可迭代变量作为 可变参数传入函数中,则在调用参数时 在此变量前添加 * 。但是可迭代变量的长度(即元素个数)要等于函数的参数个数,
>>关键字参数(类似于字典), 定义函数参数时,def func( n1,n2 , **n3) n3即为关键字参数。关键字参数在函数中默认转化为字典格式。
关键字参数和可变参数共同使用
>>序列解包的用法:解包变量的赋值与位置无关,永远是在其他变量赋值完成后再给解包变量赋值,如果其他变量赋值后没有剩余的值,则给解包变量赋值为空列表。
>>进行列表操作时,尽量使用列表本身的方法进行操作,而不是使用运算符。列表添加元素尽量使用 L.append(value), 不要用L = L + [value]. 列表合并新的列表,尽量使用 L.extend(L1),不用使用L = L + L1. 注意增强赋值的语句会自动采用效率更高的方法(比如 append 和 extend方法)。如下图调用extend方法
>>format方法巧用:详见:Python format 格式化函数
如下图如果参数为字典,通过键的值来确定参数,如果参数是多个列表,通过数字(0表示第一个my_list1,1代表第二个my_list2)和括号下标来确定参数。如果想要对参数进行设置,对要设定的参数后添加冒号进行设置,如下图2
>> python中的and 、or操作的计算规则:
And : 从左至右计算操作对象,返回第一个为假的对象的计算结果,如果没有假(即全部为真),则 返回最右侧的操作对象的计算结果
Or : 从左至右计算操作对象,返回第一个为真的对象的计算结果,如果没有真(即全部为假),则 返回最右侧的操作对象的计算结果
>>文件读写的注意事项,为保证速度,尽量不适用readlines()方法
>>对可迭代对象中每个元素进行修改,在for循环中要通过索引确定元素进行修改。
如果是通过列表解析式对列表元素进行修改,则实质是生成新的对象,然后将原变量引用到新的对象,变量的地址会发生改变,见下图
>>迭代器:
1)文件本身就是迭代器,迭代器本身就具有 __next__()方法,不需要 iter()方法转化成迭代器
2) 列表等其他可迭代对象需要通过iter方法转化为迭代器,才能使用 __next__() 或者 next()方法
3)range对象只支持迭代(即可迭代对象,可以使用for循环) 索引 和len,但本身不是迭代器,需要iter方法手动转化为迭代器,Map filter zip三个函数本身是迭代器,可以直接使用 next __next__()方法
4)通过手动iter方法将range对象转化为和 map filter zip方法本身的迭代器的区别:
range手动的迭代器可以生成多个互不影响的迭代器,互相之间不会记录位置
Map filter zip方法生成的本身的迭代器通过iter方法手动生成多个迭代器,多个迭代器相互影响,记录上一次迭代器next的位置
>>变量名的LEGB原则:
>>修改全局变量的方法:
>>可变对象在函数中作为参数时,如果该可变对象是全局变量,在执行函数后,该可变对象可能发生修改。
>>收集参数:函数的形参为*args或者**kwargs。将实参的数值收集为元组或者字典。
>>解包参数,函数的实参形式为*args或者**kwargs.
>>Keyword-only参数: keyword-only参数必须在 *args之后,在**args之前。必须显示给定变量并赋值。
在建立函数时,函数的形参中keyword-only必须在**args之前,*args之后,实际调用函数即作为实参时,keyword-only参数因为指明了关键字,所以可以在任何位置。