本文基于B站 小甲鱼视频 进行总结!!!


目录

1.变量及运算

1.1变量使用规则

1.2转义字符和原始字符

1.3字符串的加法和乘法

1.4伪随机数

1.5数字类型及运算

2.分支和循环

2.1分支 if

2.2循环 while

2.3循环 for

3.列表

3.1列表定义

3.2列表下标索引输出

3.3列表切片

3.4列表方法

3.4.1内容增加

3.4.2内容删除

3.4.3内容替换

3.4.4内容查找

3.5列表运算

3.5.1加法

3.5.2嵌套列表

3.6列表拷贝

3.6.1浅拷贝

3.6.2深拷贝

3.7列表推导式

4.元组

4.1元组定义

4.2元组的通用

4.3元组打包和解包

5.字符串

5.1字符串变换

5.1.1capitalize

5.1.2casefold

5.1.3title

5.1.4swapcase

5.1.5upper

5.1.6lower

5.2字符串对齐

5.2.1center

5.2.2ljust

5.2.3rjust

5.2.4zfill

5.3字符串查找

5.3.1count

5.3.2find

5.3.3rfind

5.3.4index

5.3.5rinedx

5.4字符串替换

5.4.1expandtabs

5.4.2replace

5.4.3translate

5.5字符串判断

5.5.1startswith

5.5.2endswith

5.5.3isupper

5.5.4islower

5.5.5istitle

5.5.6isalpha

5.5.7isascii

5.5.8isspace

5.5.9isprintable

5.5.10isdecimal

5.5.11isdigit

5.5.12isnumeric

5.5.13isalnum

5.5.14isidentifier

5.5.15iskeyword

5.6字符串截取

5.6.1lstrip

5.6.2rstrip

5.6.3strip

5.6.4removeprefix

5.6.5removesuffix

5.7字符串拆分

5.7.1partition

5.7.2rpartition

5.7.3split

5.7.4rsplit

5.7.5splitlines

5.8字符串拼接

5.8.1join

5.9字符串格式化

5.9.1format基本语法

5.9.2format插入方法

5.9.3format对齐

5.9.4format +- 使用

5.9.5format精度

5.9.6format整型输出格式

5.9.7format浮点数输出

5.9.8 f-字符串

6.序列

6.1序列运算符

6.1.1 +

6.1.2  *

6.1.3 is

6.1.4 is not

6.1.5 in

6.1.6 not in

6.1.7 del

6.2序列函数

6.2.1 list

6.2.2 tuple

6.2.3 str

6.2.4 min

6.2.5 max

6.2.6 len

6.2.7 sum

6.2.8 sorted

6.2.9 reversed

6.2.10 all

6.2.11 any

6.2.12 enumerate

6.2.13 zip

6.2.14 map

6.2.15 filter

6.2.16 iter

6.2.17 next

7.字典

7.1字典创建

7.2字典内容操作

7.2.1 增加

7.2.2删除

7.2.3清空

7.2.4修改

7.2.5查找

7.3字典获取

7.3.1 items

7.3.2 keys

7.3.3 values

7.3.4 len

7.3.5 in & not in

7.3.6 list

7.3.7 iter

7.3.8 reversed

7.4字典拷贝

7.5字典嵌套

7.6字典推导式

8.集合

8.1集合创建

8.2集合唯一性

8.2.1

8.2.2 集合内容访问

8.2.3集合内容去重

8.3集合函数生成新集合

8.3.1 copy

8.3.2 isdisjoint

8.3.3 issubset

8.3.4 issuperset

8.3.5 union

8.3.6 intersection

8.3.7 difference

8.3.8 symmetric_differnece

8.4 集合函数修改原集合

8.4.1 update

8.4.2 intersection_update

8.4.3 difference_update

8.4.4 symmetric_difference_update

8.4.5 add

8.4.6 remove

8.4.7 discard

8.4.8 pop

8.4.9 clear

8.5可哈希

8.5.1基本概念

8.5.2语法

8.6散列表

9.函数

9.1函数基本概念

9.1.1函数定义

9.1.2函数的参数

9.1.3函数的返回值

9.2函数参数

9.2.1位置参数

9.2.2关键字参数

9.2.3默认参数

9.2.4收集参数

9.2.5解包参数

9.3函数作用域

9.3.1局部作用域

9.3.2全局作用域

9.3.3语句 global

9.4嵌套函数

9.4.1嵌套函数定义

9.4.2语句 nonlocal

9.5 LEGB规则

10.闭包

10.1闭包基本定义

11.装饰器

11.1单装饰器

11.2多装饰器

11.3装饰器+输入参数

12.lambda表达式

13.生成器

13.1生成器基本规则

13.2生成器表达式

14.算法

14.1递归

14.1.1递归基本规则

14.1.2递归-阶层

14.1.3递归-斐波那契数列

14.2汉诺塔



1.变量及运算

1.1变量使用规则

(1)变量可以以中文起头,可以单个 _

(2)变量交换   x,y=y,x

刘家森=123
李四=456
print(刘家森)
print(李四)
刘家森,李四=李四,刘家森
print(刘家森)
print(李四)

1.2转义字符和原始字符

(1)单引号中包含双引号,双引号中包含单引号,单引号中有单引号使用转义字符,使用转义字符让 \ 后面的字符被认为是普通字符

(2)字符串前 加 r 表明后面字符串都为原始字符串,也就是没有转义

(3)一个 \ 在末尾 表示下行接着上行写

(4)三个 ’    三个   也可以实现换行,但要注意开始和结束的 引号 相对应

(5)用 () 可以实现换行输入,代表一句代码

(6)print(i,end=" ") 表示输出一个 i 之后 空一个接着输出

print("let's go!")
print('"every place')
print("————————")
print("D:\there\two\one\now")
print("D:\\there\\two\\one\\now")
print(r"D:\there\two\one\now")
print("————————")
print("l\
j\
s")
potry="""
刘家森
牛逼
啊
"""
print(potry)

1.3字符串的加法和乘法

字符串的加法:字符串的拼接

字符串的乘法:字符串的多次输出

print('520'+'1314')
print("刘家森\n"*3)

1.4伪随机数

利用  import 调用 random 库 即可实现下面函数

(1)random.randint(1,10) 随机产生1-10的一个整数

(2)random.getstate  获取随机数种子

(3)random.setstate  设置随机数生成器内部状态

1.5数字类型及运算

(1)python中的 0.1+0.2 不等于 0.3,这是由于精度导致。解决这个问题使用  decimal。deciaml中可以传递 整型 或者 字符型,不能传入浮点型

(2)对于 复数,python中可以实现 x.real 或者 x.imag分别实现调用输出

(3) // 地板除,对于结果取比目标结果小的整数

(4) Fraction(0,1) 代表 分子为0 分母为1

(4)逻辑运算符 and  or  not  ,其中 not 代表取反的意思

(5)短路逻辑:从左往右,只有当第一个操作数的值无法确定逻辑运算结果时,才对第二个操作数进行求值  比如说 1and2 因为结果要判断到2才能确定,所以结果为2

