文章目录
笔记中代码均可运行在Jupyter NoteBook下(实际上Jupyter-lab使用体验也很棒)。
建议不要光看,要多动手敲代码。眼过千遭,不如手读一遍。
相关笔记的jupiter运行代码已经上传,请在资源中自行下载。
#在download源代码的时候要适当选择较低的版本,因为语言的源码版本越低越能看出作者的意图
python注释
python的编码格式注释:#-*- coding: utf-8 -*-
linux书写环境变量注释:#!/usr/bin/env python3
'''python中的帮助函数:help(func_name)'''
# 例子
help(input)
# 例子结束
Help on method raw_input in module ipykernel.kernelbase:
raw_input(prompt='') method of ipykernel.ipkernel.IPythonKernel instance
Forward raw_input to frontends
Raises
------
StdinNotImplentedError if active frontend doesn't support stdin.
python运算符
#算数运算符
'''python中 / 表示浮点除法 // 向下取整除法'''
# 例子
print(3/4)
print("*"*8)# python符号也可进行算数运算
print(3//4)
# 例子结束
python中的比较运算符:>,<,>=,<=,==,!=,<>(不等于的这种表示方式会逐渐淘汰)
python逻辑运算符 and,or,not
'''
python赋值运算符:=, +=, -=,*=,/=,**= (算术运算符和=相结合的操作)
python 位运算符:&[按位与,同为1,否则为假],| [按位或,二者中一个即可]
^ [按位异或,相异为1],~[按位取反,1变0,0变1],
<<[左移,乘2],>>[右移,除以2]
进制转换 :转二进制:bin(),八进制:oct(),16进制:hex(),转10进制:int()
'''
#例子
a=3
print(a<<1)
b=4
print(b>>1)
# 例子结束
# python 成员运算符:in,not in
# python身份运算符:is, is not
'''is和 == 的区别:is用于判断两个变量引用是否为同一个(即id是否相同),==用于判断变量值是否相等'''
# 例子
x=y=[1, 2, 3]
z=[1, 2, 3]
print(x is y, id(x),id(y), x==y)
print(x is z, id(x), id(z), x==z)
6
2
True 140646103441800 140646103441800 True
False 140646103441800 140646103444296 True
'''
对于python中a,b = b,a的换值方法的解析
a, b = b, a操作是将a,b的地址互换
关键在于ROT_TWO的地址互换
'''
#! /usr/bin/env python3
# -*- coding:utf-8 -*-
from dis import dis
def demo(a, b):
print(a,b)
a, b = b, a
print('new: ', a,b)
a, b = 2, 3
demo(a,b)
dis(demo)
2 3
new: 3 2
10 0 LOAD_GLOBAL 0 (print)
2 LOAD_FAST 0 (a)
4 LOAD_FAST 1 (b)
6 CALL_FUNCTION 2
8 POP_TOP
11 10 LOAD_FAST 1 (b)
12 LOAD_FAST 0 (a)
14 ROT_TWO
16 STORE_FAST 0 (a)
18 STORE_FAST 1 (b)
12 20 LOAD_GLOBAL 0 (print)
22 LOAD_CONST 1 ('new: ')
24 LOAD_FAST 0 (a)
26 LOAD_FAST 1 (b)
28 CALL_FUNCTION 3
30 POP_TOP
32 LOAD_CONST 0 (None)
34 RETURN_VALUE
比较:type()和 isinstance()
'''type()和isinstance()区别
type()不认为子类是父类的一种类型,而isinstance()认为是
isinstance()也用来判断是不是可迭代对象'''
#l例子
class A:
pass
class B(A):
pass
print("isinstance(, A(),A) is ", isinstance(A(),A))
print("type(A())==A is ",type(A())==A)
print("isinstance(B(),A) is ", isinstance(B(),A))
print("type(B())==A is ",type(B())==A)
isinstance(, A(),A) is True
type(A())==A is True
isinstance(B(),A) is True
type(B())==A is False
基本数据类型
# 变量可使用del语句删除
# 例子
vara=1
print(vara)
del vara
print(vara) # 删除后打印会报错
1
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-1f49fa2b38a1> in <module>()
4 print(vara)
5 del vara
----> 6 print(vara) # 删除后打印会报错
NameError: name 'vara' is not defined
'''
六个标准数据类型:
Number(数字),String(字符串),List(列表),Tuple(元组),Set(集合),Dictionary(字典)
不可变数据:Number,String,Tuple
可变数据:list,dict,set
'''
Number(数字)
int、float、bool、complex(复数)
#例子
complex(1,3)
(1+3j)
数学函数
'''ads(x)[绝对值],ceil(x)[向上取整],
cmp(x,y)[比较xy,x>y=1,x<y=-1,x==y=0,<python3已弃用,使用(x>y)-(x<y)>]
exp(x)[e的x次方],fabs(x)[浮点绝对值],floor(x)[向下取整],
pow(x,y)[x的y次],round(x,y)[对x四舍五入,y表示精确度]
'''
# abs()与fabs()比较
from math import fabs
print(abs(-5))
print(fabs(-5))
# round(x,y)例子
print(round(5.6482133, 5))
5
5.0
5.64821
随机数函数
'''
choice(seq)[从序列seq中随机挑一个](在模块random中)
randrange([start,]stop[,step])
random()[随机在(0-1中生成)]
seed([x])[改变随机数生成器种子]
shuffle(lst)[随机排序一个序列]
uniform(x,y)[在(x-y中随机生成一个浮点数)]
'''
# choice()例子
import random
print("choice()例子:", random.choice(range(10)))
# randrange()使用例子
print("randrange()例子:", random.randrange(1,90,1)) # 随机数范围为1-90,步长为1
# seed()不常使用
# shuffle()例子
var_shuffle_ =[1, 2, 3, 4, 5]
random.shuffle(var_shuffle_)
print(var_shuffle_)
# uniform()例子
print("uniform例子:", random.uniform(1, 45))
choice()例子: 0
randrange()例子: 79
[3, 4, 5, 2, 1]
uniform例子: 4.053759455798719
from math import pi
print(pi)
3.141592653589793
字符串
'''
原始字符串:r/R
'''
#例子
a = r'test\n'
print('test\n')
print(a)
test
test\n
格式化输出
# 格式化输出可以用% 和"str".format()
# "str".format()中在字符串"str"中用{[var]}表示变量,[var]为可选的变量名
# 这里注意:{}中无变量名,切未指示位置的时候,无变量名的参数应在有变量名的参数的位置前面
# 在{}中表示数字时用':'(冒号),表示数字格式化
# format()还可以在"str"的{}中通过指定位置来输出
# 在format中对大括号的转义用{},例子{{}}
'''
%c[字符,或ascii码]
'''
print("这是 %s" %('用%格式化输出例子'))
# format()格式化输出例子
print("这是{name}{}".format('有无变量名混用的例子', name='format'))
print("这是{0}而不用{1}的例子,{1}{0}".format("通过位置输出", "变量名输出"))
from math import pi
print("这是数字格式化例子:输出保留两位小数的pi{:.2f}, 不设置保留位数的pi={ppi}".format(pi,ppi=pi))
print("format对{{}}的转义例子输出".format())
这是 用%格式化输出例子
这是format有无变量名混用的例子
这是通过位置输出而不用变量名输出的例子,变量名输出通过位置输出
这是数字格式化例子:输出保留两位小数的pi3.14, 不设置保留位数的pi=3.141592653589793
format对{}的转义例子输出
字符串内建函数
'''
capitalize()[首字母大写],
center(width,fillchar)[在宽度为width的输出空间中居中显示fillchar字符串],
count(str,beg=0,end=len(string))[统计str在string中出现的次数,
若beg或end指定,则返回指定范围的次数],
bytes.decode(encoding="utf-8",errors="strict")[指定解码,
用的是bytes对象的方法]
encode(encoding="utf-8",errors='strict')[指定编码方式]
查找:find,index,rfind,rindex(相同都返回下标,不同,-1,异常)
replace(原,现):替换
split(切割符) :切割
capitalize:单个首字母大写
title:全部首字母大写
endswith(str):判断结尾
startswith(str):判断开头
rjust(int),ljust(int),center(int):在int个字符中右左中对齐
strip():去掉str两边空格,\n
partition(str):以左起第一个str分割为元组
split(str):以str分割
isalpha():是否纯字母
isalnum():是否数字字母组合
isdigit():是否纯数字
str.join(a,b):以str连接a,b
'''
列表 list
'''
列表切片:list[start:end [:step(默认为1)]]
'''
# 列表生成器
[x for x in range(0,10,2)]
[0, 2, 4, 6, 8]
增
''' list.
append():追加(整体添加)
insert(位置,内容):添加
extend(list):追加list(合并list)
'''
#例子
A=[12,34,55]
B=['aa','bb']
print('this is A:',A,'\nthis is B:',B)
A.append(666)
print('this is A.append(666)',A)
B.insert(1,'this is 1')
print('this is B.insert:',B)
A.extend(B)
print('A.extend(B)',A)
this is A: [12, 34, 55]
this is B: ['aa', 'bb']
this is A.append(666) [12, 34, 55, 666]
this is B.insert: ['aa', 'this is 1', 'bb']
A.extend(B) [12, 34, 55, 666, 'aa', 'this is 1', 'bb']
删
''' list.
pop():默认最后一个
remove(str):删除str内容
clear():清空列表
del list[position]:删除列表中的某个元素
'''
#例子
A=[11,22,33,44]
print(A)
print('*'*8)
print("list.pop()操作")
#A.pop()会返回弹出值
print(A.pop())
print(A)
print('*'*8)
print("del list[position]操作")
del A[1]
print(A)
print('*'*8)
print("list.remove()操作")
A.remove(11)
print(A)
print('*'*8)
print("list.clear()操作")
A.clear()
print(A)
[11, 22, 33, 44]
********
list.pop()操作
44
[11, 22, 33]
********
del list[position]操作
[11, 33]
********
list.remove()操作
[33]
********
list.clear()操作
[]
改
'''
直接用下标进行修改
'''
#例子
A=[11,22,33]
print(A)
print('*'*8)
A[0]="changed"
print(A)
[11, 22, 33]
********
['changed', 22, 33]
查
'''
in:布尔值
list.index:下标,异常
'''
#例子
A=[11,22,33]
print(11 in A)
print(A.index(1234))
True
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-17-f32251f40118> in <module>()
7 A=[11,22,33]
8 print(11 in A)
----> 9 print(A.index(1234))
ValueError: 1234 is not in list
其他内置函数
''' list.
count(obj) 统计obj出现次数
reverse() 反向排列
sort([key=None,reverse=False]) 排序,key表示排序依据,
reverse表示反向,默认False
copy() 复制列表
'''
'''
len(list):list长度
max(list):list中的最大值
min(list):list中的最小值
list(seq):将元组转换为list
'''
A = [1, 2, 3, 4]
B = (22, 33)
print("对A的操作:len(A): {lena}\tmax(A):{maxa}\tmin(A):{mina}\n".format(lena=len(A), maxa=max(A), mina=min(A)))
print("对B的操作:list(B):{listb}".format(listb=list(B)))
对A的操作:len(A): 4 max(A):4 min(A):1
对B的操作:list(B):[22, 33]
元组
'''
不可更改的列表,死的
扩展通过新建一个组合元组
tuple(list):将list转换为tuple
'''
字典
增
'''
dict['key']='value'
'''
删
'''
del dict["key"] 删除键名为"key"的键值对
pop(key,[default]) 删除字典给定键的键值对,返回被删除的值,key必须给出
popitem() 随机删除并返回一对键值对(一般删除的是末尾的键值对)
'''
改
'''
键值对赋值
dict.update(dict2) 把字典dict2中的键值对更新到dict中
'''
dict_a = {'name':'value'}
dict_b = {'name':'18'}
print(dict_a)
dict_a.update(dict_b)
print(dict_a)
{'name': 'value'}
{'name': '18'}
查
'''
dict.get(key)
in
'''
其他内置函数
'''
len(dict):键值对个数
dict.keys():dict的所有键
dict.values():dict的所有值
dict.
clear() 清空字典
copy() 浅复制
fromkeys() 创建新字典
ietms() 以列表返回可遍历的键值对
'''
#例子
D={'a':'111','b':222}
print(D)
print(D.items())
D.clear()
print(D)
{'a': '111', 'b': 222}
dict_items([('a', '111'), ('b', 222)])
{}
集合 set
'''
集合中没有重复值,(集合会自动去重)
list、tuple可以有重复值,不会自动去重
字典中,当键重复时,会保留最后的那个,其他的去重(不论值是否相同)
强制类型转换得到的变量恢复到原类型用eval()
'''
增
'''set.
add() 添加元素
'''
删
'''set.
pop() 随机移除
remove() 移除指定元素,当元素不存在会报错
discard() 删除指定元素, 当元素不存在不会报错
clear() 清空
'''
其他
'''set.
copy() 拷贝
difference() 返回多个集合的差集
difference_update() 移除集合中的元素,该元素在指定的集合也存在。
intersection() 返回交集
isdisjoint() 布尔判断集合间是否包含相同元素
issubset() 子集判断
union() 并集
'''
条件控制
'''
if exp:
pass
elif exp1:
pass
else:
pass
if的各种真假判断
"",None,[],{},数字0,都表示假
'''
循环
'''
while exp:
pass
while exp:
pass
else:
pass
for var in seq: # 这里seq必须是可迭代数据
pass
break
continue
'''
'''
for循环中删除元素的坑:在循环的过程中删除元素可能出现漏删的情况。
'''
# for循环例子
a = [1,2,3,4,5,6,7]
for i in a:
print(i, end=',')
if i == 2 or i == 3:
a.remove(i)
print("\na = {0}".format(a))
#这时输出分别为1,2,4,5,6,7,和a = [1,3,4,5,6,7]
#从这里的结果可以看出在循环中漏删了3
1,2,4,5,6,7,
a = [1, 3, 4, 5, 6, 7]
'''
这里可以使用“缓存”的方法
用另一个变量临时存储要删除的变量,待循环结束后在删除
'''
# for循环解决例子
a = [1,2,3,4,5,6,7]
b = []
for i in a:
print(i, end = ",")
if i == 2 or i == 3:
b.append(i)
for i in b:
a.remove(i)
print("\na = {0}".format(a))
#此时得到的a的结果就是完全删除的结果 a = [1,4,5,6,7]
1,2,3,4,5,6,7,
a = [1, 4, 5, 6, 7]