总结2

总结2

基本数据类型及其常见操作和内置方法

布尔值bool

布尔值是表示事物真假两个状态的数据类型,它更偏向于最终做出决定的结果。

存储形式:True表示真、对、可行;False表示假、错、不可行

除了True/False表示布尔状态,还有其他数据也带有布尔属性,又可以被认为是隐式布尔值。

整型int和浮点型float

整型和浮点型都是用来记录数字的数据类型,简单来说,整型记录整数,浮点型记录小数

类型转换

用int()转换其他数据变为整数,主要是对浮点型进行强制转换

用float()转换其他数据变为浮点数,可以识别字符串中一个小数点转换为浮点小数。

进制转换

对于整数来说,有二进制、八进制、十进制、十六进制之分(常见)

bin(),oct(),int(),hex()进行互相的转换。

数字在显示上采取前缀0b\0o\0x来代表2、8、16进制。

字符串str

用来记录字符组合的数据类型,是不可变类型数据。

定义

s1 = 'my type is str'
字符串使用引号引起来,在python中可以是单双引号,可以是连续三个单双引号。

类型转换

字符串可以将所有的数据类型变成字符串

字符串基础操作

  1. 索引取值 -- [数字]

  2. 切片操作 -- [num1:num2:num3]

    • 可以通过指定头尾索引的方式来切出一个新的字符串
    • num3默认为1不写,可以通过它修改方向或步长
    • 还有分别省略数字1,2,3的写法,都是有默认值的

    联系:在后续列表和元组的操作中,所有的索引取值和切片操作都一模一样。

  3. 统计字符串的长度 -- len()

    len()可以统计字符串、列表、字典、元组、集合的长度,对应各种数据类型最小元素的个数。

字符串之输入输出操作

  1. 输入——input

    变量 = input(提示信息)
    # input会先向用户打印一些提示信息,然后等待用户输入,输入后得到字符串,可以赋值给变量。
    

    注意:input从用户获取的数据都是字符串类型的数据,我们可以从下面的知识了解

    python2与python3的input关键字区别

    python2的逻辑是要求用户输入相应数据类型的形式,并存储为相应的类型。
    甚至在输入不带引号的aa时,会报错,因为字符串应该是带引号的。
    这十分不符合方便用户的操作逻辑。
    而python2中也有与python3的input功能一样的关键字raw_input
    
  2. 输出——print()

    括号内可以放多个变量或者数据值,用逗号隔开

    当用print打印字符串时会自动换行,可以通过end=取消换行

  3. 格式化输出——占位符

    在python中,最基本输出就是用print函数将数据以字符串形式打印出来。

    而字符串的格式化输出则有占位符内置函数format以及f方法变种

    %s%d,将这两个符号放到字符串的某个位置,可以利用语法对其进行替换。

    在字符串或者字符串变量后面跟上%,再跟上一个数据值,那么print就会输出一个替换掉%s的字符串或者替换%d的数字,这就是占位符的用法。占位符有以下几个用法:

    • 多个占位符出现在一个字符串中

      多个占位符必须要有对应个元素进行替换,多了不行,少了也不行。

    • 填充0至多少位

      %05d的意思是如果不足5位则填充至五位,且用0填充

    • %s常见类型数据都支持替换,%d只支持数字

  4. 格式化输出——format()

    内置方法,字符串中含{},后续跟format(变量1,变量2……)

    • 等价于占位符

    • 索引取值并支持反复使用

    • 关键字取值

  5. 格式化输出——f''

    优点在于,不需要后接format并且整理变量与数据,想用时去调用已有变量就可以了

    name = 'jason'
    age = 30
    f'{name} is {age} years old'  # 这个方法可以随时引用前面赋值过的变量
    'jason is 30 years old'
    

字符串的内置方法

  1. 移除字符串首尾的字符(默认移除空格)—— strip()

  2. 按指定的字符分割字符串生成一个列表 —— split()

后续的内置方法使用频率稍低一些

  1. 转换大小写 —— upper(),lower()
  2. 判断大小写 —— isupper(),islower()
  3. 判断纯数字 —— isdigit()
  4. 替换字符串中指定的内容 —— replace(旧内容,新内容)
  5. 字符串的拼接
    • 用运算符 # 不建议,因为底层效率较低
    • 内置方法 —— join(所有元素都是字符串的列表) # 这个拼接的效率高些
  6. 统计指定字符出现的次数 —— count(指定的字符)
  7. 判断字符串的开头和结尾 —— startswith(),endswith()

后续的使用频率更低了

  1. 大小写相关

    • 每个单词首字母大写 —— title()
    • 首个单词首字母大写 —— capitalize()
    • 转换所有字母的大小写 —— swapcase()
  2. 根据内容找索引 —— find()、index()

列表list

用来存储多个数据值的数据类型,是可变类型的数据。

定义

l1 = []
l2 = [1, 2, 3]
中括号括起来,用逗号隔开所有元素

类型转换

list(其他数据类型)
包括能够被遍历(能被for循环的)的类型,如元组、字符串、字典、集合