import  decimal
a=decimal.Decimal('0.1')
b=decimal.Decimal('0.2')
print(a+b)
c=0.1
d=0.2
print(c+d)
print("——————————")
x=1+2j
print(x.real)
print(x.imag)
print("——————————")
print(3/2)
print(3//2)
print("——————————")
if(3<4 and 4<5):print("true")
else:print("false")
print("——————————")
if(3<4 or 40<5):print("true")
else:print("false")
print("——————————")
if(not 3<4) :print("true")
else:print("false")

2.分支和循环

2.1分支 if

(1)if

(2)if  else

(3)if elif elif else  其中elif==else if

(4)成立执行语句  if  判断条件  else  不成立执行语句

(5)可进行分支嵌套

(6)else 可用于 while 。当while条件为假时进入else,但中途用break跳出则不进入else

if 3<5:print("对")
print("————————if else————————")
if (2==3):print("相等")
else:print("不等")
print("———————if elif—————————")
score=input("请输入分数:")
score=int(score)
if (score==2):print("2")
elif (score==3):print("3")
elif(score==4):print("4")
else:print(0)
print("——————if其他写法——————————")
a=10
b=20
smart=a if a<b else b
print(smart)
print("———————分支嵌套—————————")
if(3>5):print("3>5")
else:if(3>4):print("3>4")else:print("3<4")

2.2循环 while

(1)while 判断条件 执行语句

i=1
while i<=9:j = 1while j<=i:print(j,"*",i,"=",j*i,end=" ")j+=1print()i+=1

2.3循环 for

(1)for 变量 in 可迭代对象 :执行语句

(2)range(stop)生成0,stop-1的整数   range(start,stop)生成一个start,stop-1的整数 range(start,stop,step)step是改变的步进

注意事项:rangr(5,5)此时没有数字   range(4,5)此时只有4

for each in "hello":print(each)
print("————————range(stop)————————————")
for i in range(10):print(i,end=" ")
print("————————range(start,stop)————————————")
for i in range(5,5):print(i,end=" ")
print("————————range(start,stop,step)————————————")
for i in range(10,5,-2):print(i,end=" ")

3.列表

3.1列表定义

定义:可以存放不同数据类型序列

语法:【1,12,“迷惑”】

rhyme=[1,2,3.1,"刘家森"]
print(rhyme)
print("————————for输出所有列表—————————")
for each in rhyme:print(each)

3.2列表下标索引输出

(1)语法:列表名字【下标】

注意事项:(1)最后一个元素下标为 -1

(2)可以利用 len 函数找到最后元素下标,但要减1

print("————————列表下标输出—————————")
print(rhyme[0])
print(rhyme[3])
length = len(rhyme)
print(rhyme[length-1])
print(rhyme[-1])

3.3列表切片

作用:可以对列表进行多值输出,也就是按区域一次性输出很多

注意事项:(1)【:】代表从头到尾输出整个列表

(2)【:3】代表从下标0号位置输出下标为 3-1的数

(3)【3:】代表从下标为3的位置输出到所有

(4)【a:b】代表从下标a开始,输出到下标 b-1

(5)【::2】代表从左至右间距为2依次输出列表

(6)【::-1】代表从右往左间距为1依次输出列表(逆序输出)

print("————————列表切片—————————")
print(rhyme[0:3])
print(rhyme[2:4])
print(rhyme[0:7:2])
print(rhyme[::2])
print(rhyme[::-1])

3.4列表方法

3.4.1内容增加

语法:(1)末尾插入   append()添加单个     extend()添加多个

(2)容易位置插入  insert(a,b)在下标a出插入b值

作用:在列表末尾添加一个或多个指定元素

注意事项:(1)利用切片也可以实现增加,s【2:】=【7,8】 代表从当前2号下标开始后的数据等于 7,8,9

print("———————列表方法增加————————————")
heros=["钢铁侠","绿巨人"]
heros.append("黑寡妇")
print(heros)
heros.extend(["张三","李四","王五"])
print(heros)
print("———————切片方法增加————————————")
s=[1,2,3,4,5,6]
s[3:]=[7,8,9]
print(s)
print("———————列表方法容易位置增加————————————")
s.insert(3,4)
print(s)

3.4.2内容删除

语法:(1)remove(a)删除列表中的 a 如果有多个 a 那就只删除第一个,并且如果列表没有a则会报错

(2)pop(b)删除下标为b 的元素

(3)clear 清空整个列表

print("———————列表方法删除————————————")
x=[1,2,3,4,5,6]
x.remove(1)
print(x)
x.pop(2)
print(x)
x.clear()
print(x)

3.4.3内容替换

语法:(1)单值修改   利用下标值修改,s【下标】=“t替换值”       多值修改  利用切片修改

(2)排序   sort  升序    reverse  降序

print("——————插入————————")
s=[1,2,3,4,5,6]
s[3]=40
print(s)
s[2:]=[500,400,600]
print(s)
print("——————sort升排序————————")
s.sort()
print(s)
print("——————sort降排序————————")
s.reverse()
print(s)

3.4.4内容查找

语法:count () 查找指定元素并返回个数

index()查找指定元素的下标  多元素的话返回第一个

index(x,start,end)查找指定范围内的 x

copy 拷贝列表

print("——————插入————————")
s=[1,2,3,4,5,6]
s[3]=40
print(s)
s[2:]=[500,400,600]
print(s)
print("——————sort升排序————————")
s.sort()
print(s)
print("——————sort降排序————————")
s.reverse()
print(s)
print("——————查找————————")
x=[1,2,2,3,6,5,2,4]
print(x.count((2)))
print(x.index(6))
print(x.index(2,2,4))
print("——————拷贝————————")
x_copy=x.copy()
print(x_copy)
x_copy2=x[:]
print(x_copy2)

3.5列表运算

3.5.1加法

(1)列表之间相加 也就是列表元素拼接

(2)列表*x 也就是列表元素变为 x 倍

print("——————————列表加法————————")
s=[1,2,3]
x=[4,5,6]
y=s+x
print(y)
print(2*y)

3.5.2嵌套列表

本质:二维列表

初始化:通过for循环实现

访问:(1)for循环   (2)元素下标(类似二维数组)

is  同一性运算符  用于检验两个变量是否指向同一个对象的运算符

print("——————————嵌套列表————————")
martix=[[1,2,3],[4,5,6],[7,8,9]]
print(martix)
martix=[[1,2,3],[4,5,6],[7,8,9]
]
print(martix)
print("——————————访问嵌套列表————————")
for i in martix:for each in i:print(each,end=' ')#元素间隔print()#换行
print(martix[0])
print(martix[0][0])
print("——————————嵌套列表初始化————————")
A=[0]*3
for i in range(3):#让 i 依次变为 0 1 2 这样做是为了给下面 A【i】进行赋值为 A【0】A[i]=[0]*3
print(A)

3.6列表拷贝

3.6.1浅拷贝

对于一个列表 x ,将会产生一个不同内存地址,且数据一样的列表为 y。此时 x 和 y 之间互相不影响  适用于 一维列表,二维列表会出错。因为浅拷贝只是拷贝了外层,内存的数据是引用操作

print("————一维列表浅拷贝————————")
x=[1,2,3]
y=x.copy()
print(x)
print(y)
x[1]=10
print(x)
print(y)
print("————二维列表浅拷贝————————")
x=[[1,2,3],[4,5,6],[7,8,9]]
y=x.copy()
print(x)
print(y)
x[1][1]=50
print(x)
print(y)

3.6.2深拷贝

实现方法:利用copy模块调用copy函数,需要先 import copy库 使用 deepcopy 函数。它的原理是将原对象以及其子对象都进行了拷贝

import copy
print("————二维列表深拷贝————————")
x=[[1,2,3],[4,5,6],[7,8,9]]
y=copy.deepcopy(x)
print(x)
print(y)
x[1][1]=50
print(x)
print(y)

3.7列表推导式

语法:(1)【改变方法  for 目标  in  当前列表】         oho=[i * 2 for i in oho]

(2)【改变方法  for 目标  in  当前列表 if 条件判断】

s=[i for i in range(10) if i%2==0]  先执行 for 再执行 if 最后输出 i

(3)【改变方法  for 目标  in  当前列表  for 目标  in  当前列表】  嵌套方法

z=[x+y for x in "fishc" for y in "FISHC"]

(4)【改变方法  for 目标  in  当前列表 if 条件判断 for 目标  in  当前列表 if 条件判断】

x=[x+y for x in range(10) if x%2==0 for y in range(100,110) if y%2==0]

注意事项:(1)ord 函数:把 字符 转为 Unicode 编码并保存为列表

(2)循环是通过迭代来改变列表各元素值,而列表推导式直接创建一个新的列表,然后再赋值为原先的这个变量名

print("——————for循环改变列表值——————————")
oho=[1,2,3,4,5]
for i in range(len(oho)):oho[i]=oho[i] * 2
print(oho)
print("——————列表推导式一维列表——————————")
oho=[1,2,3,4,5]
oho=[i * 2 for i in oho]
print(oho)
x=[c*2 for c in "FinshC"]
print(x)
print("——————ord准换编码——————————")
code = [ord(x) for x in "FinshC"]
print(code)
print("——————列表推导式二维列表——————————")
martix=[[1,2,3],[4,5,6],[7,8,9]]
col2=[row[1] for row in martix]#获取每行下标为 1 的元素
print(col2)
diag=[martix[i][i] for i in range(len(martix))]
print(diag)

4.元组

4.1元组定义

语法:(元素1 ,元素2),这里和列表不一样,是()而不是【】,而且可以省去()

注意事项:元组内数据不可以再进行修改

ryhme=(1,2,3,4,5,6,"瘦死的骆驼比马大")
print(ryhme)
ryhme=1,2,3,4,5,6,"瘦死的骆驼比马大"
print(ryhme)

4.2元组的通用

(1)元组和列表在 运算中区别是:只能查找不能增加修改

(2)生成一个元素元组:s=(1,) 生成一个整数 s=(1)

(3)如果元组中成员是列表,则可以进行修改

print("———————元组定义—————————————")
ryhme=(1,2,3,4,5,6,"瘦死的骆驼比马大")
print(ryhme)
ryhme=1,2,3,4,5,6,"瘦死的骆驼比马大"
print(ryhme)
print("———————元组下标访问—————————————")
print(ryhme[0])
print(ryhme[-1])
print("———————元组切片访问—————————————")
print(ryhme[0:3])
print(ryhme[::])
print(ryhme[3:])
print(ryhme[3:5])
print(ryhme[::-1])
print("———————元组查找—————————————")
num=(1,1,4,3,2,5)
print(num.count(1))
print(num.index(2))
print("———————元组加法—————————————")
x=1,2,3
y=4,5,6
s=x+y
print(s)
print(s*2)
print("———————元组for访问—————————————")
for each in s:print(each,end=' ')
print()
print("———————元组for嵌套—————————————")
w=(1,2,3),(4,5,6)
for i in w:for each in i:print(each,end=' ')
print()
print("———————元组列表推导式—————————————")
s=1,2,3,4,5
s=[each *2 for each in s]
print(s)

4.3元组打包和解包

打包:生成一个元组也叫打包

解包:把元组数据根据 , 分隔输出

注意事项:(1)列表和字符串也具有该性质

(2)字符串在使用过程中必须根据有多少字符分几个包

(3)字符串技巧:一个包输出多字符    a,*b=x。这时 a 占一个 其余全是 b的

print("————————元组打包————————————————")
t=(123,"刘家森","ljs")
print(t)
print("————————元组解包————————————————")
x,y,z=t
print(x)
print(y)
print(z)
print("————————列表解包————————————————")
x=[123,345,21]
q,w,e=x
print(q)
print(w)
print(e)
print("————————字符串解包————————————————")
x="ljs"
q,w,e=x
print(q)
print(w)
a,*b=x
print(a)
print(b)

5.字符串

5.1字符串变换

5.1.1capitalize

capitalize()

把首字母变为大写,其他变为小写

print("————————capitalize————————————")
x="i lovE YOU"
print(x.capitalize())

5.1.2casefold

casefold()

把大写字母全部变为小写(任何语言)

print("————————casefold————————————")
x="I lovE YOU"
print(x.casefold())

5.1.3title

title()

将每个单词首字母变为大写,其他字母变为小写

print("————————title————————————")
x="i lovE yOU"
print(x.title())

5.1.4swapcase

swapcase()

将所有字母的大小写进行翻转

print("————————swapcase————————————")
x="i lovE yOu"
print(x.swapcase())

5.1.5upper

upper()

将所有字母变为大写

print("————————upper————————————")
x="i lovE yOu"
print(x.upper())

5.1.6lower

lower()

将所有字母变为小写(只能英语)

print("————————lower————————————")
x="i lovE yOu"
print(x.lower())

5.2字符串对齐

下面这些函数的第一个参数(字符串宽度) 必须大于字符串长度,否则直接输出该字符串。此外下列函数第二个参数代表填充的 字符,不写第二个参数默认为 空格

5.2.1center

center(width,fillchar=‘’)  fillchar为填充字符串

字符串居中对齐

print("————————center————————————")
x='刘家森'
x=x.center(15)
print(x)

5.2.2ljust

ljust(width,fillchar=‘’)  fillchar为填充字符串

字符串左对齐

print("————————ljust————————————")
x='刘家森'
x=x.ljust(15)
print(x)

5.2.3rjust

rjust(width,fillchar=‘’)  fillchar为填充字符串

字符串右对齐

print("————————rjust————————————")
x='刘家森'
x=x.rjust(15)
print(x)

5.2.4zfill

zfill(width)

0 填充左侧

print("————————zfill————————————")
x='刘家森'
x=x.zfill(15)
print(x)

5.3字符串查找

5.3.1count

count(num,start,end)

查找某个字符串出现的次数(可选区间查找)

print("————————count————————————")
x='我来自我的家'
a=x.count("我")
print(a)

5.3.2find

find(num,start,end)

查找某个字符串的下标(从左往右)没找到返回 -1

print("————————find————————————")
x='我来自我的家'
a=x.find("我")
print(a)

5.3.3rfind

rfind(num,start,end)

查找某个字符串的下标(从右往左)没找到返回 -1

print("————————rfind————————————")
x='我来自我的家'
a=x.rfind("我")
print(a)

5.3.4index

index(num,start,end)

查找某个字符串的下标(从左往右) 没找到直接报错

print("————————index————————————")
x='我来自我的家'
a=x.index("我")
print(a)

5.3.5rinedx

rindex(num,start,end)

查找某个字符串的下标(从右往左) 没找到直接报错

print("————————rindex————————————")
x='我来自我的家'
a=x.rindex("我")
print(a)

5.4字符串替换

5.4.1expandtabs

expandtabs([tabsize=8])

将字符串中的 tab 全部替换为空格,里面参数为1个tab换成x个空格

print("————————expandtabs————————————")
code = """print("123")print("456")
"""
new_code=code.expandtabs(2)
print(new_code)

5.4.2replace

replace(old,new,count=-1)

原字符串 替换为 新字符串,里面参数为替换次数

print("————————replace————————————")
x="在吗?"
y="想你!"
x=x.replace(x,y)
print(x)

5.4.3translate

translate(table)

根据转换表格进行转换。可以加上忽略参数,这样在输出就不会显示

print("————————table————————————")
table = str.maketrans("abcdefg","1234567","love")#忽略了 love
x="acchgd love abc"
x=x.translate(table)
print(x)

5.5字符串判断

(1)下面判断函数都是返回一个 bool 类型数据

(2)从左往右的顺序执行函数,例如 x.upper.isupper。先执行全为大写再判断是否为大写

5.5.1startswith

startswith(prefix,start,end)  prefix可以是一个元组 ((“我”,“你”,“它”))

判断查找的字符串是不是在第一个位置

print("——————startswith———————")
x="我爱你 ,我真的服了"
print(x.startswith("我爱你"))

5.5.2endswith

endswith(prefix,start,end)  prefix可以是一个元组 ((“我”,“你”,“它”))

判断查找的字符串是不是在最后一个位置

print("——————endswith———————")
x="我爱你 ,我真的服了"
print(x.endswith("服了"))

5.5.3isupper

isupper()

判断字符串所有字母是否都为大写

print("——————isupper———————")
x="I LOVE YOU"
print(x.isupper())

5.5.4islower

islower()

判断字符串所有字母是否都为小写

print("——————islower———————")
x="i love you"
print(x.islower())

5.5.5istitle

istitle()

判断字符串所有字母是否以大写开始,其他全为小写

print("——————istitle———————")
x="I Love You"
print(x.istitle())

5.5.6isalpha

isalpha()

判断是否只有字母构成,注意空格

print("——————isalpha———————")
x="iloveyou"
print(x.isalpha())

5.5.7isascii

isascii()

判断字符串为空或字符串中的所有字符都是 ASCII

5.5.8isspace

isspace()

判断是否为空白字符串     \n 和 空格 为空白字符串

print("——————isspace———————")
x="   "
print(x.isspace())

5.5.9isprintable

isprintable()

判断所有字符是否可以打印     \n 不能打印

print("——————isprintable———————")
x="  \n "
print(x.isprintable())

5.5.10isdecimal

isdecimal()

检查是不是数字 一般只用于 1 2 3这种数字

5.5.11isdigit

isdigit()

检查是不是数字 支持 

5.5.12isnumeric

isnumeric()

检查是不是数字 支持 一 Ⅰ等多种类型数字

5.5.13isalnum

isalnum()

当 isalpha  isdecimal  isnumerical isdigit返回 true 时,它也返回 true

5.5.14isidentifier

isidentifier()

判断字符串是否是一个合法的标识符

print("——————isidentifier———————")
x="a_1"#正确
y="1_a"#错误
print(x.isidentifier())

5.5.15iskeyword

iskeyword(“sub”) sub为要查找的字符

来查看该字符是否为python中的关键字

print("——————iskeyword———————")
import  keyword
print(keyword.iskeyword("if"))

5.6字符串截取

5.6.1lstrip

lstrip(“sub“)  sub默认情况为空,如果写上字符串abc 则代表去除左侧abc。但是有空格则都不去除

去除左侧的空格

print("——————lstrip———————")
x="   ljs"
print(x.lstrip())

5.6.2rstrip

lstrip(“sub“)sub默认情况为空,如果写上字符串abc 则代表去除右侧abc。但是有空格则都不去除

去除右侧的空格

print("——————rstrip———————")
x="ljs   "
print(x.lstrip())

5.6.3strip

strip(“sub“)sub默认情况为空,如果写上字符串abc 则代表去除左右测abc。但是有空格则都不去除

去除左右侧的空格

print("——————strip———————")
x="   ljs   "
print(x.strip())
x=" wx ljs wx"
print(x.strip("wx"))

5.6.4removeprefix

removeprefix()

删除指定的前缀  注意空格字符串

print("——————removeprefix———————")
x="www.ljs.com   "
print(x.removeprefix("www."))

5.6.5removesuffix

removesuffix()

删除指定的后缀     注意空格字符串

print("——————removeprefix———————")
x="www.ljs.com "
print(x.removesuffix("com "))

5.7字符串拆分

5.7.1partition

partition(”sub“)  sub为分隔的字符串

根据输入要求从左往右,把字符串分为三部分,第一部分:为分隔符左侧,第二部分为:分隔符,第三部分:为分隔符右侧

print("——————partition———————")
x="www.ljs.com "
print(x.partition("."))

5.7.2rpartition

rpartition(”sub“)  sub为分隔的字符串

根据输入要求从右往左,把字符串分为三部分,第一部分:为分隔符左侧,第二部分为:分隔符,第三部分:为分隔符右侧

print("——————rpartition———————")
x="www.ljs.com "
print(x.rpartition("."))

5.7.3split

split(”sub“,num)    从左往右进行切割

(1)默认情况都不输入下是按空格划分无限

(2)”sub“代表按sub进行分隔 , num代表切割次数

print("——————split———————")
x="www ljs com"
print(x.split())#默认输出
x="www.ljs.com"
print(x.split("."))
print(x.split(".",1))

5.7.4rsplit

rsplit(”sub“,num)    从右往左进行切割

(1)默认情况都不输入下是按空格划分无限

(2)”sub“代表按sub进行分隔 , num代表切割次数

print("——————rsplit———————")
x="www ljs com"
print(x.rsplit())#默认输出
x="www.ljs.com"
print(x.rsplit("."))
print(x.rsplit(".",1))

5.7.5splitlines

splitlines(True)

进行分隔。如果写上true代表加上换行符输出

print("——————splitlines———————")
x="www\nljs\ncom"
y="www\nljs\rcom"
print(x.splitlines())
print(x.splitlines(True))

5.8字符串拼接

5.8.1join

”sub“.join(["一部分",”二部分“,”三部分“])

把sub插入到各个部分之间,里面可以是列表【】,也可以是元组()

print("——————join———————")
x='.'
y=x.join(["www","ljs","com"])
print(y)

5.9字符串格式化

5.9.1format基本语法

语法:”刘家森{}“.format(”帅“)

作用:把字符串中的量当作一个可以输出的值,方法是{}代表这里要输出的位置,format里面是输出的值

print("———————format默认单插入———————————")
year=2010
x="刘家森来自于{}"
y=x.format(year)
print(y)

5.9.2format插入方法

(1)默认多{}插入

print("———————format默认多插入———————————")
x="刘家森{},罗灿灿{}"
y=x.format("帅","美")
print(y)

(2)按 format 里面数据序号插入

print("———————format{}插值方法1———————————")
x="刘家森{1},罗灿灿{0}"
y=x.format("帅","美")
print(y)
x="刘家森{1},罗灿灿{1}"
y=x.format("帅","美")
print(y)

(3)format 里面数据名字插入

print("———————format{}插值方法2———————————")
x="{n1}美,{n2}美"
y=x.format(n1="刘家森",n2="罗灿灿")
print(y)

5.9.3format对齐

(1)居中对齐

print("———————format居中———————————")
x="{:^10}"#10代表宽度为10  :代表位置或者关键字   :右边是格式化选项
y=x.format(250)
print(y)

(2)右对齐

print("———————format右对齐1———————————")
x="{1:>10}{0:<10}"
y=x.format(520,250)
print(y)
print("———————format右对齐2———————————")
x="{left:>10}{right:<10}"
y=x.format(right=520,left=250)
print(y)

(3)数据填充

print("———————format填充0———————————")
x="{:010}"#第一个0 代表填充 0
y=x.format(520)
print(y)
print("———————format填充0+对齐———————————")
x="{1:a>10}{0:b<10}"# 填充 a b
y=x.format(520,250)
print(y)

5.9.4format +- 使用

print("———————format整数使用———————————")
x="{:+}{:-}"
y=x.format(250,-250)
print(y)
print("———————format , 当作千分符———————————")
x="{:,}"#位数不足则不显示
y=x.format(2515)
print(y)
print("———————format _ 当作千分符———————————")
x="{:_}"
y=x.format(2515)
print(y)

5.9.5format精度

(1)对于整型,可以采用 上述1 2 两个方案

(2)对于字符串,则是进行字符截取

(3)精度使用在 : 后面加 .2 代表精度为2

print("———————format 数字精度———————————")
x="{:.2f}"#保留2位精度
y=x.format(3.2515)
print(y)
x="{:.2g}"#保留2位数
y=x.format(3.2515)
print(y)
print("———————format 字符串精度———————————")
x="{:.5}"#保留3位精度  不能用于整数
y=x.format("liu and lcc")
print(y)

5.9.6format整型输出格式

print("———————format 整型输出格式二进制———————————")
x="{:b}"
y=x.format(16)
print(y)
print("———————format 整型输出格式Unicode———————————")
x="{:c}"
y=x.format(80)
print(y)
print("———————format 整型输出格式增加前缀———————————")
x="{:#b}"#实现输出前多一个 0b 表示二进制
y=x.format(16)
print(y)

5.9.7format浮点数输出

print("———————format 浮点数科学计数法输出———————————")
x="{:e}"#e是结果为e E是结果为E
y=x.format(16.3214)
print(y)
print("———————format 浮点数定点表示法输出———————————")
x="{:f}"#默认保留精度 6位
y=x.format(16.3214)
print(y)
print("———————format 浮点数 g 输出———————————")
x="{:g}"#如果format里面数大 则按e,如果小则按定点法
y=x.format(16003214)
z=x.format(125.321)
print(y)
print(z)
print("———————format 浮点数 % 输出———————————")
x="{:.2%}"#先乘100 再加%,默认精度 6
y=x.format(16.3214)
print(y)

5.9.8 f-字符串

作用:简化了 format 写法

语法:把之前 format 里面的数据写到 :前面,然后在 ” “ 前加入f或者F

注意事项:(1)支持3.6版本以上

print("———————f-字符串 基本使用———————————")
year=2010
x=F"刘家森来自:{year}"
y=F"刘家森来自:{1100}"
print(x)
print(y)
print("———————f-字符串 格式化———————————")
x=F"{-520:06}"
print(x)
x=F"{123456789:,}"
print(x)
print("———————f-字符串 精度———————————")
x=F"{3.1526:.2f}"
print(x)
print("———————f-字符串 复杂问题———————————")
a='+'
b='^'
c=10
d=3
e='g'
x=F"{3.1415:{a}{b}{c}.{d}{e}}"
print(x)

6.序列

(1)在 python中 所有对象 都有三个属性 ,唯一标识(不可修改无重复),类型,值

(2)id(s)查看 s 的唯一标识

6.1序列运算符

6.1.1 +

进行列表,元组,字符串的拼接

print("——————— +  —————————————")
print([1,2,3]+[4,5,6])
print((1,2,3),(4,5,6))
print("123"+"456")

6.1.2  *

进行列表,元组,字符串的多倍输出

print("——————— *  —————————————")
print([1,2,3]*3)
print((1,2,3)*3)
print("123"*3)

6.1.3 is

检测对象的 id 值 是否相等

print("——————— is  —————————————")
a=1
b=1
if(a is b):print("一样")
else:print("不一样")

6.1.4 is not

检测对象的 id 值 是否不相等

print("——————— is not —————————————")
a=1
b=1
if(a is not b):print("一样")
else:print("不一样")

6.1.5 in

判断某个函数是否在序列中

print("——————— in —————————————")
a="ljslcc"
if('j' in a):print("在")
else:print("不在")

6.1.6 not in

判断某个函数是否不在序列中

print("——————— not in —————————————")
a="ljslcc"
if('j' not in a):print("在")
else:print("不在")

6.1.7 del

删除一个或多个指定的对象

rint("——————— del 基本用法—————————————")
x=[1,2,3,4,5,6]
print(x)
del x[0:2]#删除 0-2的元素
print(x)
print("——————— 切片实现 del —————————————")
x=[1,2,3,4,5,6]
x[0:3]=[]
print(x)
print("——————— del 缩进删除—————————————")
x=[1,2,3,4,5,6]
print(x)
del x[::2]#删除 0-2的元素
print(x)

6.2序列函数

6.2.1 list

把元组,字符串变为列表

print("——————— list—————————————")
x=list((1,2,3,4,5))
print(x)
x=list("123456")
print(x)

6.2.2 tuple

把列表,字符串变为元组

print("——————— tuple—————————————")
x=tuple([1,2,3,4,5])
print(x)
x=tuple("123456")
print(x)

6.2.3 str

把元组,列表变为字符串

print("——————— str—————————————")
x=str((1,2,3,4,5))
print(x)
x=str([1,2,3,4,5])
print(x)

6.2.4 min

对比传入所有参数 返回最

注意啊事项:(1)传入参数不能为空

(2)对于参数为空,引入默认设置输出方式

print("—————————  min 单参数 —————————————")
s=[1,1,2,3,4]
print(min(s))
print("—————————  min 无参 —————————————")
s=[]
print(min(s,default="BBQ了"))
print("—————————  min 多参数—————————————")
s=[1,1,2,3,4]
x=[7,8,8]
print(min(s,x))#输出具有最小值的列表

6.2.5 max

对比传入所有参数 返回最

print("—————————  max —————————————")
s="ljsandlcc"
print(max(s))

6.2.6 len

len(sub) 获取 sub 长度

获取变量的长度   len函数的范围有限,2的32/64次方-1

print("—————————  len ————————————")
x="abcd"
print(len(x))

6.2.7 sum

sum(sub) 对 sub 内求和

进行输入参数求和,输入可以为元组,列表

print("—————————  sum ————————————")
x=(1,2,3,4,5)
print(sum(x))
y=5
print(sum(x,y))

6.2.8 sorted

sorted()

元素升序排序。

注意事项:(1)与 sort 不一样在于 sorted不会改变之前的元素位置, sort会改变

                   (2)sorted 和 sort 一样 ,具有 关键参数控制排序方法(reverse:升降排序控制)(key:关键词控制排序)

(3)sort只能处理列表。 sorted可以处理元组,列表,字符串最后返回列表结果

print("—————————  sorted ————————————")
x="aebcd"
print(sorted(x))#默认升序
print(x)
print("—————————  sorted reverse参数————————————")
x="aebcd"
print(sorted(x,reverse=True))#降序
print("—————————  sorted key参数————————————")
x=["ab","ba","abc","aaaa"]
print(sorted(x,key=len))#根据 长度 排序

6.2.9 reversed

reversed()

对元素进行反向排序

注意事项:(1)reversed返回的是参数反向迭代器,对原数据不改变

(2)reverse没返回值,改变了原数据,所以不能print(x.reverse())

print("—————————  reversed ————————————")
x=[1,3,4,5]
print(list(reversed(x)))
print("—————————  reverse ————————————")
x=[1,3,4,5]
x.reverse()
print(x)

6.2.10 all

all()

判断所有元素是否为真(0为假)

print("—————————  all ————————————")
x=[0,1,2]
y=[1,2,3]
print(all(x))
print(all(y))

6.2.11 any

判断是否存在元素是否为真(0为假)

print("—————————  any ————————————")
x=[0,1,2]
y=[1,2,3]
print(any(x))
print(any(y))

6.2.12 enumerate

把一个列表数据,通过自定义或者默认方式加上一个编号,构成二维元组

print("—————————  enumerate ————————————")
x=["spring","summer","winter"]
print(list(enumerate(x)))
print(list(enumerate(x,5)))

6.2.13 zip

把列表或者字符串进行对应拼接构成新的元组。例如x列表的一号位置和y字符串的1号位置拼接成一个2维元组的一号位置

注意事项:(1)从元素个数最少的为基础开始组成

(2)如果想要对所有元素都进行拼接,可以利用 itertools库,调用zip_longest函数,这样对于少了的数据就用 none 拼接

print("—————————  zip ————————————")
x=[1,2,3]
y=[4,5,6]
z=[7,8,9]
zipped=zip(x,y,z)
print(list(zipped))
print("—————————  zip_longest————————————")
import itertools
x=[1,2,3,4,5]
y=[4,5,6,7]
z=[7,8,9]
zipped=itertools.zip_longest(x,y,z)
print(list(zipped))

6.2.14 map

根据自定义函数对可迭代对象的每个元素进行运算,并将运算之后的结果返回给迭代器

注意事项:(1)对于多参数情况,以最短为基础

print("—————————  map 单参数————————————")
maped=map(ord,"ljsandlcc")
print(list(maped))
print("—————————  map 多参数————————————")
maped=map(pow,(1,2,3),(2,2,2))
print(list(maped))

6.2.15 filter

根据自定义函数对可迭代对象的每个元素进行运算,并将运算之后的为真结果返回给迭代器

print("—————————  filter 单参数————————————")
maped=filter(str.islower,"Jason")
print(list(maped))

6.2.16 iter

(1)一个迭代器肯定是一个可迭代对象

(2)可迭代对象(列表,元组)可以重复使用,迭代器(通过像map,iter函数得到)则是一次性

print("—————————  迭代器————————————")
maped=filter(str.islower,"Jason")
for each in maped:print(each)
print(list(maped))

print("—————————  迭代器对象————————————")
x=[1,2,3,4]
for each in x:print(each)
print(x)
print("—————————  iter————————————")
x=[1,2,3,4,5]
y=iter(x)
print(type(x))
print(type(y))

6.2.17 next

逐个迭代器的元素提取出来

注意事项:(1)因为迭代器元素有限,为了防止元素都访问完之后继续访问程序异常,可以加入参数使得异常时输出自定义参数

print("—————————  next————————————")
x=[1,2,3,4,5]
y=iter(x)
print(next(y))
print(next(y))
print(next(y))
print(next(y))
print(next(y))
print("—————————  next 控制范围————————————")
x=[1,2,3,4,5]
y=iter(x)
print(next(y,"没了"))
print(next(y,"没了"))
print(next(y,"没了"))
print(next(y,"没了"))
print(next(y,"没了"))
print(next(y,"没了"))

7.字典

7.1字典创建

方法:(1){} 结合        a={"张三":"李四","1":"2"}

(2)dict 函数              b=dict(张三="1",李四="2",王五="3")

(3)dict+列表             c=dict([("z","1"),("x","2"),("q","3")])

(4)dict+(1)            d=dict({"张三":"李四","1":"2"})

(5)dict+(1)+2 )    e=dict({"张三":"李四","1":"2"},王五="3")

