python基础函数

151 阅读10分钟

Python基础函数

  • divmod(10,5):同时获得商和余数,返回的是一个元组

运算符优先级:

![image-20230301074924479](/Users/sjh/Library/Application Support/typora-user-images/image-20230301074924479.png)

  • 乘除优先于加减
  • 位运算符和算数运算符>比较运算符>赋值运算符>逻辑运算符

类型识别:

  • 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):删除列表中首次出现的x
    • list.pop([index]):删除并返回列表中index位置的项,默认删除最后一项
    • list.clear():清空列表中所有项,并不是删除list对象
  • 查询:
    • list.index(value,[start,[end]]):列表中第一次出现x的位置,可规定查询范围,没有返回-1
    • list.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))转散列值
    • 转为散列值之后与搜索的键比对,完全一样则说明正确,否则继续查询

![image-20230308085505822](/Users/sjh/Library/Application Support/typora-user-images/image-20230308085505822.png)

  • 字典总结:
    • 键必须可散列:
      • 数字、字符串、元组都是可散列
      • 自定义对象需要支持三点:
        • 支持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():开根号