列表基础操作

  1. 索引取值

  2. 切片操作

  3. 统计列表长度(元素个数)—— len()

  4. 对某个数据值修改 —— 根据索引赋值

列表内置方法

  1. 列表添加数据值

    • 尾部添加单个数据值 —— append(新元素值)

    • 任意位置添加数据值 —— insert(插入位置,新元素值)

    • 拼接/扩展列表 —— extend(尾部将拼接的列表)

  2. 删除列表数据

    • 通用删除关键字 —— del(索引找值)

    • 数据值查找删除 —— remove(删除内容)

    • 索引查找弹出 —— pop(删除内容的索引)

      pop会返回删除的内容

  3. 排序 —— sort(reverse = True)

    如果括号里没写reverse则默认升序排列,写了则降序排列

  4. 统计某数据值出现次数 —— count()

  5. 颠倒列表的顺序 —— reverse()

字典dict

字典相对于列表,是将索引的顺序关系变成了键值对的搜索关系,键是对值的描述,每个键值对之间逻辑上不存在顺序关系。

定义

变量名 = {键1:值1,键2:值2}
大括号括起来,键与值之间用冒号隔开,每个键值对之间用逗号隔开。

类型转换

字典的类型转换要求苛刻,一般不会使用

dict([['key1', 1], ['key2', 2]])  # 只能转换多元素的类型,且每个元素中还要有两个元素
# {'key1': 1, 'key2': 2}

常用操作与内置方法

  1. 按k取值

  2. 用内置方法get取值(推荐)—— get()

  3. 修改值的数据

    user_list['kaka'] = '110'  # 当键存在时,这一句就是修改对应的值
    
  4. 新增键值对

    user_list['lulu'] = '119'  # 当键不存在的时候,这一句就是新增键值对
    
  5. 删除数据 —— del(按k找值)、pop(要弹出键值对的k)

    pop会返回删除的键值对

  6. 统计字典中键值对个数 —— len()

  7. 字典三剑客

    • 拿到所有键 —— keys()

    • 拿到所有值 —— values() 也是用字典直接取到值的唯一方法

    • 拿到所有键值对 —— items()

补充说明(使用频率低)

  1. 快速生成有默认值的字典 —— fromkeys(字典键的列表,默认值)

  2. 添加键值对 —— setdefault()

    当键存在时不操作,当键不存在时新增键值对

  3. 弹出键值对 —— popitem()

元组tuple

元组是可以容纳多个元素值的数据类型,但是与列表不同,它每个索引对应的数据‘不变’,是不可变类型的数据。

定义

t1 = (1, 2, 3, 4)
元组用小括号括起来,每个元素之间用逗号隔开

类型转换

tuple()
# 可以转换可遍历的数据类型

常见操作

  1. 索引取值

  2. 切片操作

  3. 统计元组元素个数 —— len()

  4. 统计元组内某个数据值的出现次数 —— count()

  5. 得到元组指定数据值的索引值 —— index()

  6. 注意事项

    1.元组内如果只有一个元素,那么逗号不能少
    2.元组内索引绑定内存地址不能修改
    3.元组不能新增或删除类型
    

集合set

集合是容纳不重复的多个元素的数据类型,有无序,无重的特点。

定义

s1 = set()  # 空集合
s2 = {1, 2 ,3}
集合用大括号括起来,每个元素之间用键值对隔开,注意与字典的区分。

集合的应用场景一般用于

  • 去重
  • 关系运算

去重(类型转换)

t1 = (1, 2, 3, 2, 2, 3, 2, 1, 2)
s1 = set(t1)  # 集合不存在重复的元素的特点让它具备去重的功能
t1 = tuple(s1)
t1  # (1, 2, 3)

关系运算

  • &and符表交集

  • -减号符表独有

  • |管道符表并集

  • ^向上箭头表各自独有

  • ><大小于号判断包含

python中的各种运算符

基本运算符

+-*/%取余 //取整 **幂运算

比较运算符

比较运算符会产出布尔类型的数据值,有:

>   <   >=     <=    ==等于     !=不等于      =是赋值符号不是比较运算符
print(2 >= 2)  # True

赋值运算符

除了常规的赋值运算符=,python还提供了很多便利的赋值语法。

  1. 链式赋值

    a = b = c =10   # 三个变量同时绑定了同一个值
    
  2. 交叉赋值

    m, n = n, m  # 即可交换两个变量的值
    
  3. 解压赋值

    t1 = (111, 222, 333)
    a, b, c = t1
    # 等同于
    a = t1[0]
    b = t1[1]
    c = t1[2]
    

    *变量名可以接收所有没有被接收的变量并组合成列表

    l1 = [111, 222, 333, 444, 555]
    a, b, *c = l1
    print(a, b, c)  # 111 222 [333, 444, 555]
    # 不仅可以在最尾部接收还可以在中部
    a, b, *c, d = l1
    print(a, b, c, d)  # 111 222 [333, 444] 555
    

逻辑运算符

我们常听到的与、或、非就是逻辑运算

Python中对应的关键字为and|or|not

  • and-与

    and两侧的两个条件都成立则得出成立,即True属性

  • or-或

    or两侧的两个条件,只要一个是成立的,则成立,即True属性

  • not-非

    非,即真假转换,成立前面加个not就是不成立