(6)dict + zip               f=dict(zip(["1","2","3"],["a","b","c"]))

注意事项:(1)字典内容不可以重复

print("———————— 字典 创建方法1————————————")
x={"张三":"李四","1":"2"}
print(type(x))
print(x["张三"])#输出李四
x["王五"]="赵6"#添加一对新的王五:赵六
print(x)
print("———————— 字典 创建方法2————————————")
x=dict(张三="1",李四="2",王五="3")
print(x)
print("———————— 字典 创建方法3————————————")
a=dict([("z","1"),("x","2"),("q","3")])
print(a)
print("———————— 字典 创建方法4————————————")
d=dict({"张三":"李四","1":"2"})
print(d)
print("———————— 字典 创建方法5————————————")
e=dict({"张三":"李四","1":"2"},王五="3")
print(e)
print("———————— 字典 创建方法6————————————")
f=dict(zip(["1","2","3"],["a","b","c"]))
print(f)

7.2字典内容操作

7.2.1 增加

formkeys(iterable,values) 把迭代器对象赋值给 values

方法:x【”A“】=250  键A赋值250.如果字典有 A 了则是修改,如果没有则是添加

print("———————— 字典 增加内容————————————")
x=dict.fromkeys("ljs",250)#初始化一个 字典
print(x)
x["a"]=250#添加内容
print(x)

