目录
1.is和==的区别
事实上Python为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁内存空间。而Python对小整数的定义是[-5,257),只有数字在-5到256之间它们的ID才会相等,超过了这个范围就不行了,同样的道理,字符串对象也有一个类似的缓冲池,超过区间范围内自然不会相等了。总的来说,只有数值型和字符串型,并且在通用对象池中的情况下,a是b才为真,否则当a和b是int,str,tuple,list,dict或set型时,a是b均为False.Python 中对象包含的三个基本要素,分别是:id(身份标识),type(数据类型)和value(值)。==是python标准操作符中的比较操作符,是用来比较判断两个对象的值(值)是否相等
在python里,赋值操作都是起一个别名,对象还是原始对象,这叫“ 引用传递 ”
https://blog.csdn.net/dqchouyang/article/details/75098637
https://www.cnblogs.com/CheeseZH/p/5260560.html
a=1
b=1
id(a)
Out[96]: 140721605635840
id(b)
Out[97]: 140721605635840
b=2
id(b)
Out[99]: 140721605635872
b=1
id(b)
Out[102]: 140721605635840
id(2)
Out[103]: 140721605635872
id(1)
Out[104]: 140721605635840
2.for(i = 1; i <10; i ++)
for i in range(1,10,1):
print(i)
在切片中[开始:结束但是不包括:步长]
3.判断质数,当前数能否被已发现的质数整除
a=[2]
num=3
i=0
n=10
while i<n:
tag=1
for j in a:
if num%j==0:
tag=0
break
if tag==1:
a.append(num)
i=i+1
num=num+1
4.函数参数
可返回x,y这样会返回多个值,x,y = 1,2也可;
f(里面可以写参数名= .... /不写参数名按照参数顺序填值也可/若定义函数时有参数名=值,调用时可作为默认值)
def f1(*a,**b):
print(a,b)
f1(1,2,a=1,b=2)
(1, 2) {'a': 1, 'b': 2}
*a,任意数量的位置参数都会被合并成一个元组,并绑定到a上
**b任意数量的位置参数都会被合并成一个字典,并绑定到b上
def f2(a,b,c,d,e):
print(a,b,c,d,e)
f2(*[1,2,3],**{'d':4,'e':5})
1 2 3 4 5
这里要注意d/e和'd'/'e'是对应的
mm={'Jan':1,"Feb":2,'Mar':3}
s='我的生日在{Jan}月'.format(**mm)
'我的生日在1月'
5.字符串
s[start:end:步长]步长可为负数
+操作: 'a'+'b' 返回新的对象'ab'
* : c*3 Out[8]: 'ababab'
字符串创建后不可变
s.strip()一出字符串两侧的空白符(\ n回车空格tab等)s不变
s.upper()s.lower() s不变
s.captalize()只对串的第一个字符大写,第一个字符是空白符就相当于没大写 s不变
s.title()每个单词首字母大写,不管空白符 s不变
s.isalnum()只含数字或字母或两者空白符不能有则True
s.isdigit()s.startswith()s.endswith()
s.index()s.replace() s不变
s='1,2,3,4,5,6'
s.split()
Out[55]: ['1,2,3,4,5,6']
s.split(',')
Out[56]: ['1', '2', '3', '4', '5', '6']
s.split(',',4)
Out[57]: ['1', '2', '3', '4', '5,6']
s.rsplit(',',4)
Out[58]: ['1,2', '3', '4', '5', '6']
s.split()第一个参数是分隔符,第二个参数分割多少个s.rsplit从右边开始分割;返回列表,s不变
a='aaa'
b='bbb'
'{}fdsjk{}'.format(a,b)
Out[62]: 'aaafdsjkbbb'
'%sfdsjk%s' % (a,b)
Out[63]: 'aaafdsjkbbb'
'{1}fdsjk{0}'.format(a,b)
Out[64]: 'bbbfdsjkaaa'
'{1}fdsjk{0}'.format(1=2,0='AAA')
File "<ipython-input-65-70a2752507cf>", line 1
'{1}fdsjk{0}'.format(1=2,0='AAA')
^
SyntaxError: keyword can't be an expression
'{1}fdsjk{0}'.format(1='2',0='AAA')
File "<ipython-input-66-da58ecd2ed9c>", line 1
'{1}fdsjk{0}'.format(1='2',0='AAA')
^
SyntaxError: keyword can't be an expression
'{B}fdsjk{A}'.format(B='2',A='AAA')
Out[67]: '2fdsjkAAA'
'{'1'}fdsjk{A}'.format('1'='2',A='AAA')
File "<ipython-input-68-81c22a297371>", line 1
'{'1'}fdsjk{A}'.format('1'='2',A='AAA')
^
SyntaxError: invalid syntax
'{'B'}fdsjk{A}'.format('B'='2',A='AAA')
File "<ipython-input-69-7d217bfadb83>", line 1
'{'B'}fdsjk{A}'.format('B'='2',A='AAA')
^
SyntaxError: cannot mix bytes and nonbytes literals
'{B}fdsjk{A}'.format(B='2',A='AAA')
Out[70]: '2fdsjkAAA'
6.元组tuple
作为容器可放各种类型的数据,一旦创建不可改,元组可包含元组,两个元组可用+连接,用下标和切片引用,序列类型支持for循环
t1=('a','cc')
t2=(1,t1,'ddd')
t2
Out[77]: (1, ('a', 'cc'), 'ddd')
a,b,c=t2
a
Out[79]: 1
b
Out[80]: ('a', 'cc')
c
Out[81]: 'ddd'
for i in t1:
print(i)
a
cc
#元素不可变
t=(1,[2,3])
t[1]
Out[150]: [2, 3]
t[1]=[22.2,33]
Traceback (most recent call last):
File "<ipython-input-151-dba131121fb1>", line 1, in <module>
t[1]=[22.2,33]
TypeError: 'tuple' object does not support item assignment
7.列表list
a[], 序列类型对象,可用于for循环,可包含各种元素,创建后可变,可+,*
L1=[1,2,3]
L1[0]="aaaa"
L1.append(.....) L1改变
L1.insert(位置,元素)L1改变
L1.pop(位置)L1改变,同时返回pop值
[x*2 for x in range(1,10,2)]
Out[106]: [2, 6, 10, 14, 18]
8.zip函数
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]需要用list(zipped)
对这个列表可用dict( )得到一个字典
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
对这个列表可不!用dict( )得不!到一个字典
9.字典dict
可变不可+
#创建
d={"a":1,"b":2}
d["a"] 通过[ key ]访问
Out[139]: 1
#i对字典里的key迭代
for i in d:
print(i,d[i])
a 1
b 2
#创建
d={}
for i in ["a","b"]:
d[i]=1
#创建
l1=[(1,2,3),(4,5,6)]
dict(l1)
d={"a":1,"b",2}
for i , j in d.items():
print(i,j)
a 1
b 2
d.keys()
Out[144]: dict_keys(['a', 'b'])
d.values()
Out[145]: dict_values([1, 2])
10.sorted和lambda
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
sorted(iterable[, key[, reverse]])
- iterable -- 可迭代对象。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。key是比较的依据
reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)
>>>a = [5,7,6,3,4,1,2]
>>> b = sorted(a) # 保留原列表
>>> a
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]
>>> L=[('b',1),('a',2),('c',3),('d',4)]
>>> sorted(L, key=lambda x:x[0]) # 利用key
[('a', 2), ('b', 1), ('c', 3), ('d', 4)]
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda s: s[2]) # 按年龄排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(students, key=lambda s: s[2], reverse=True) # 按降序
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
# lambda 需求:将列表中的元素按照绝对值大小进行升序排列
list1 = [3,5,-4,-1,0,-2,-6]
sorted(list1, key=lambda x: abs(x))
当然,也可以如下:
list1 = [3,5,-4,-1,0,-2,-6]
def get_abs(x):
return abs(x)
sorted(list1,key=get_abs)
11.random
几乎所有的计算机程序生成的“随机数”都不是真正的随机数,而是以一个种子(真随机数)为初始值,通过算法迭代生成后续随机数
random.random() [0,1)
random.randint(a,b) [a,b)
random.randrange(a,b,c) a开始,b结束但是不包括,c等差;得到一个等差,从中取一个数
random.shuffle(列表) 返回原始列表顺序
random.choice(列表) 列表选一
random.sample(列表,n)列表选n
random.seed(1)
a=random.randint(1,100)
random.seed(1)
b=random.randint(1,100)
结果一样a=b
c=random.randint(1,100)
c可能就不等于a和b了
每次使用random里的方法前设置相同seed结果才会重现,
12.文件
#打开文件
fr=open(r'C:\Users\Lenovo\Desktop\test.log','r')
#第二个参数r表示只读,a表示读写分别用fr和fw代表返回,容易区分
lines=f.readlines()
第一个参数里面的r是作用于'\',也可写成'C:\\Users\\Lenovo\\Desktop\\test.log'或者'C:/Users/Lenovo/Desktop/test.log'
for i in lines:
print(i.strip())
111111
222222
333333
444444
555555
666666
文件操作结束后要f.close()否则会导致部分数据写入不成功
#glob,获取某目录里的所有文件名,若其中还有其他目录可用/*/*表示多进一层目录
from glob import glob
fp=glob(r'C:\Users\Lenovo\Desktop\*')
fp
Out[8]:
['C:\\Users\\Lenovo\\Desktop\\CodeBlocks.lnk',
'C:\\Users\\Lenovo\\Desktop\\test.log',
'C:\\Users\\Lenovo\\Desktop\\小孩桌面便签.lnk',
'C:\\Users\\Lenovo\\Desktop\\桌面文件',
'C:\\Users\\Lenovo\\Desktop\\项目学习']
#不是所有的.lnk都能读取到 。。。。为什么