1.is和==的区别
1 is:判断两个值的内存地址(id)是否相等。 2 ==:两个value值是否相等。 3 4 is: 5 1.第一种情况: 6 >>> n1=123 7 >>> n2=123 8 >>> n1 is n2 9 True 10 >>> id(n1) 11 1353978128 12 >>> id(n2) 13 1353978128 14 15 2.第二种情况: 16 >>> n1=1234567 17 >>> n2=1234567 18 >>> n1 is n2 19 False 20 >>> id(n1) 21 43798416 22 >>> id(n2) 23 48262320 24 25 第三种情况: 26 >>> n1=1.2 27 >>> n2=1.2 28 >>> n1 is n2 29 False 30 >>> id(n1) 31 43819296 32 >>> id(n2) 33 43819248 34 35 总结:Python仅仅对比较小的整数对象进行缓存(范围为范围[-5, 256])缓存起来,而并非是所有整数对象。需要注意的是,这仅仅是在命令行中执行,而在Pycharm或者保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化。 36 37 ==: 38 第一种情况: 39 >>> n1=123 40 >>> n2=123 41 >>> n1 == n2 42 True 43 44 第二种情况: 45 >>> n1=1234567 46 >>> n2=1234567 47 >>> n1 == n2 48 True 49 50 第三种情况: 51 >>> n1=1.1 52 >>> n2=1.1 53 >>> n1 == n2 54 True 55 56 1、is 比较两个对象的 id 值是否相等,是否指向同一个内存地址; 57 2、== 比较的是两个对象的内容是否相等,值是否相等; 58 3、小整数对象[-5,256]在全局解释器范围内被放入缓存供重复使用; 59 4、is 运算符比 == 效率高,在变量和None进行比较时,应该使用 is。
2.*args和**kwargs的作用
def func(*args,**kwargs): print('args:',args) print('kwargs:',kwargs) func(1,['a','b'],{'a'},q=1) 执行结果: args: (1, ['a', 'b'], {'a'}) kwargs: {'q': 1} 总结: *args:生成一个集合,接收的是形参。 **kwargs:生成一个字典,接收的是实参。
3.用一行代码实现数值交换
a = 1
b = 2
a=1 b=2 a,b=b,a print("a:",a,'b:',b) 执行结果: a: 2 b: 1
4.求结果: a.[ i % 2 for i in range(10)] b.( i % 2 for i in range(10))
>>> a=[ i % 2 for i in range(10)] >>> a [0, 1, 0, 1, 0, 1, 0, 1, 0, 1] >>> b=( i % 2 for i in range(10)) >>> b <generator object <genexpr> at 0x000000000417D0A0> 总结: [] 返回的是列表 () 返回的是生成器,需要for循环取出数据。
5.如何使用python删除一个文件
os.remove('文件名')
6.xrange和range区别 , readlines和xredlines区别
python2.X range:返回一个列表,例如[0,1,2,3,4...] xrange:返回一个xrange对象,这个对象是可迭代对象。 readlines:返回一个所有内容的列表,每个索引就是一行数据。 xreadlines:返回一个生成器。 python3.X xrange改为range,执行会生成一个range对象。 readlines:返回一个所有内容的列表,每个索引就是一行数据。 read:全部读来 readline:只读取一行
7.一行去重排序列表
>>> a=[1,2,3,1,1,'a','z','b','a'] >>> sorted(list(set(a)),key=a.index) [1, 2, 3, 'a', 'z', 'b'] #两行去重排序 >>> a=[1,2,3,1,1,'a','z','b','a'] >>> b=list(set(a)) >>> b.sort(key=a.index) >>> b [1, 2, 3, 'a', 'z', 'b']
8.什么是闭包
1.闭包函数必须有内嵌函数 2.内嵌函数需要引用该嵌套函数上一级namespace中的变量 3.闭包函数必须返回内嵌函数 作用:保存局部变量 例子: def func(): num = 1 def test(): #num是外层函数的变量 sum = num +1 print(sum) #返回是内层函数的函数名 return test t = func() t()
9.序列化
json.dumps 将 Python 对象编码成 JSON 字符串 json.loads 将已编码的 JSON 字符串解码为 Python 对象 例如: >>> import json >>> data={'name':'wang','age':18} >>> json.dumps(data) '{"name": "wang", "age": 18}' #注意data里面的数据用双引号,外面用单元号,要不然会报错 >>> data='{"name":"wang","age":18}' >>> json.loads(data) {u'age': 18, u'name': u'wang'}
10.特殊语法: map filter reduce
map:返回的是最终的执行结果 def fun(n): return n+1 num = [1,2,3] map(fun,num) 结果:[2,3,4] filter:如果满足函数条件,返回的是之前的可迭代对象。 def is_odd(n): return n % 2 == 1 newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) print(newlist) 结果:[1, 3, 5, 7, 9] from functools import reduce #求和 def add(x,y): return x + y print (reduce(add, range(1, 101))) 结果:5050
11.生成器,可迭代对象,迭代器
生成器:yield type()--> 返回generator 凡是可作用于for循环的对象都是Iterable类型; 凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列; 集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
12.字符串,列表转换
#字符串转列表 >>> data="a,b,c" >>> data.split(',') ['a', 'b', 'c'] #列表转字符串 >>> data=['a','b','c'] >>> ' '.join(data) 'a b c'
13.99乘法表
for i in range(1,10): b='' for v in range(1,i+1): s = '%s x %s = %s' %(v,i,i*v) b=b+s+' ' print(b) 一行实现: print(' '.join([' '.join(['%s x %s = %s' %(y,x,y*x) for y in range(1,x+1)]) for x in range(1,10)]))