7.2.2删除

(1)pop(键)  删除指定键

(2)popitem() 删除最后一个键

(3)del x【j键】 删除指定键或者字典

注意事项:(1)如果不存在删除的键,则出现异常,解决办法:pop(键,”没有该键“)

print("———————— 字典 删除内容————————————")
x=dict.fromkeys("ljs",250)#初始化一个 字典
print(x)
x.pop("j","没有")#删除键 j
print(x)
print("———————— 字典 删除最后内容————————————")
x=dict.fromkeys("ljs",250)#初始化一个 字典
print(x)
x.popitem()
print(x)
print("———————— 字典 删除del————————————")
x=dict.fromkeys("ljs",250)#初始化一个 字典
print(x)
del x['l']
print(x)

7.2.3清空

clear()

print("———————— 字典 清空————————————")
x=dict.fromkeys("ljs",250)#初始化一个 字典
print(x)
x.clear()
print(x)

7.2.4修改

方法:(1)update({other})other为字典可迭代对象多个键值对

(2)x【”A“】=250  键A重新赋值250.

print("———————— 字典 修改 多键值对————————————")
x=dict.fromkeys("ljs",250)#初始化一个 字典
print(x)
x.update({"l":1,"j":2})
print(x)
x.update(l='10',s='50')
print(x)

