python基础

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
View Code

 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:生成一个字典,接收的是实参。
View Code

 3.用一行代码实现数值交换

   a = 1
   b = 2

a=1
b=2
a,b=b,a
print("a:",a,'b:',b)

执行结果:
a: 2 b: 1
View Code

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循环取出数据。
View Code

 5.如何使用python删除一个文件

os.remove('文件名')
View Code

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:只读取一行
View Code

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']
View Code

 8.什么是闭包

1.闭包函数必须有内嵌函数
2.内嵌函数需要引用该嵌套函数上一级namespace中的变量
3.闭包函数必须返回内嵌函数

作用:保存局部变量

例子:
def func():
    num = 1
    def test():
        #num是外层函数的变量
        sum = num +1
        print(sum)
   #返回是内层函数的函数名
    return test
t = func()
t()
View Code

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'}
View Code

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
View Code

11.生成器,可迭代对象,迭代器

生成器:yield type()--> 返回generator

凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
View Code

12.字符串,列表转换

#字符串转列表
>>> data="a,b,c"
>>> data.split(',')
['a', 'b', 'c']

#列表转字符串
>>> data=['a','b','c']
>>> ' '.join(data)
'a b c'
View Code

 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('\n'.join([' '.join(['%s x %s = %s' %(y,x,y*x) for y in range(1,x+1)]) for x in range(1,10)]))
View Code

 

posted @ 2018-05-27 10:38  隔壁Mr.Wang  阅读(134)  评论(0编辑  收藏  举报