python学习笔记(三)
tips:pass的用途
pass是为了占据一个位置,因为如果定义一个空函数程序会报错,当你没有想好函数的内容是可以用 pass 填充,使程序可以正常运行。
Python time sleep() 函数推迟调用线程的运行,可通过参数secs指秒数,表示进程挂起的时间。
集合的特点:
1)访问速度快;
2)天生解决重复问题
3)difference_update() 方法与 difference() 方法的区别在于 difference() 方法返回一个移除相同元素的新集合,而 difference_update() 方法是直接在原来的集合中移除元素,没有返回值。
实例:更新数据库
old_set = set(old_dict.keys()) update_list = list(old_set.intersection(new_dict.keys()))#相交 new_list = [] del_list = [] for i in new_dict.keys(): if i not in update_list: new_list.append(i) for i in old_dict.keys(): if i not in update_list: del_list.append(i) print update_list,new_list,del_list
地址:
https://www.cnblogs.com/wupeiqi/articles/4911365.html
2.Diff与symm-diff的区别
diff:A-B
symm-diff:a+b-ab
3.collections系列
Counter是对字典类型的补充,用于追踪值出现的次数。
c = Counter('abcdeabcdabcaba') print c 输出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
tips:Counter(dict)是一种字典,实例如下:
import collections obj = collections.Counter('nnanchbsdcnnxuwbcashduwdiqjabuivbuqehdiqjsio') print(obj) ret = obj.most_common(4) print(ret) for k,v in obj.items(): print(k,v)
运行结果为:
n 5
a 3
c 3
h 3
b 4
tips:subtract减去
3)有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
代码如下:
from collections import defaultdict values = [11,22,33,44,55,66,77,88,99,90] my_dict = defaultdict(list) for value in values: if value>66: my_dict['k1'].append(value) else: my_dict['k2'].append(value) print(my_dict)
Tips:元组不可修改
所以元组到底可不可变?从上面可以看到tuple不支持=这种assign操作,但是对其中可变元素的原地修改是可以的+=, -=, =, /=, //=, %=, *=, <<=, >>=, &=, ^=, |=这些操作符都是原地修改可变对象,不会改变对象。所以,tuple元组的不可变是指元素对象的引用不可变,不能对其再次赋值,但是在其中可变元素对象的引用不被修改前提下,仍旧可以对可变元素对象修改。
4.可命名元组
代码实例如下:
import collections MytupleClass = collections.namedtuple('Mytuple',['x','y','z']) obj = MytupleClass(11,22,33) print(obj)
tips:deque.rotate():将最后几个数放到队列前面
数字或者字符串深浅拷贝并不改变其内存位置。
深浅拷贝示意图:
浅拷贝只拷贝一层
深拷贝可以拷贝多层
实例:
import copy dic = {'cpu':[80,], 'mem':[80,], 'disk':[80,]} print('before',dic) new_dic = copy.deepcopy(dic) new_dic['cpu'][0] = 50 print(new_dic)
函数:
默认参数
实例:
def plus(): a= int(input('请输入第一个数')) b = int(input('请输入第二个数')) c = a+b print(c) plus()
形式参数的运用:
def plus(c): while c<1000: c +=1 print(c) plus(10)
默认参数的运用:
def show(a1,a2=999): print(a1,a2) show(111,888)
运行结果为:111,888
show(a2=111,a1=888)#指定参数 def show(*arg): print(arg,type(arg)) show(11,222,333,)#*转换为元组
def show(**arg): print(arg,type(arg)) show(n1=11,n2=43)#转换为字典
def show(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) show(11,22,33,444,n1=100,alex='sb')
特别注意的是:
def show(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) l1 = [11,222,333,444] d1 = {'n1':100,'alex':'sb'} show(*l1,**d1)
l1作为元组,d1作为字典,为了不变成元组元素,需要分别加星。
5.字符串的格式化
s1 = '{0} is {1}' ret = s1.format('alex','sb') print(ret) s2 = '{name} is {acter}' d = {'name':'alex','acter':'2b'} result = s2.format(**d) print(result)
6.lambda函数
func = lambda a:a+1#创建形式参数a,函数内容a+1并return ret = func(99) print(ret)
7.内置函数
Tips:ascii() 函数返回任何对象(字符串,元组,列表等)的可读版本。ascii() 函数会将所有非 ascii 字符替换为转义字符:å 将替换为 \xe5。
class Foo:
def __repr__(self):
return 'clutch'
f = Foo()
ret = ascii(f)
print(ret)
__repr__将object转换为string格式,ascii()转换为标准版本。
Bytearray功能:转换为二进制数组。
Tips:callable()是否可执行
Ord:字母转换为ascii码
Chr():ascii码转换为字母chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
eval('6*8')
用来执行字符串表达式,并返回值。
48
Map函数
li = [11,22,33]
>>> new_li = map(lambda x:x+100,li)#返回迭代器
>>> for i in new_li:print(i)
...
111
122
133
li = [11,22,33]
def func(x):
if x>22:
return True
else:
return False
n = filter(func,li)
print(list(n))
Filter筛选
Oct()八进制
Hex()十六进制
Round()四舍五入
Dir()返回key
Vars()返回key与value
Zip()返回数对
f = open('test.log','w')
f.write('无dcabd')
f.close()
f = open('test.log','r')
ret = f.read(2)
f.close()
print(ret)
按字符去读取,f.tell()用指针(按照字节)。f.seek()改变指针位置
ret = f.read()
ret2 = f.truncate()
f.close()
print(ret2)
print(ret)
Truncate()保留指针前的字符