7.2.5查找

get(key,default)default为找不到清空下的输出

setdefault(key,default)  如果没找到,则给没找到的键 赋值自定义值

print("———————— 字典 查找get————————————")
x=dict.fromkeys("ljs",250)#初始化一个 字典
print(x.get('l',"找不到"))
print("———————— 字典 查找setdefault————————————")
m=dict.fromkeys("ljs",250)#初始化一个 字典
m.setdefault('q',"找不到")
print(m)

7.3字典获取

视图对象:是字典的动态试图,当字典内容改变,视图对象内容也改变

7.3.1 items

获取字典的键值对视图对象

7.3.2 keys

获取字典的视图对象

7.3.3 values

获取字典的视图对象

print("———————— 字典 视图对象————————————")
x=dict.fromkeys("ljs",250)#初始化一个 字典
keys=x.keys()
values=x.values()
items=x.items()
print(keys)
print(values)
print(items)
x.pop('l')
print(keys)
print(values)
print(items)

7.3.4 len

获取字典长度

print("———————— 字典 len———————————")
m=dict.fromkeys("ljs",250)#初始化一个 字典
print(len(m))

7.3.5 in & not in

判断键是否存在于字典中

print("———————— 字典 in———————————")
m=dict.fromkeys("ljs",250)#初始化一个 字典
print('l' in m)
print("———————— 字典 not in———————————")
m=dict.fromkeys("ljs",250)#初始化一个 字典
print('l' not in m)

