文章目录
1. 基础
使用pycharm进行python学习
REPL
:read evaluate print loop,交互式命令行
注意:作用域只有函数和类作用域,其他的变量都是全局的
1.1 hello world
print("hello world") # 带换行
print("hello world", end="") # 换行替换成空字符串
1.2 注释
单行:#
多行:'''
或"""
进行包裹
1.3 数据类型
获取数据类型:type(数据)
,如type(18)
,输出为:<class 'int'>
数据类型有:int float str
1.3.1 整数
十进制:15
二进制:0b1010
八进制:0o12345
十六进制:0x12345
进制转换:(结果为字符串)
bin()
:10转2进制
oct()
:10转8进制
hex()
:10转16进制
创建整数:int(),接收整数、小数、字符串,第二个参数用于指定进制
int()
:默认返回0
int(89)
:返回89
int(89.9)
:返回89
int('89')
:返回89
int('11110001',2)
:返回该2进制数的十进制数形式
1.3.2 浮点
创建浮点数:float(),同上
float()
:默认0.0
float(2.3e8)
:可以使用科学计数法
注意:浮点数存在精确问题:print(1.1+2.2-3.3)
解决方案:
decimal
模块,小数
from decimal import Decimal
Decimal('1.1')+Decima('2.2')-Decimal('3.3') # 结果为0.0
fractions
模块,分数
from fractions import Fraction
Fraction(11,10)+Fraction(22,10)-Fraction(33,10) # 结果为0.0
1.3.3 布尔类型
有两个值:True False
True == 1
False == 0
True+False+5
:结果为6
1.4 运算符
常见的:+ - * /
特殊的:整数除://,如:print(9//4)
结果为2
特别注意:整数除在存在负数的情况为:倍数求解,即被除数=除数*倍数+余数
,一个原则是:余数必须在[除数,0]或[0,除数]之间!
9 // 4 # 2
9 // -4 # -3 9 = -4 * -3 + -3
-9 // 4 # -2 -9 = 4 * -3 + 3
-9 // -4 # 2 -9 = -4 * 2 + -1
取余运算符:%
9 % 4 # 1
1.25 % 0.5 # 0.25
9 % -4 # -3
-9 % 4 # 3
-9 % -4 # -1
幂运算:**,如:3**2
,结果为9,或使用pow(3,2)
布尔运算:and or not
赋值运算符:=,支持连等赋值!
赋值加运算:+= -= *= /=
比较运算符:> < == >= <= != is
is not
(is用于比较是否是同一对象,比较地址)
a=b=[1,2]
c=[1,2]
a==b #True
a==c #True
a is b #True
a is c #Flase
1.4.1 不可变类型对象比较is
注意:不可变对象内存可能会被重用
a = 18
b = 18
id(a) == id(b) #True
a is b #True
1.4.2 链式比较
a = 5
0 < a < 10 #True
1 == 2 < 3 #False
1 == 2 and 2 < 3 #False
1.5 关键字
查看所有关键字:help()
进入手册,再查询keywords
导入keyword模块也可以看到:
import keyword
keyword.kwlist
1.6 标识符
命名规则:区分大小写,不能为关键字,字母数字下划线的组合,不能以数字开头
1.7 None
用于表示数据不存在,该对象占据内存空间,常用于初始化或重置对象:a = None
1.8 运算符优先级和结合性
优先级相同时,看结合性,加减乘除都是左,赋值运算为右,and优先于or结合性都为左
建议使用小括号
1.9 range类
一种序列类型,表示不可变整数序列,包头不包尾
格式:
range(stop)
range(start,stop)
range(start,stop,step)
整数序列起始值默认为0,默认步长为1
print(list(range(5)) # [0,1,2,3,4]
print(list(range(0,-4,-20)) # [0,-4,-8,-12,-16]
注意:range()函数返回的是一个迭代器对象,可以使用list()进行转换
注意:range对象优点:节省内存空间,所有range对象使用空间都相同,只有使用时才会去计算
注意:range属于序列类型,可以使用in
或not in
来检查其中是否包含值
1.10 列表
相似的有:列表、元组、字典、集合
特点:
- 内部数据都是有序的
- 每个数据都有两个整数索引:通过任意索引总能映射到唯一数据
- 列表数据可重复
- 列表数据可存储任意类型,可以混合存储
- 列表占用空间会动态改变,增加或减少
列表长度:len(列表)
1.10.1 创建列表
格式:[]
,如:a = [1,2,'3']
格式:list()
,如:list([1,2,'3'])
1.10.2 列表元素的索引
每个元素都有两个整数类型的索引,一正一负:
正索引:左侧从0开始,依次增1
负索引:右侧从-1开始,依次减1
获取索引:只返回第一个匹配元素的正索引:index(元素,[start[,stop]])
:如L.index(3)
,如果列表中不存在指定元素会报错
1.10.3 获取列表元素
列表[索引]
:如L[10]
或L[-4]
,如果索引不存在会报错,索引越界
列表[start:stop:step]
:切片,得到原始列表的拷贝,不包括stop元素
不指定step,默认步长1
当step为正:(正向)
不指定start,默认第一个元素
不指定stop,默认最后一个元素
当step为负:(反向)
不指定start,默认最后一个元素
不指定stop,默认第一个元素
注意:切片允许索引越界!!超出索引则默认取到边界值
slice(start,stop,step)
:内置函数切片,start,stop和step默认都是None
L[1:7]
L[slice(1,7,None)]
1.10.4 判断是否存在指定元素
in
:判断,存在True,不存在False,5 in L
not in
:判断,不存在True,存在False,5 not in L
1.10.5 修改元素
L[2]=5
:一次改一个
L[1:4]=[1,9,2]
:一次改多个
L[1:4]=[9]
1.10.6 增加元素
列表.append(元素值)
:列表追加
列表.extend(列表)
:列表连接
列表.insert(索引,元素)
:在某个索引位插入元素
L[2:2]=[8,9,0]
:在索引为2的位置插入