Python基础函数
divmod(10,5):同时获得商和余数,返回的是一个元组
运算符优先级:

- 乘除优先于加减
- 位运算符和算数运算符>比较运算符>赋值运算符>逻辑运算符
类型识别:
id(obj):获取obj的id号,地址号value(obj):获取obj的值del obj:销毁obj对象type(obj):获取obj的数据类型
类型转换:
int():符合整型规则字符串或浮点型转为整型float():将其他类型转为浮点型round():四舍五入
字符串相关:
let str='my name is sjh'
查询操作
| 方法使用 | 说明 | 结果 |
|---|---|---|
| len(str) | 获取字符串长度 | 14 |
| str.startswith('my') | 判断字符串是否以’my‘开始 | True |
| str.endswith('sjh') | 判断字符串是否以’sjh‘结尾 | True |
| str.find('n') | 获取’n‘第一次出现的位置 | 3 |
| str.rfind('s') | 获取’s‘最后一次出现的位置 | 11 |
| str.count('m') | 指定字符串出现的次数 | 2 |
| str.isalnum() | 所有字符都是字母或数字 | True |
大小写转换
-
str='my name is SJH'
| 方法使用 | 说明 | 结果 |
|---|---|---|
| str.capitalize() | 产生新的字符串,首字母大写 | 'My name is SJH' |
| str.title() | 产生新的字符串,每个单词都首字母大写 | 'My Name Is SJH' |
| str.upper() | 产生新的字符串,所有字母大写 | 'MY NAME IS SJH' |
| Str.lower() | 产生新的字符串,所有字母小写 | 'my name is sjh' |
| str.swapcase() | 产生新的字符串,所有字母大小写转换 | 'MY NAME IS sjh' |
修改操作
| 方法使用 | 说明 | 结果 |
|---|---|---|
| str.strip('*') | 去除首尾的多个星号 | 'a*b*c' |
| str.lstrip('*') | 去除首部的多个星号 | a*b*c*' |
| str.rstrip('*') | 去除尾部的多个星号 | *a*b*c |
-
ord():字符串转unicode编码 -
chr(): Unicode编码转字符串 -
len(): 查询字符串长度 -
input():用户主动输入 -
str.replace():修改字符串中的字符,(字符串中的字符不允许直接修改,会报错)-
a='abc' b=a.replace('c','b') a#'abc' b#'abb'
-
-
slice():截取,截取整个字符串中的一部分-
用法:str[起始偏移量:终止偏移量:步长],==左开右闭==
- 起始偏移量:从第几位开始
- 终止偏移量:到第几位结束
- 以几个字符为一步提取:向后移几位
-
str='sdsaasafvsa' s str1=str[:] #sdsaasafvsa 截取所有 str2=str[:2] #sd. 截取0到2 str3=str[2:] #saasafvsa 截取2到后边的 str4=str[1:5] #dsaa 截取第1位开始,到5前一位的 str5=str[1:5:2] #da 从第一位开始,每两步取一位 #其他操作(三个量为负数) str[-3:] #从-3位开始到最后 str[-8:-3] #从-8开始,到-3 str[::-1] #从最后一位开始一位一位取,全部翻转
-
-
str.split():分割字符串,以某个字符分割字符串-
str='abcabcbac' str.split(c) ['ab','ab','ab']
-
-
str.join(arr):用str内容拼接arr中的每一项-
arr=['aaa','bbb','ccc'] str='123' str.join(arr) 'aaa123bbb123ccc123'
-
格式排版
str='xyz'
| 方法使用 | 说明 | 结果 |
|---|---|---|
| str.center('*',10) | 生成新字符串,原字符串内容在中间,不足10位用*号填充 | '***xyz****' |
| str.ljust('*',5) | 生成新字符串,原字符串内容在左边,不足5位用*号填充 | 'xyz**' |
| str.rjust('*',5) | 生成新字符串,原字符串内容在右边,不足5位用*号填充 | '**xyz' |
其他方法
str='xyz'
| 方法使用 | 说明 | 结果 |
|---|---|---|
| str.isalnum() | 是否全部为数字和字母 | True |
| str.isalpha() | 是否只有字母组成(含汉字) | True |
| str.isdigit() | 是否只有数字 | False |
| str.isspace() | 是否为空白符 | False |
| str.isupper() | 是否全为大写字母 | False |
| str.islower() | 是否全为小写字母 | True |
字符串格式化
-
字符串通过
{索引}来占位,再通过format方法实现字符串动态填入, -
字符串也可以通过
{参数名},定义参数,通过format指定参数的方式动态填入 -
可以在花括号中加入^,<,>实现填充对齐,分别表示居中,居左,居右对齐
#索引占位
str='我叫{0},我的年龄是{1},{0}是我的真实名字'
str.format('sjh',18) #'我叫sjh,我的年龄是18,sjh是我的真实名字'
#参数名占位
str1='我叫{name},我的年龄是{age},{name}是我的真实名字'
str1.format(name='sjh',age=18) #'我叫sjh,我的年龄是18,sjh是我的真实名字'
#填充对齐
str2={0:*^5d}
str2.format("sjh")#'*sjh*'
| 格式 | 说明 |
|---|---|
| {:.2f} | 小数点后余两位 |
| {:+.2f} | 带符号留两位小数 |
| {:.0f} | 不带小数 |
| {:0>2d} | 0从左边补齐 |
| {:,} | 三位一逗号的数字形式 (1,000,000,000) |
| {:.2%} | 百分比形式 |
| {:10d} | 默认右对齐 |
| {:<10d} | 左对齐 |
| {:^10d} | 中间对齐 |
可变字符串
-
python中字符串不可变,如果实在想变可把字符串转化为==io.StringIO对象==或==数组==
-
io.StringIO
-
import io str='hello obj' obj=io.StringIO(str) obj.seek(7) obj.write('a') obj.getvalue() #'hello abj'
-
列表(list)相关[]:
- 增加:
list.append(item):数组在末尾添加一项,修改原列表(==推荐==)list.extend(nlist):将nlist所有项添加到list最后,修改原列表(==推荐==)list.insert(index,item):在列表中某位置插入一项,修改原列表list1+list2:生成新列表,原列表对象不改变['stx',100]*3:生成新列表
- 删除:
del list[index]:删除列表中某一项list.remove(x):删除列表中首次出现的xlist.pop([index]):删除并返回列表中index位置的项,默认删除最后一项list.clear():清空列表中所有项,并不是删除list对象
- 查询:
list.index(value,[start,[end]]):列表中第一次出现x的位置,可规定查询范围,没有返回-1list.count(value):列表中value出现的次数(==不常用==)value in list:判断元素是否存在于数组中,存在返回True(==常用==)len(list):list列表的长度max(list):获取最大值min(list):获取最小值sum(list):数组求和
- 修改:
list.reverse():列表翻转list.sort():列表排序,==修改原对象==a=reversed(list):生成一个==迭代器==,需通过list(a)生成数组,且这个迭代器只能使用一次a=sorted(list,[reverse=True]):列表排序,==生成新的列表==list.copy():列表浅拷贝,只拷贝最外层,内层还是指向同一对象
- 截取:
list[:]:截取整个数组list[1:]:截取从1下标开始,到结尾list[:5]:截取从0开始,5-1结尾list[1:5]1开始5-1结尾list[1:5:2]:1开始4结尾步长为2- 负数则是从最后开始
range([start],end,[step]):range可以非常方便的创建整数列表,range()返回的是一个range对象,需要list再转化成列表- start:起始数字
- end:结束数字
- step: 步数
a=[x*2 for x in range(99) if x%9==0]
元组(tuple)相关():
==列表属于可变序列,可任意增删改,元组属于不可变序列,不可修改==
- 元组创建:
tuple():创建一个空元组tuple(可迭代对象):字符串/range/list等,转换成元组
a=(10,20,30):创建元组a=10,20,30:创建元组
- 新增:
a+b:生成一个新的元组对象
- 查询:
tuple[:]:截取所有元组len(a):获取长度min(a):获取最小值max(a):获取最大值sum(a):求和
- 其他:
sorted(a):==元组中没有sort函数==,此内置函数生成新的排序后的元组zip(list1,list2,list3):把多个列表压缩成序列化对象,通过调用**list()**生成新的元组项列表
- 元组特点:
- 元组核心:==不可变序列==
- 元组的访问速度比处理速度快
- ==字符串、数字、元组==可作为字典的键,但列表永远不能作为字典的键
字典(dict)相关{}:
==字典是“键值对”的无需可变序列,键不可变,值可以任意变==
-
字典创建:
-
{key:value,...}:创建一个字典对象 -
dict({key=value,...}):创建一个字典对象 -
dict([(key, value),(key1,value1)]):通过元组项列表创建字典对象 -
dict(zip(k,v)):创建一个字典对象,包含多个key,value-
k=['a','b','c'] v=[10,20,30] dict(zip(k,v)) #{'a':10,'b':20,'c';30}
-
-
dict.fromkeys(['name','age','job']):创建建为None的字典对象
-
-
字典访问:
obj[key]:通过中括号获取字典某一项的值,==不存在抛出异常==obj.get(key,[不存在返回的值]):获取指定键的值,==没有返回None==obj.items():获取obj中所有键值对的列表
-
字典添加:给字典新增键值对,如果键已存在,则覆盖原有键的值
-
字典修改:
a.update(b):将b字典中的键值对覆盖到a字典中,如果存在就覆盖
-
字典删除:
del(a[name]):删除字典中指定键值b=a.pop('name'):删除字典中指定键值,并返回被删除的值a.clear():清空字典a.popItem():随机弹出一个项,可以用来一个接一个的处理项,无需再获取键列表
-
字典核心-存值:
- 字典本质上是散列表,散列表本质上是稀疏数组:==永远存在空项的数组==,接近2/3,会自动进行扩容
- 字典的每一项被称为==bucket==
- 通过
bin(hash(key))方法可以计算键名的hash散列值 - 通过当前数组的长度,从右往左拿指定位散列值,转成偏移量
- 通过偏移量检查当前项有没有存值,没有就存入,有就再拿前几位
-
字典核心-取值:
- 通过
bin(hash(key))方法计算要搜索键名的hash散列值 - 按照数组长度,拿散列值,转偏移量
- 查询偏移量位置是否有值,没有就继续取,有就通过
bin(hash(key))转散列值 - 转为散列值之后与搜索的键比对,完全一样则说明正确,否则继续查询
- 通过