and\or\not混用时的优先级顺序,这个顺序是存在的,但是并不需要记忆,我们应该用括号来划分条件判断的优先级,不然这样的程序是难以识别的。

成员运算符

成员运算符in用于判断一个数据值是否存在于字符串、元组、列表、集合和字典中。

  • 列表成员判断

    最小的元素是列表中的元素,元素所含的字母不能做运算

    同样也适用于元组和集合。

  • 字符串成员判断

    字符串的最小元素是一个字,也可以是字的组合

  • 字典成员判断

    字典只有键参与成员运算,其键对应的值不参与成员运算

身份运算符

身份运算符is判断的是两侧的数据值是否存在一个地址中。

垃圾回收机制GC

无法通过变量找到的数据值,我们称之为‘垃圾’,而在python语言中,会自动的回收这些垃圾,而回收的逻辑原理有十二字真言:引用计数、标记清除、分代回收

引用计数

通过对数据值绑定变量的个数进行计量,新建立引用时+1,断开引用时-1,当绑定变量个数为0时视为垃圾被回收。

标记清除

标记清除主要是用于解决循环引用的问题。循环引用无法把引用计数清0。

当内存占用临界时,程序会停止运行,扫描程序中的所有数据,把产生循环的数据打上标记,最后清除掉,名为标记清除。

分代回收

有策略的减少标记清除的频率,使程序进行的流畅。策略是对多次都为被回收的数据值减少扫描。

流程控制

流程结构分为顺序结构、分支结构、循环结构,它们能够满足大部分的逻辑判断,对流程结构进行控制就是流程控制。顺序结构就是依次执行每行代码,无需特殊控制(底层已经写好了)。

分支结构-if

分支结构的主要关键字是if,它控制的是当满足某条件时,去执行某种操作,如果不满足该条件,则不执行那种操作或者转去做另外分支的操作。

if关键字

  • if后跟条件,再跟一个冒号
  • 如果if后的条件成立了,那么执行缩进的代码
  • 缩进的代码的缩进位数必须相同

扩展:子代码块

  • 相同缩进的代码块代表同级代码块
  • 顶格的代码都是顶级代码
  • python缩进的规范是4个空格(pycharm中可以用tab键)
  • 不是所有的代码都能拥有子代码块,if关键字是可以拥有子代码块的关键字之一

else关键字

  • else关键字和if同级,在if的下面
  • else有子代码块

else关键字的意思是:if条件没有满足时,则运行else下方的子代码块。

elif关键字

  • elif需要跟条件,并在执行到它时对条件进行判断
  • elif与if和else同级,夹在两者之间。
  • elif有子代码块

elif的意思是:当它上面所有的if、elif后面的条件都不满足时,而它后面的条件满足了,则执行它的子代码块。

循环结构-while

循环结构指不断的重复执行某些代码,这些代码也许会有变量、状态等变化,但是代码的内容不变时,会用到循环结构。

while关键字

  • while后需要跟条件
  • while下需要跟子代码块,名为循环体

while的在满足条件时执行子代码块,子代码块执行完毕后,会回到while后的条件判断,如果还满足则继续从头执行子代码块,如此循环往复。当条件判断不满足时会退出循环。

break关键字

  • break单独一行
  • break只能在循环体中
  • 常配合分支结构使用

在循环体中碰到break后,会立即终止循环。与分支结构搭配使用即当满足一定条件时可以终止循环

continue关键字

  • continue单独一行
  • continue只能在循环体中
  • 常配合分支结构使用

在循环体中碰到continue后,会立即结束本轮的循环,返回while的条件判断处决定是否进行下一轮循环。

循环结构-for

for关键字

  • for 变量名 in 遍历的数据:
  • for关键字有子代码块

for循环会依次从遍历的数据中取出数据,并存到变量中,然后执行子代码块,子代码执行完后,进行下一次遍历取值,再次执行循环体,如此循环往复。当取完遍历数据中的元素值后结束循环。

for中break和continue

  • break用法不变,终止循环体
  • 碰到continue结束本轮循环,返回取值阶段,取下一个值进行下一轮循环。

range语法

  • range(num1)

    生成一个长度为num1的列表,从0到num1-1

  • range(num1,num2)

    生成一个列表,头一个元素为num1,最后一个元素为num2 -1

  • range(num1,num2,num3)

    生成一个列表,在以上基础上,加入步长概念。

经常搭配for使用用于循环遍历取值,或者单纯的控制for循环的次数

ps:range不是真的生成一个列表,而是一个会不断产生值的厂间,产生的顺序与遍历上述情形中的列表一致

字符编码理论

字符编码就是将字符与计算机语言底层的0101二进制组合对应起来。

字符显示在电脑发展的过程中经历了很大的变化,所以有很多不同的版本。

当我们使用某种编码将字符进行编码,而当解码时发现乱码,则大概率是字符编码的版本不一致导致的,这种时候,就要用更换编码版本尝试解码。

posted @ 2022-10-07 20:12  leethon  阅读(167)  评论(0编辑  收藏  举报