7.3.6 list

把字典中所有的变为列表,输出键值用values()

print("———————— 字典 list———————————")
m=dict.fromkeys("ljs",250)#初始化一个 字典
n=list(m)
print(n)

7.3.7 iter

将字典的构成一个迭代器

print("———————— 字典 iter———————————")
m=dict.fromkeys("ljs",250)#初始化一个 字典
e=iter(m)
print(next(e))
print(next(e))
print(next(e,"没了"))
print(next(e,"没了"))

7.3.8 reversed

对字典内部键值对进行逆向操作

print("———————— 字典 reversed———————————")
m=dict.fromkeys("ljs",250)#初始化一个 字典
e=reversed(m)
print(list(e))

7.4字典拷贝

copy() 浅拷贝

print("———————— 字典 浅拷贝copy———————————")
m=dict.fromkeys("ljs",250)#初始化一个 字典
n=m.copy()
print(m)
print(n)

7.5字典嵌套

字典里面的键值也为字典

print("———————— 字典 嵌套1———————————")
d={"张三":{"语文":60,"数学":60,"英语":60},"李四":{"语文":70,"数学":70,"英语":70}}
print(d)
print(d["张三"]["数学"])
print("———————— 字典 嵌套2———————————")
d={"张三":[60,70,80],"李四":[600,700,800]}
print(d)
print(d["张三"][1])#输出张三的 下标 1

7.6字典推导式

通过 for 循环加上字典,能够更快的得到新的 字典

print("———————— 字典 推导式———————————")
d={"a":1,"b":2,"c":3}
b={v:k for k,v in d.items()}
print(d)
print(b)
print("———————— 字典 推导式+判断条件———————————")
d={"a":1,"b":2,"c":3}
b={v:k for k,v in d.items() if v<=2}#第一个v:k代表v为键,k为键值,实习交换是因为里面的k,v顺序和v:k不一样
print(d)
print(b)
print("———————— 字典 推导式嵌套+判断条件————————————")
d={x:y for x in [1,2,3] for y in [2,4,6] if y<5}
print(d)

8.集合

8.1集合创建

方法:(1){字符串}

(2)推导式  s  for s  in  “ljs"

(3)set 函数   a = set(”ljs“)

注意事项:(1)集合不能使用下标访问,因为集合是无序

print("——————————集合创建方式1————————")
a={"ljs","lcc"}
print(type(a))
print("——————————集合创建方式2————————")
{s for s in "ljs"}
print("——————————集合创建方式3———————")
s=set("ljs")
print(s)

8.2集合唯一性

8.2.1

判断某个元素是否存在集合中

print("——————————集合in ———————")
s=set("ljs")
print('s' in s)
print("——————————集合not in ———————")
s=set("ljs")
print('s' not in s)

8.2.2 集合内容访问

通过推导式进行访问

print("——————————集合元素访问 ———————")
s=set("ljs")
for each in s:print(each)

8.2.3集合内容去重

由于集合具有元素不重复的特点,所以可以对一个列表进行集合设置,从而实现去掉重复值

print("——————————集合元素去重 ———————")
s=list("ljsljs")
print(s)
s=set(s)
print(s)

8.3集合函数生成新集合

8.3.1 copy

实现集合的浅拷贝

print("——————————集合函数 copy ———————")
d=set("abc")
print(d)
t=d.copy()
print(t)

8.3.2 isdisjoint

判断两个集合是否相干(是否存在交集)

print("——————————集合函数 isdisjoint ———————")
s=set("ljs")
print((s.isdisjoint(set("lcc"))))#这里lcc和ljs具有交集 l 所以相干,所以是false

8.3.3 issubset

判断一个集合是否是另外一个集合的子集之后返回一个新集合

注意事项:(1)可以用 s <= set(“LJS”)来判断 s 是不是 LJS 的子集

(2)可以用 s < set(“LJS”)来判断 s 是不是 LJS 的真子集

(3)可以用 s >= set(“LJS”)来判断 s 是不是 LJS 的超集

(4)可以用 s > set(“LJS”)来判断 s 是不是 LJS 的真超集        

(5)可以用 s | set(“LJS”)来判断 s 是不是 LJS 的并集

(6)可以用 s & set(“LJS”)来判断 s 是不是 LJS 的交集

(7)可以用 s - set(“LJS”)来判断 s 是不是 LJS 的差集

(8)可以用 s ^ set(“LJS”)来判断 s 是不是 LJS 的对称差集

print("——————————集合函数 issubset ———————")
d=set("abc")
print((d.issubset("abcd")))

8.3.4 issuperset

判断一个集合是否是另外一个集合的超集之后返回一个新集合(if B中容易元素都是 A的元素,则A为B超级)

print("——————————集合函数 issuperset ———————")
d=set("abcdef")
print((d.issuperset("abcd")))

8.3.5 union

把两个集合求并集之后返回一个新集合

print("——————————集合函数 union ———————")
q1=set("abcdef")
print((q1.union("gh","pl")))

8.3.6 intersection

求两个集合交集之后返回一个新集合

print("——————————集合函数 intersection ———————")
q1=set("abcdef")
print((q1.intersection("ach")))

8.3.7 difference

求两个集合的差集之后返回一个新集合

print("——————————集合函数 difference ———————")
q1=set("abcdef")
print((q1.difference("abgh")))

8.3.8 symmetric_differnece

求两个集合对称差集之后返回一个新集合(排除两个集合共有元素,由剩余元素组成的结合叫对称差集)

print("——————————集合函数 symmetric_difference ———————")
q1=set("abcdef")
print((q1.symmetric_difference("abgh")))

8.4 集合函数修改原集合

8.4.1 update

对集合进行数据(列表,字符串)插入

注意事项:(1)只能 set 不能 frozenset

(2)修改当前集合

(3)之前没有 update 的是返回一个修改之后的新集合,有 update 的是直接修改原集合

print("—————————set函数 updtae—————————————————")
x = set("ljs")
x.update(set("and"))
print(x)

8.4.2 intersection_update

与  intersection功能一样,区别在于没有返回值,是对原集合进行修改

print("—————————set函数 intersection_updtae—————————————————")
x = set("ljs")
x.intersection_update(set("andl"))
print(x)

8.4.3 difference_update

与 difference功能一样,区别在于没有返回值,是对原集合进行修改

