Python Notebook

Python Notebook

print()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
print(1)
print("we're the best")
print('we are the best')
print('we\'re the best')

print("apple"+"car")
print('apple'+'tree')

print('apple'+'4')
print('apple'+str(4))

print(1+2)
print("1+2")
print(int('1')+2)
print(float(1.2)+2) # '1.2'不可以转int

数学:

1
2
3
4
5
6
7
print(1+1)
print(1-1)
print(2*2)
print(2^1) # 异或xor
print(2**3) # 高次幂
print(8%3) # mod
print(8//3) # 整除(下取整)

自变量 variable

1
2
3
temp=999+1
temp_2=1+temp
print(temp,temp_2)

while循环

1
2
3
4
a=1
while a<10:
print(a)
a+=1
1
2
while True:
print("123")

for循环

1
2
3
4
5
example_list = [1,2,3,4,5]
for i in example_list:
print(i)//-----
print(i+1)//---这两行都在for循环内(python十分看重结构)
print("end")
1
2
for i in range(1,10,2): #range(a,b,c) 为遍历范围[a,b)  步长为c,也可以直接range(a,b)默认步长为1
print(i)
1
2
3
a = [7,6,5,4,3,2,1]
for i in range(0,6): #range(a,b,c) 为遍历范围[a,b) 步长为c
print(a[i])

if条件

1
2
3
4
5
6
7
8
9
x=1
y=2
z=0
if x<y>z:
print('x is less than y,and y is greater than z')
a=1
b=1
if a==b:
print('a is equal to b')
1
2
3
4
5
6
7
x=1
y=2
z=0
if x>y:
print(1)
else:
print(2)
1
2
3
4
5
6
7
8
9
10
x=1
y=2
z=0
if x==1:
print(x)
elif y==2:
print(y)
else:
print(z)
print('finished')

def函数

1
2
3
def f():
print('this is a f')
f()
1
2
3
4
def f(a,b):
c=a*b
print(c)
f(1,2)
1
2
3
4
5
6
def sale(price,color,brand,is_second=True): #提前定义好的值不能在未定义值的前面
print("price:",price,
"color:",color,
"brand:",brand,
"second:",is_second)
sale(1000,"red",True,"bmw")
1
2
3
4
5
def fun(a):
return a*a
b=1
b+=fun(5)
print(b)

全局&局部变量

1
2
3
4
5
6
def fun():
global a
a=20
return a*a
print(fun()) #400
print(a) #20

安装numpy模块

cmd里直接pip install numpy

(如果需要更新输入python -m pip install —upgrade pip

文件读写

写入内容

1
2
3
4
5
text="this is my first text.\nThis is next line."
# w是写 ,r是只读
my_file=open('my file.txt','w') #如果没有这个文件就会创建一个,且保存在.py文件同一个文件夹中
my_file.write(text)
my_file.close()

增加内容

1
2
3
4
5
text="\nThis is appended line."
# w是写 ,r是只读, a是在原文件增加
my_file=open('my file.txt','a') #如果没有这个文件就会创建一个,且保存在.py文件同一个文件夹中
my_file.write(text)
my_file.close()

打印内容

1
2
3
my_file=open('my file.txt','r')  #如果没有这个文件就会创建一个,且保存在.py文件同一个文件夹中
content=my_file.read()
print(content)

readline/readlines

1
2
3
4
5
my_file=open('my file.txt','r')  #如果没有这个文件就会创建一个,且保存在.py文件同一个文件夹中
content=my_file.readline()#读完后,光标还在该行
print(content)
content=my_file.readlines()#紧跟着上次读完的地方开始读,且readlines会读从光标开始往后的所有内容
print(content)

class 类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Calculate:
name = 'Good calculator'
price=18
def plus(self,x,y):
ans=x+y
return ans
def minus(self,x,y):
ans=x-y
return ans

a=Calculate()

print(a.name)
print(a.price)
print(a.plus(2,3))

类init功能

含参构造函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Calculate:
name = 'Good calculator'
price=18
def __init__(self,name,price,height):
self.name=name
self.price=price
self.h=height
def plus(self,x,y):
ans=x+y
return ans
def minus(self,x,y):
ans=x-y
return ans
a=Calculate('bad calculator',15,12)
print(a.name)
print(a.price)
print(a.plus(2,3))

input

1
2
3
4
5
a=input()  #输入 input返回值是字符串
print(a)
a=int(input()) #输入 input返回值是整数
b=input('please give a number') #带提示字符输入
print(b)

元组 列表

这两者十分相似

1
2
3
4
5
6
7
8
9
10
11
12
a_tuple=(12,3,5,15,6)  #元组
another_tuple=12,3,5,15,6 #这种写法也是元组
a_list=[12,4,12,18,12] #列表

for content in a_list: #把列表中的每一个数据赋值给content
print(content)
for content in a_tuple: # 把列表中的每一个数据赋值给content
print(content)
for index in range(len(a_list)):
print('index=',index,'number=',a_list[index])
for index in range(len(a_tuple)):
print('index=',index,'number=',a_list[index])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a_list=[12,4,12,18,12]  #列表
a_list.insert(1,0) #.insert(x,y) 第x位插入一个y
a_list.append(123) #在列表后添加一个数字
a_list.remove(12) # .remove(value) 去掉第一次出现值为value的数字
print(a_list)
print(a_list[2])
print(a_list[-1]) #-1会循环回去 ,索引到最后一个值
print(a_list[0:3]) #打印第0-2位
print(a_list[0:]) #打印第0-最后一位
print(a_list.index(4)) #打印值为4的下标是多少
print(a_list.count(12)) #打印某一个值出现的次数
a_list.sort() #从小到大
print(a_list)
a_list.sort(reverse=True) # 从大到小排序
print(a_list)

多维列表

1
2
3
multi_list=[[1,2,3],[2,3,4],[3,4,5]]
print(multi_list[1])
print(multi_list[0][2])

字典

1
2
3
4
5
6
7
8
9
10
11
a_list=[1,2,3,4,5]
d={'a':1,'b':2,'c':3} #字典
d2={1:'a',2:'b',3:'c'}
print(d['a'])
print(d2[2])

del d['b'] #del 删除操作
print(d)

d['d']=4 #添加操作
print(d)

字典套字典/字典套列表

1
2
3
4
d={'a':[1,2,3],'b':{'c':3,5:'e'}}
print(d['a'][0])
print(d['b']['c'])
print(d['b'][5])

载入模块

载入模块的四种方式

1
2
import time
print(time.localtime()) #必须有time.才可以调用localtime()
1
2
import time as t   #用t代替time
print(t.localtime())
1
2
3
from time import time,localtime  #只用time模块中的time和localtime这两个
print(localtime()) #不用time.
print(time())
1
2
from time import*
print(localtime()) #不用time.

做一个自己的模块/脚本

先自己写一个模块,并放在.py文件同根目录下

这里我给他命名为 my_mod.py

1
2
def printdata(data):
print(data)

调用

1
2
import my_mod
my_mod.printdata('test my mod')

continue/break

1
2
3
4
5
6
while True:
b=int(input())
if b==1:
break
else:
pass

错误处理Try

下面这中方法可以输出错误信息,但是在pychram也可以做到,所以几乎用不到这种方法。

1
2
3
4
try:
file=open('eeee','r')
except Exception as e:
print(e)

正确的用法出现在这种情况下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
try:
file=open('eeee','r+')
except Exception as e:
print("no such file")
re=input('do you wanna creat a new file')
if re=='yes':
file = open('eeee','w')
file.write("1234567")
file.close()
else:
pass
else:
file.write("12345")
file.close()

zip/lambda/map

zip

1
2
3
4
5
6
7
8
9
10
a=[1,2,3]
b=[4,5,6]
c=list(zip(a,b)) # zip是一个操作,需要转换成list就是列表的形式了
print(c) # [(1, 4), (2, 5), (3, 6)]
for i,j in zip(a,b):
print(i/2,i*2)
# 0.5 2
1.0 4
1.5 6
print(list(zip(a,a,b))) #三元组 [(1, 1, 4), (2, 2, 5), (3, 3, 6)]

lambda

和函数一样,常用来定义简单的函数

1
2
fun=lambda x,y:x+y
print(fun(1,2)) #1+2=3

map

1
2
3
4
5
fun=lambda x,y:x+y
ans=list(map(fun,[3],[5]))
print(ans) #[8]
ans=list(map(fun,[3,4,5],[6,7,8])) #[9, 11, 13]
print(ans)

浅复制/深复制 copy&deepcopy

赋值操作中的copy

1
2
3
4
5
6
a=[1,2,3]
b=a
print(id(a),id(b)) #1881324445568 1881324445568
b[0]=15 #改变b后a也会改变,因为他俩地址都一样,你在地址上改,肯定两者都会改变
print(a) # [15, 2, 3]
print(b) # [15, 2, 3]

copy模块中的浅复制 copy

1
2
3
4
5
6
7
import copy
a=[1,2,3]
b=copy.copy(a)
print(id(a),id(b)) #2007218349376 2007217831232
b[0]=15
print(a) #[1, 2, 3]
print(b) #[15, 2, 3]

copy模块中的深复制 deepcopy

什么是深复制?为什么要深复制?

看一下下面这个例子

1
2
3
4
5
6
7
8
import copy
a=[1,2,[3,4]]
b=copy.copy(a)
print(id(a[0])==id(b[0])) #true
print(id(a[2][0])==id(b[2][0])) #true
b[2][0]=15
print(a) #[1, 2, [15, 4]]
print(b) #[1, 2, [15, 4]]

可以发现列表中的列表并没有被改变地址

因此需要deepcopy 相当于完完全全的重新复制出的一个东西,地址都不同

1
2
3
4
5
6
7
8
9
import copy
a=[1,2,[3,4]]
b=copy.deepcopy(a)
print(id(a[0])==id(b[0])) #true
print(id(a[2][0])==id(b[2][0])) #true
b[2][0]=15
print(id(a[2][0])==id(b[2][0])) #flase
print(a) #[1, 2, [3, 4]]
print(b) #[1, 2, [15, 4]]

Q:上面这个例子有一点很奇怪,就是用了deepcopy/copy后为什么地址还是不变呢?

A:因为python里万物都是对象,所以数字也是对象。a[0]和b[0]是两个不同的指针,但他们指向的都是”数字1”这个对象的地址,所以他们的id()是相同的。

id(a[2])!=id(b[2])是因为值不同了

pickle模块

有时候用python处理数据需要很长时间,暂停后我们希望下次接着处理,这时候就要用到pickle模块

写入pickle文件

1
2
3
4
5
import pickle
a={'a':1,'b':2,'c':3}
file=open('example.pickle','wb') #wb为二进制写入
pickle.dump(a,file) #dump是倒入的意思 也就是把a倒入到file中
file.close()
1
2
3
4
5
import pickle
file=open('example.pickle','rb')
b=pickle.load(file) #加载上一次存入的
file.close()
print(b) #{'a': 1, 'b': 2, 'c': 3}

也可以直接这样用with,就免去了file.close()这一步

1
2
3
4
import pickle
with open('example.pickle','rb') as file:
b=pickle.load(file) #加载上一次存入的
print(b)

set

1
2
3
4
a={'e','a','b','a','a','c','a'}
print(set(a)) #{'b', 'e', 'c', 'a'} 去重
s='this is my test' #{'y', 't', ' ', 'i', 'e', 's', 'm', 'h'}
print(set(s))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a={'e','a','b','a','a','c','a'}
b=set(a) #此时b也变成了set类型
b.add('x') #set中在结尾添加不是append 而是add
print(b) #{'a', 'e', 'b', 'c', 'x'}
b.add('a')
print(b) #{'b', 'a', 'c', 'x', 'e'}
b.remove('x') #去掉一个值
print(b) #{'e', 'a', 'b', 'c'}
b.discard('w') #discard 与remove功能相同,但是remove不可以去掉本身就不存在的数据且会报错,而discard不会报错而是返回原来的值
print(b)
b.clear() #清空set
print(b) #set() 清空
set1={'a','b','c'}
set2={'a','x','y'}
print(set1.difference(set2)) # .difference()找出不同返回数据 {'c', 'b'}
print(set1.intersection(set2)) # .intersection()找出相同的值 {'a'}

set中怎么sort?

1
2
3
4
5
6
a={'e','a','b','a','a','c','a'}
b=set(a) #此时b也变成了set类型
print(b) #{'a', 'e', 'b', 'c', 'x'}
c=list(b) #转换成list
c.sort()
print(c) #['a', 'b', 'c', 'e']

RegEx正则表达

正则表达式 (Regular Expression) 又称 RegEx, 是用来匹配字符的一种工具. 在一大串字符中寻找你需要的内容. 它常被用在很多方面, 比如网页爬虫, 文稿整理, 数据筛选等等. 最简单的一个例子, 比如我需要爬取网页中每一页的标题. 而网页中的标题常常是这种形式.

不用特意记忆,用的时候查一下即可

正则表达式


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!