- 字典总结:
- 键必须可散列:
- 数字、字符串、元组都是可散列
- 自定义对象需要支持三点:
- 支持
hash()函数 - 支持通过
__eq__()检查相等性 - 若
a==b为真,则hash(a)==hash(b)也为真
- 支持
- 字典在内存中开销巨大,典型的空间换时间
- 键查询速度很快
- 往字典里面添加新建可能导致扩容,导致散列表中次序变化,所以,==不要在遍历的同时修改字典==
- 键必须可散列:
集合(set)相关{}:
-
集合是无序可变,元素不可重复,实际上集合的底层实现还是字典,集合中所有存在的值都是字典的键对象,所以是不能重复且唯一的
-
新增:
{10,20,30,'aa'}:使用花括号创建集合set(list):使用set能将可迭代对象转为集合:列表,元组等
-
删除:
-
a.remove(item):删除指定项 -
a.clear():清除集合
-
-
交并差运算:
a|b:并集,两个集合中所有不同值的集合a&b:交集,两个集合同时存在的值a-b:差集,a存在b不存在的值a.union(b):并集a.intersection(b):交集a.difference(b):差集
序列解a包
-
序列可实现简化多个变量赋值
-
列表序列解包:
-
[name,age,height]=[10,20,30] name #10
-
-
元组序列解包:
-
(name,age,heignt)=(10,20,30) name #10 (name,age,heignt)=10,20,30
-
-
字典序列解包:
-
s={name='sjh',age=18,height=180} name,age,height=s #只获取键 name #'name' name,age,height=s.items() #获取键值对 name #('name','sjh') name,age,height=s.values()#获取值 name #'sjh' -
a,b=s:获取字典对应位置中的键 -
a,b,c=s.items():获取字典对应位置中的键值元组序列 -
a,b,c=s.values():获取字典对应位置中的值 -
a,b,c=s.keys():获取字典对应位置的键
-
第三方库相关:
随机数相关:
随机使用前需引入random库:import random
random.shuffle(list):随机打乱列表
turtle相关:
-
turtle.showturtle():启动画笔的操作 -
turtle.forward(300):向箭头指定方向移动300 -
turtle.left(90):向左转90度 -
turtle.color('red'):切换笔的颜色 -
turtle.goto(0,50): 移动到坐标系(0,50)位 -
turtle.circle(100): 以当前位置为圆边缘起点,逆时针画一个半径为100的圆 -
turtle.penup():抬起笔,移动不会再有线的痕迹 -
turtle.pendown():放下笔 -
turtle.write():描述文字
时间相关:
time.time():返回当前时间以秒为单位,距离1970年1月1日0点,带毫秒微秒的浮点数值
math相关:
math.sqrt():开根号