print("—————————set函数 differnce_updtae—————————————————")
x = set("ljs")
x.difference_update(set("and"))
print(x)

8.4.4 symmetric_difference_update

与 symmetric 功能一样,区别在于没有返回值,是对原集合进行修改

print("—————————set函数 symmetric_difference_updtae—————————————————")
x = set("ljs")
x.symmetric_difference_update(set("andl"))
print(x)

8.4.5 add

将传入的字符串整体传入,而不是 update一样分开一个一个传入

print("—————————set函数 add—————————————————")
x = set("ljs")
x.add("andl")
print(x)

8.4.6 remove

删除集合中某个元素,如果元素不存在则抛出异常

print("—————————set函数 remove—————————————————")
x = set("ljs")
x.remove("l")
print(x)

8.4.7 discard

删除集合中某个元素,如果元素不存在则静默处理

print("—————————set函数 discard—————————————————")
x = set("ljs")
x.discard("al")
print(x)

8.4.8 pop

随机弹出集合中的一个元素

print("—————————set函数 pop—————————————————")
x = set("aljs")
x.pop()
print(x)

8.4.9 clear

清空集合内容

print("—————————set函数 clear—————————————————")
x = set("aljs")
x.clear()
print(x)

8.5可哈希

8.5.1基本概念

哈希值就像一个人的身份证,不同人的身份证不一样。并且人发生了变化,哈希值也会变化,所以可以通过哈希值对内容较大的数据进行控制

8.5.2语法

hash(object)获取 object 的哈希值

注意事项:(1)对于整数求哈希值,永远是其本身

(2)对于 1 和 1.0 的哈希值一样,但 1.01就不一样

(3)可变对象(列表,集合)没有哈希值

(4)不可变对象(字符串)有哈希值

(5)只有可哈希的对象才能作为字典的键以及集合元素

(6)要实现集合嵌套,不能用 set 而要用 frozenset 因为这是不可变集合

8.6散列表

可以快速的在列表进行查找里面的元素,比如说 列表是新华字典里面一页一页的找相同的字。而集合上则是按拼音进行查找。但集合也需要大量内存空间!

9.函数

9.1函数基本概念

9.1.1函数定义

def 函数名():

pass

print("————————函数定义————————————")
def myfunc():# pass#空执行for i in range(3):print("ljs",end=' ')
myfunc()
print("\n")

9.1.2函数的参数

print("————————函数参数————————————")
def myfunc(name,times):# pass#空执行for i in range(times):print(F"ljs{name}",end=' ')
myfunc(" and lcc",2)
print("\n")

9.1.3函数的返回值

函数如果没写 return 也会默认返回一个 none

print("————————函数返回值————————————")
def div(x,y):if(y==0):return "除数不能为0!!!"else:return  x/y
result=div(4,2)
print(result)
print("\n")

9.2函数参数

9.2.1位置参数

根据参数位置是确定的,如果不按照这个顺序输入,结果就会不一样

def myfunc(s,vt,o):return "".join((o,vt,s))#返回一个字符串,并且这个字符串调用了 join函数进行字符串拼接
print(myfunc("我","打","你"))

9.2.2关键字参数

根据参数名字确定,跟位置没关系

print("—————————关键字参数———————————————")
def myfunc(s,vt,o):return "".join((o,vt,s))#返回一个字符串,并且这个字符串调用了 join函数进行字符串拼接
print(myfunc(o="我",vt="打",s="你"))
print()

9.2.3默认参数

默认参数必须放在后面,不能放在前面

注意事项:(1)对于一些函数,例如 sum abs 是不允许进行关键字参数,只能位置传递。

abs(x=-1)❌   abs(-1)✔

(2)关键字参数看 *   位置参数看 /

print("—————————默认参数———————————————")
def myfunc(s,vt,o="我"):return "".join((o,vt,s))#返回一个字符串,并且这个字符串调用了 join函数进行字符串拼接
print(myfunc("你","打","刘家森"))
print()

9.2.4收集参数

定义:传入参数的数量随意,这样的参数叫收集参数

语法:* 形参名字

注意事项:(1)函数返回的多参数其实本质是元组,这个元组可以进行解包

(2)函数传入的收集参数本质是元组,利用了 * 进行打包

(3)如果收集参数后面还需要参数,那就必须用关键字参数

                   (4)利用 ** 两个 * 可以实现对收集参数进行 打包为字典

print("—————————收集参数———————————————")
def myfunc(*args):print("有{}个参数".format(len(args)))print("第2个参数是:{}".format(args[1]))print("所有参数:{}".format(args))
myfunc("刘家森","罗灿灿","爱吃东西","哈哈哈","喵喵喵")
print()
print("—————————收集参数+关键字参数———————————————")
def myfunc(*args,a=1,b=2):print("所有参数:{}".format(args),a,b)
myfunc("刘家森","罗灿灿")
print()
print("—————————收集参数 ** ———————————————")
def myfunc(**args):print(args)
myfunc(a=1,b=2)
print()

9.2.5解包参数

为了实现传入的元组进行解包成单独模块

注意事项:(1) * 代表对元组进行解包

(2)** 代表对字典进行解包

print("—————————解包参数 * ———————————————")
args=(1,2,3,4)
def myfunc(a,b,c,d):print(a,b,c,d)
myfunc(*args)#对 args 进行解包
print()
print("—————————解包参数 ** ———————————————")
args={'a':1,'b':2,'c':3,'d':4}
def myfunc(a,b,c,d):print(a,b,c,d)
myfunc(**args)#对 args 进行解包为 键值
print()

9.3函数作用域

9.3.1局部作用域

指一个变量可以被访问的范围。当一个变量被定义在函数内部中,这个变量称为局部变量

print("—————————作用域 局部 ———————————————")
def myfunc():x=520print(x)
myfunc()
#print(x)这是一个局部变量,无法在全局中访问

9.3.2全局作用域

定义在函数外部的变量,作用域为全局,这个变量称为全局变量

print("—————————作用域 全局 ———————————————")
x = 520
def myfunc():x=250print(x)
myfunc()
print(x)#这是一个全局变量,无法在全局中访问

9.3.3语句 global

在局部变量前加一个 global 可以实现 局部变量修改全局变量的值

print("—————————作用域 global ———————————————")
x = 520
def myfunc():global xx=250print(x)
myfunc()
print(x)

9.4嵌套函数

9.4.1嵌套函数定义

在一个函数内部在定义一个函数。在使用内部函数时,需要在内部提取调用

print("—————————嵌套函数 ———————————————")
def myfunc():x=520def myfund():x=250print("d:x=",x)myfund()#嵌套函数需要在函数内部中 调用,外部不能调用print("c:x=",x)
myfunc()
print()

9.4.2语句 nonlocal

内部函数中去修改外部函数的变量

print("—————————嵌套函数 nonlocal———————————————")
def myfunc():x=520def myfund():nonlocal xx=250print("d:x=",x)myfund()#嵌套函数需要在函数内部中 调用,外部不能调用print("c:x=",x)
myfunc()
print()

9.5 LEGB规则

L:local 局部作用域,局部作用域会消失

E:enclosed 嵌套函数外层函数作用域  外层作用域的值会保留下来

G:global 全局作用域

B:build-in 内置作用域  相当于内置函数变为了变量名

当作用域发生冲突时,例如 L 和 G,则 python 会使用 L 局部作用域

10.闭包

10.1闭包基本定义

简单解释就是说,内层函数调用了外层函数的变量,并且外层函数返回的是内存函数的引用。这样子就可以实现对一个变量重复改变使用。举个例子,一个点在坐标移动,它往右移动之后得到新坐标,这时再往上移动不是从原点出发,而是从第一次移动后的点

print("—————————闭包———————————————")
def power(exp):def exp_of(base):return base ** expreturn exp_of
square=power(2)
cube=power(3)
print(square(2))
print(square(5))
print(cube(2))
print(cube(5))
print("—————————闭包 nonlocal———————————————")
def outer():x=0y=0def inner(x1,y1):nonlocal x,yx+=x1y+=y1print(F"x={x},y={y}")return inner
move=outer()
print(move(1,2))
print(move(-1,2))

11.装饰器

11.1单装饰器

作用:在闭包基础之上,把函数的传入参数也设置为函数,这样就相当于先执行闭包的内层函数,再碰到外层的传入函数时,就执行调用的函数。

本质:再调用函数的时候,相当于把调用函数放进了装饰器里面!

语法(1):def 外层()+内层()  return 内层

@外层

def 调用函数()

调用函数()

语法(2):def 外层()+内层()   return 内层

def 调用函数()

调用函数 = 外层(调用函数)

调用函数()

rint("—————————函数作为参数传递  装饰器 ———————————————")
def time_master(func):def call_func():print("开始运行")start=time.time()func()stop=time.time()print("程序结束")print(F"消耗{(stop-start):.2f} 秒")return call_func
@time_master
def myfunc():time.sleep(2)print("正在运行")
myfunc()

11.2多装饰器

在被调用函数上存在多个装饰器,调用顺序从下往上

print("—————————函数作为参数传递  多装饰器 ———————————————")
def add(func):def inner():x=func()return x+1return inner
def cube(func):def inner():x=func()return x*x*xreturn inner
def square(func):def inner():x=func()return x*xreturn inner
@add
@cube
@square
def test():return 2print(test())

11.3装饰器+输入参数

语法(1):@外层函数(参数)  调用函数()

语法(2):调用函数=外层(参数)(调用函数)

print("—————————函数作为参数传递  装饰器+输入参数 ———————————————")
def logger(msg):def time_master(func):def call_func():print("开始运行")start = time.time()func()stop = time.time()print("程序结束")print(F"消耗{(stop - start):.2f} 秒")return call_funcreturn time_master
@logger("A")
def funA():time.sleep(1)print("A")@logger("B")
def funB():time.sleep(2)print("B")funA()
funB()

12.lambda表达式

作用:解决一些简单的函数

语法:lambda arg1 arg2 expression

print("—————————lambda基本规则———————————————")
square = lambda x : x*x
print(square(2))
print("—————————lambda—+列表———————————————")
y=[lambda x:x*x,2,3]
square=y[0](y[1])
print(square)
print("—————————lambda—+map———————————————")
mapped=map(lambda x:ord(x)+10,"Fljs")
print(list(mapped))
print("—————————lambda—+filter———————————————")
mapped=filter(lambda x:x%2,range(10))
print(list(mapped))

13.生成器

13.1生成器基本规则

作用:让函数退出之后还能保留状态,是一种特殊的迭代器

语法:yield 替换 return

print("——————————yield基本规则————————————")
def counter():i=0while(i < 5):yield ii+=1
for i in counter():print(i)
print("——————————yield+next————————————")
c=counter()
print(next(c))
print(next(c))
print(next(c))

13.2生成器表达式

区别:列表推导式:一次性生成所有数据放到列表中

生成器推导式:一次只产生一个数据

方法:(1)使用 yield

(2)直接写

print("——————————生成器直接表达式————————————")
t=(i*i for i in range(5))
for i in t:print(i)

14.算法

14.1递归

14.1.1递归基本规则

作用:函数调用自身的过程

print("———————递归基本规则-无限循环———————————")
# def func():
#     print("ljs")
#     func()
# print(func())
print("———————递归基本规则-条件循环———————————")
def func(i):if i>0:print(F"ljs{i}")i-=1func(i)
print(func(10))

14.1.2递归-阶层

print("———————递归基本规则-阶层1———————————")
def factIter(n):result=nfor i in range(1,n):result *=ireturn  result
print(factIter(5))
print("———————递归基本规则-阶层2———————————")
def factIter(n):if n==1:return 1else:return  n*factIter(n-1)
print(factIter(5))

14.1.3递归-斐波那契数列

print("———————递归基本规则-斐波那契数列迭代———————————")
def fib(n):a=1b=1c=1while(n>2):c=a+ba=bb=cn -=1return c
print(fib(12))
print("———————递归基本规则-斐波那契数列递归———————————")
def fibc(n):if n==1 or n==2:return 1else:return fibc(n-1)+fibc(n-2)
print(fibc(12))

14.2汉诺塔

def hanoi(n,x,y,z):if n==1:print(x,'-->',z)else:hanoi(n-1,x,z,y)print(x,'-->',z)hanoi(n-1,y,x,z)
n=int(input("次数"))
hanoi(n,'A','B','C')

重生之——python与我不得不说的故事相关推荐

  1. python与excel的关系-Python 与 Excel 不得不说的事

    原标题:Python 与 Excel 不得不说的事 数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件.因此用 Python 进行数据相关的工作时,难免要和 Excel ...

  2. 我的爱情与Python不得不说的故事

    我的爱情与Python不得不说的故事 最近,沉迷于辩论比赛,有最近有场辩论赛因为一句话出圈了:为什么是坠入爱河而不是跳入爱河呢?因为爱本身是自由意志的沉沦.这让我想起来我当时坠入爱河的时候,作为人家印 ...

  3. 我和freelancer不得不说的故事5 --- 心理落差

    我和freelancer不得不说的故事5 --- 心理落差 我下海之前所在的外企,是一家顶级知名IT企业,其SAP咨询服务业务规模和影响都很大,是SAP咨询界五大咨询公司之一.我从07年加入这家公司, ...

  4. 搜索引擎新架构:与SQL不得不说的故事

    简介:本话题将围绕阿里巴巴搜索引擎HA3架构,和大家详细阐述搜索引擎在面对架构深度学习和数据规模的挑战时,如何以数据库SQL的执行方式来应对解决. 特邀嘉宾:罗涛--阿里巴巴集团资深技术专家 视频地址 ...

  5. (九)模板方法模式详解(包含与类加载器不得不说的故事)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 模板方法模式,这是一个在许多 ...

  6. 云图说|ROMA演进史:一个ROMA与应用之间不得不说的故事

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 华为云ROMA源 ...

  7. 如此可爱,焉能不爱?—我与在线作业不得不说的故事

    夏日炎炎,每当看到孩子埋头抄写作业题目而淌下汗珠时,我就在想:有没有好的办法替孩子去抄作业,让孩子省下时间干点别的?每当别的父母都在领着孩子去公园玩耍而我还在堆积如山的案头批改作业时,我就在想:有没有 ...

  8. 《数据赋能IT团队技术管理实战》与老杨不得不说的故事

    来了,坐. 接下来是<数据赋能IT团队技术管理实战>这本书与老杨不得不说的故事,请各位观众,有钱的捧个钱场,有人的捧个人场呗,走着. 书:"大家好,我是<数据赋能IT团队技 ...

  9. UESTC-2016dp专题 F 柱爷与三叉戟不得不说的故事

    柱爷与三叉戟不得不说的故事 Time Limit: 500/500MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 题目链接 ...

最新文章

  1. Netkiller Architect 手札之前言
  2. Google Colab 使用教程(1)
  3. dr. unarchiver_P160 四季可穿,数仙女尽折腰!醉高版本Dr马丁靴女2020秋冬新款牛筋底1460英伦风8孔系带复古机车军靴真皮短靴马丁靴...
  4. (转)8种常见机器学习算法比较
  5. 趣图:21 副 GIF 动图让你了解各种数学概念
  6. WebSocket入门使用教程
  7. oa办公系统文件存取错误_出现文件存取错误解决方法
  8. Webservice 学习笔记
  9. 凉鞋问题之贝叶斯公式
  10. ICS bomblab总结
  11. 采用非常规方法(非gprecoverseg) 恢复greenplum数据库
  12. gcc:扩展功能:除标准里定义的C特性之外的功能;-pedantic
  13. JVM参数 之 -XX:MaxGCPauseMillis 与 -XX:GCTimeRatio
  14. 养狗养成小老头?宠物泪痕严重如何护理?
  15. 【python角谷猜想】
  16. 傻博士----物理层
  17. Java中某日期时间加减5分钟、10分钟的方法
  18. 静态HTML网页设计作品 电影网站设计——电影我不是药神响应式页播(4页) HTML+CSS+JavaScript HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程设计
  19. dell灵越笔记本后盖怎么拆_dell笔记本拆机详解【图文教程】
  20. [jzoj 4787] 数格子 {矩阵乘法}

热门文章

  1. ios android统一开发平台,iOS EMAS 统一接入
  2. 前端每周清单第 45 期: Safari 支持 Service Worker, Parcel 完整教程, 2017 前端大事件...
  3. CSS学习笔记(十二)CSS 水平导航栏
  4. jvisualvm下载
  5. 局域网内和局域网间的通信(交换机和路由器)
  6. 网上买书选三家,购物不要选当当
  7. 用php实现注册和登录功能,运用PHP实现登录、注册及审核功能
  8. 全新型号 华为FusionServer Pro 5288 V6机架服务器发布
  9. 旺旺老师JavaSE基础第一章(05)Java优点与缺点
  10. 【ssh】【scp】scp Permission denied (publickey,password)解决方法