本文基于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)变量可以以中文起头,可以单个 _
(2)变量交换 x,y=y,x
刘家森=123
李四=456
print(刘家森)
print(李四)
刘家森,李四=李四,刘家森
print(刘家森)
print(李四)
(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)
字符串的加法:字符串的拼接
字符串的乘法:字符串的多次输出
print('520'+'1314')
print("刘家森\n"*3)
利用 import 调用 random 库 即可实现下面函数
(1)random.randint(1,10) 随机产生1-10的一个整数
(2)random.getstate 获取随机数种子
(3)random.setstate 设置随机数生成器内部状态
(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")
(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 a5):
print("3>5")
else:
if(3>4):
print("3>4")
else:
print("3<4")
(1)while 判断条件 执行语句
i=1
while i<=9:
j = 1
while j<=i:
print(j,"*",i,"=",j*i,end=" ")
j+=1
print()
i+=1
(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=" ")
定义:可以存放不同数据类型的序列
语法:【1,12,“迷惑”】
rhyme=[1,2,3.1,"刘家森"]
print(rhyme)
print("————————for输出所有列表—————————")
for each in rhyme:
print(each)
(1)语法:列表名字【下标】
注意事项:(1)最后一个元素下标为 -1
(2)可以利用 len 函数找到最后元素下标,但要减1
print("————————列表下标输出—————————")
print(rhyme[0])
print(rhyme[3])
length = len(rhyme)
print(rhyme[length-1])
print(rhyme[-1])
作用:可以对列表进行多值输出,也就是按区域一次性输出很多
注意事项:(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])
语法:(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)
语法:(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)
语法:(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)
语法: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)
(1)列表之间相加 也就是列表元素拼接
(2)列表*x 也就是列表元素变为 x 倍
print("——————————列表加法————————")
s=[1,2,3]
x=[4,5,6]
y=s+x
print(y)
print(2*y)
本质:二维列表
初始化:通过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)
对于一个列表 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)
实现方法:利用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)
语法:(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)
语法:(元素1 ,元素2),这里和列表不一样,是()而不是【】,而且可以省去()
注意事项:元组内数据不可以再进行修改
ryhme=(1,2,3,4,5,6,"瘦死的骆驼比马大")
print(ryhme)
ryhme=1,2,3,4,5,6,"瘦死的骆驼比马大"
print(ryhme)
(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)
打包:生成一个元组也叫打包
解包:把元组数据根据 , 分隔输出
注意事项:(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)
capitalize()
把首字母变为大写,其他变为小写
print("————————capitalize————————————")
x="i lovE YOU"
print(x.capitalize())
casefold()
把大写字母全部变为小写(任何语言)
print("————————casefold————————————")
x="I lovE YOU"
print(x.casefold())
title()
将每个单词首字母变为大写,其他字母变为小写
print("————————title————————————")
x="i lovE yOU"
print(x.title())
swapcase()
将所有字母的大小写进行翻转
print("————————swapcase————————————")
x="i lovE yOu"
print(x.swapcase())
upper()
将所有字母变为大写
print("————————upper————————————")
x="i lovE yOu"
print(x.upper())
lower()
将所有字母变为小写(只能英语)
print("————————lower————————————")
x="i lovE yOu"
print(x.lower())
下面这些函数的第一个参数(字符串宽度) 必须大于字符串长度,否则直接输出该字符串。此外下列函数第二个参数代表填充的 字符,不写第二个参数默认为 空格
center(width,fillchar=‘’) fillchar为填充字符串
字符串居中对齐
print("————————center————————————")
x='刘家森'
x=x.center(15)
print(x)
ljust(width,fillchar=‘’) fillchar为填充字符串
字符串左对齐
print("————————ljust————————————")
x='刘家森'
x=x.ljust(15)
print(x)
rjust(width,fillchar=‘’) fillchar为填充字符串
字符串右对齐
print("————————rjust————————————")
x='刘家森'
x=x.rjust(15)
print(x)
zfill(width)
用 0 填充左侧
print("————————zfill————————————")
x='刘家森'
x=x.zfill(15)
print(x)
count(num,start,end)
查找某个字符串出现的次数(可选区间查找)
print("————————count————————————")
x='我来自我的家'
a=x.count("我")
print(a)
find(num,start,end)
查找某个字符串的下标(从左往右)没找到返回 -1
print("————————find————————————")
x='我来自我的家'
a=x.find("我")
print(a)
rfind(num,start,end)
查找某个字符串的下标(从右往左)没找到返回 -1
print("————————rfind————————————")
x='我来自我的家'
a=x.rfind("我")
print(a)
index(num,start,end)
查找某个字符串的下标(从左往右) 没找到直接报错
print("————————index————————————")
x='我来自我的家'
a=x.index("我")
print(a)
rindex(num,start,end)
查找某个字符串的下标(从右往左) 没找到直接报错
print("————————rindex————————————")
x='我来自我的家'
a=x.rindex("我")
print(a)
expandtabs([tabsize=8])
将字符串中的 tab 全部替换为空格,里面参数为1个tab换成x个空格
print("————————expandtabs————————————")
code = """
print("123")
print("456")
"""
new_code=code.expandtabs(2)
print(new_code)
replace(old,new,count=-1)
将 原字符串 替换为 新字符串,里面参数为替换次数
print("————————replace————————————")
x="在吗?"
y="想你!"
x=x.replace(x,y)
print(x)
translate(table)
根据转换表格进行转换。可以加上忽略参数,这样在输出就不会显示
print("————————table————————————")
table = str.maketrans("abcdefg","1234567","love")#忽略了 love
x="acchgd love abc"
x=x.translate(table)
print(x)
(1)下面判断函数都是返回一个 bool 类型数据
(2)从左往右的顺序执行函数,例如 x.upper.isupper。先执行全为大写再判断是否为大写
startswith(prefix,start,end) prefix可以是一个元组 ((“我”,“你”,“它”))
判断查找的字符串是不是在第一个位置
print("——————startswith———————")
x="我爱你 ,我真的服了"
print(x.startswith("我爱你"))
endswith(prefix,start,end) prefix可以是一个元组 ((“我”,“你”,“它”))
判断查找的字符串是不是在最后一个位置
print("——————endswith———————")
x="我爱你 ,我真的服了"
print(x.endswith("服了"))
isupper()
判断字符串所有字母是否都为大写
print("——————isupper———————")
x="I LOVE YOU"
print(x.isupper())
islower()
判断字符串所有字母是否都为小写
print("——————islower———————")
x="i love you"
print(x.islower())
istitle()
判断字符串所有字母是否以大写开始,其他全为小写
print("——————istitle———————")
x="I Love You"
print(x.istitle())
isalpha()
判断是否只有字母构成,注意空格
print("——————isalpha———————")
x="iloveyou"
print(x.isalpha())
isascii()
判断字符串为空或字符串中的所有字符都是 ASCII
isspace()
判断是否为空白字符串 \n 和 空格 为空白字符串
print("——————isspace———————")
x=" "
print(x.isspace())
isprintable()
判断所有字符是否可以打印 \n 不能打印
print("——————isprintable———————")
x=" \n "
print(x.isprintable())
isdecimal()
检查是不是数字 一般只用于 1 2 3这种数字
isdigit()
检查是不是数字 支持
isnumeric()
检查是不是数字 支持 一 Ⅰ等多种类型数字
isalnum()
当 isalpha isdecimal isnumerical isdigit返回 true 时,它也返回 true
isidentifier()
判断字符串是否是一个合法的标识符
print("——————isidentifier———————")
x="a_1"#正确
y="1_a"#错误
print(x.isidentifier())
iskeyword(“sub”) sub为要查找的字符
来查看该字符是否为python中的关键字
print("——————iskeyword———————")
import keyword
print(keyword.iskeyword("if"))
lstrip(“sub“) sub默认情况为空,如果写上字符串abc 则代表去除左侧abc。但是有空格则都不去除
去除左侧的空格
print("——————lstrip———————")
x=" ljs"
print(x.lstrip())
lstrip(“sub“)sub默认情况为空,如果写上字符串abc 则代表去除右侧abc。但是有空格则都不去除
去除右侧的空格
print("——————rstrip———————")
x="ljs "
print(x.lstrip())
strip(“sub“)sub默认情况为空,如果写上字符串abc 则代表去除左右测abc。但是有空格则都不去除
去除左右侧的空格
print("——————strip———————")
x=" ljs "
print(x.strip())
x=" wx ljs wx"
print(x.strip("wx"))
removeprefix()
删除指定的前缀 注意空格字符串
print("——————removeprefix———————")
x="www.ljs.com "
print(x.removeprefix("www."))
removesuffix()
删除指定的后缀 注意空格字符串
print("——————removeprefix———————")
x="www.ljs.com "
print(x.removesuffix("com "))
partition(”sub“) sub为分隔的字符串
根据输入要求从左往右,把字符串分为三部分,第一部分:为分隔符左侧,第二部分为:分隔符,第三部分:为分隔符右侧
print("——————partition———————")
x="www.ljs.com "
print(x.partition("."))
rpartition(”sub“) sub为分隔的字符串
根据输入要求从右往左,把字符串分为三部分,第一部分:为分隔符左侧,第二部分为:分隔符,第三部分:为分隔符右侧
print("——————rpartition———————")
x="www.ljs.com "
print(x.rpartition("."))
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))
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))
splitlines(True)
按行进行分隔。如果写上true代表加上换行符输出
print("——————splitlines———————")
x="www\nljs\ncom"
y="www\nljs\rcom"
print(x.splitlines())
print(x.splitlines(True))
”sub“.join(["一部分",”二部分“,”三部分“])
把sub插入到各个部分之间,里面可以是列表【】,也可以是元组()
print("——————join———————")
x='.'
y=x.join(["www","ljs","com"])
print(y)
语法:”刘家森{}“.format(”帅“)
作用:把字符串中的量当作一个可以输出的值,方法是{}代表这里要输出的位置,format里面是输出的值
print("———————format默认单插入———————————")
year=2010
x="刘家森来自于{}"
y=x.format(year)
print(y)
(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)
(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)
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)
(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)
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)
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)
作用:简化了 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)
(1)在 python中 所有对象 都有三个属性 ,唯一标识(不可修改无重复),类型,值
(2)id(s)查看 s 的唯一标识
进行列表,元组,字符串的拼接
print("——————— + —————————————")
print([1,2,3]+[4,5,6])
print((1,2,3),(4,5,6))
print("123"+"456")
进行列表,元组,字符串的多倍输出
print("——————— * —————————————")
print([1,2,3]*3)
print((1,2,3)*3)
print("123"*3)
检测对象的 id 值 是否相等
print("——————— is —————————————")
a=1
b=1
if(a is b):
print("一样")
else:
print("不一样")
检测对象的 id 值 是否不相等
print("——————— is not —————————————")
a=1
b=1
if(a is not b):
print("一样")
else:
print("不一样")
判断某个函数是否在序列中
print("——————— in —————————————")
a="ljslcc"
if('j' in a):
print("在")
else:
print("不在")
判断某个函数是否不在序列中
print("——————— not in —————————————")
a="ljslcc"
if('j' not in a):
print("在")
else:
print("不在")
删除一个或多个指定的对象
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)
把元组,字符串变为列表
print("——————— list—————————————")
x=list((1,2,3,4,5))
print(x)
x=list("123456")
print(x)
把列表,字符串变为元组
print("——————— tuple—————————————")
x=tuple([1,2,3,4,5])
print(x)
x=tuple("123456")
print(x)
把元组,列表变为字符串
print("——————— str—————————————")
x=str((1,2,3,4,5))
print(x)
x=str([1,2,3,4,5])
print(x)
对比传入所有参数 返回最小的
注意啊事项:(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))#输出具有最小值的列表
对比传入所有参数 返回最大的
print("————————— max —————————————")
s="ljsandlcc"
print(max(s))
len(sub) 获取 sub 长度
获取变量的长度 len函数的范围有限,2的32/64次方-1
print("————————— len ————————————")
x="abcd"
print(len(x))
sum(sub) 对 sub 内求和
进行输入参数求和,输入可以为元组,列表
print("————————— sum ————————————")
x=(1,2,3,4,5)
print(sum(x))
y=5
print(sum(x,y))
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))#根据 长度 排序
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)
all()
判断所有元素是否为真(0为假)
print("————————— all ————————————")
x=[0,1,2]
y=[1,2,3]
print(all(x))
print(all(y))
判断是否存在元素是否为真(0为假)
print("————————— any ————————————")
x=[0,1,2]
y=[1,2,3]
print(any(x))
print(any(y))
把一个列表数据,通过自定义或者默认方式加上一个编号,构成二维元组
print("————————— enumerate ————————————")
x=["spring","summer","winter"]
print(list(enumerate(x)))
print(list(enumerate(x,5)))
把列表或者字符串进行对应拼接构成新的元组。例如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))
根据自定义函数对可迭代对象的每个元素进行运算,并将运算之后的结果返回给迭代器
注意事项:(1)对于多参数情况,以最短为基础
print("————————— map 单参数————————————")
maped=map(ord,"ljsandlcc")
print(list(maped))
print("————————— map 多参数————————————")
maped=map(pow,(1,2,3),(2,2,2))
print(list(maped))
根据自定义函数对可迭代对象的每个元素进行运算,并将运算之后的为真结果返回给迭代器
print("————————— filter 单参数————————————")
maped=filter(str.islower,"Jason")
print(list(maped))
(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))
逐个将迭代器的元素提取出来
注意事项:(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,"没了"))
方法:(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)
formkeys(iterable,values) 把迭代器对象赋值给 values
方法:x【”A“】=250 键A赋值250.如果字典有 A 了则是修改,如果没有则是添加
print("———————— 字典 增加内容————————————")
x=dict.fromkeys("ljs",250)#初始化一个 字典
print(x)
x["a"]=250#添加内容
print(x)
(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)
clear()
print("———————— 字典 清空————————————")
x=dict.fromkeys("ljs",250)#初始化一个 字典
print(x)
x.clear()
print(x)
方法:(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)
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)
视图对象:是字典的动态试图,当字典内容改变,视图对象内容也改变
获取字典的键值对视图对象
获取字典的键视图对象
获取字典的值视图对象
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)
获取字典长度
print("———————— 字典 len———————————")
m=dict.fromkeys("ljs",250)#初始化一个 字典
print(len(m))
判断键是否存在于字典中
print("———————— 字典 in———————————")
m=dict.fromkeys("ljs",250)#初始化一个 字典
print('l' in m)
print("———————— 字典 not in———————————")
m=dict.fromkeys("ljs",250)#初始化一个 字典
print('l' not in m)
把字典中所有的键变为列表,输出键值用values()
print("———————— 字典 list———————————")
m=dict.fromkeys("ljs",250)#初始化一个 字典
n=list(m)
print(n)
将字典的键构成一个迭代器
print("———————— 字典 iter———————————")
m=dict.fromkeys("ljs",250)#初始化一个 字典
e=iter(m)
print(next(e))
print(next(e))
print(next(e,"没了"))
print(next(e,"没了"))
对字典内部键值对进行逆向操作
print("———————— 字典 reversed———————————")
m=dict.fromkeys("ljs",250)#初始化一个 字典
e=reversed(m)
print(list(e))
copy() 浅拷贝
print("———————— 字典 浅拷贝copy———————————")
m=dict.fromkeys("ljs",250)#初始化一个 字典
n=m.copy()
print(m)
print(n)
字典里面的键值也为字典
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
通过 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)
方法:(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)
判断某个元素是否存在集合中
print("——————————集合in ———————")
s=set("ljs")
print('s' in s)
print("——————————集合not in ———————")
s=set("ljs")
print('s' not in s)
通过推导式进行访问
print("——————————集合元素访问 ———————")
s=set("ljs")
for each in s:
print(each)
由于集合具有元素不重复的特点,所以可以对一个列表进行集合设置,从而实现去掉重复值
print("——————————集合元素去重 ———————")
s=list("ljsljs")
print(s)
s=set(s)
print(s)
实现集合的浅拷贝
print("——————————集合函数 copy ———————")
d=set("abc")
print(d)
t=d.copy()
print(t)
判断两个集合是否相干(是否存在交集)
print("——————————集合函数 isdisjoint ———————")
s=set("ljs")
print((s.isdisjoint(set("lcc"))))#这里lcc和ljs具有交集 l 所以相干,所以是false
判断一个集合是否是另外一个集合的子集之后返回一个新集合
注意事项:(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")))
判断一个集合是否是另外一个集合的超集之后返回一个新集合(if B中容易元素都是 A的元素,则A为B超级)
print("——————————集合函数 issuperset ———————")
d=set("abcdef")
print((d.issuperset("abcd")))
把两个集合求并集之后返回一个新集合
print("——————————集合函数 union ———————")
q1=set("abcdef")
print((q1.union("gh","pl")))
求两个集合交集之后返回一个新集合
print("——————————集合函数 intersection ———————")
q1=set("abcdef")
print((q1.intersection("ach")))
求两个集合的差集之后返回一个新集合
print("——————————集合函数 difference ———————")
q1=set("abcdef")
print((q1.difference("abgh")))
求两个集合对称差集之后返回一个新集合(排除两个集合共有元素,由剩余元素组成的结合叫对称差集)
print("——————————集合函数 symmetric_difference ———————")
q1=set("abcdef")
print((q1.symmetric_difference("abgh")))
对集合进行数据(列表,字符串)插入
注意事项:(1)只能 set 不能 frozenset
(2)修改当前集合
(3)之前没有 update 的是返回一个修改之后的新集合,有 update 的是直接修改原集合
print("—————————set函数 updtae—————————————————")
x = set("ljs")
x.update(set("and"))
print(x)
与 intersection功能一样,区别在于没有返回值,是对原集合进行修改
print("—————————set函数 intersection_updtae—————————————————")
x = set("ljs")
x.intersection_update(set("andl"))
print(x)
与 difference功能一样,区别在于没有返回值,是对原集合进行修改
print("—————————set函数 differnce_updtae—————————————————")
x = set("ljs")
x.difference_update(set("and"))
print(x)
与 symmetric 功能一样,区别在于没有返回值,是对原集合进行修改
print("—————————set函数 symmetric_difference_updtae—————————————————")
x = set("ljs")
x.symmetric_difference_update(set("andl"))
print(x)
将传入的字符串整体传入,而不是 update一样分开一个一个传入
print("—————————set函数 add—————————————————")
x = set("ljs")
x.add("andl")
print(x)
删除集合中某个元素,如果元素不存在则抛出异常
print("—————————set函数 remove—————————————————")
x = set("ljs")
x.remove("l")
print(x)
删除集合中某个元素,如果元素不存在则静默处理
print("—————————set函数 discard—————————————————")
x = set("ljs")
x.discard("al")
print(x)
随机弹出集合中的一个元素
print("—————————set函数 pop—————————————————")
x = set("aljs")
x.pop()
print(x)
清空集合内容
print("—————————set函数 clear—————————————————")
x = set("aljs")
x.clear()
print(x)
哈希值就像一个人的身份证,不同人的身份证不一样。并且人发生了变化,哈希值也会变化,所以可以通过哈希值对内容较大的数据进行控制
hash(object)获取 object 的哈希值
注意事项:(1)对于整数求哈希值,永远是其本身
(2)对于 1 和 1.0 的哈希值一样,但 1.01就不一样
(3)可变对象(列表,集合)没有哈希值
(4)不可变对象(字符串)有哈希值
(5)只有可哈希的对象才能作为字典的键以及集合元素
(6)要实现集合嵌套,不能用 set 而要用 frozenset 因为这是不可变集合
可以快速的在列表进行查找里面的元素,比如说 列表是新华字典里面一页一页的找相同的字。而集合上则是按拼音进行查找。但集合也需要大量内存空间!
def 函数名():
pass
print("————————函数定义————————————")
def myfunc():
# pass#空执行
for i in range(3):
print("ljs",end=' ')
myfunc()
print("\n")
print("————————函数参数————————————")
def myfunc(name,times):
# pass#空执行
for i in range(times):
print(F"ljs{name}",end=' ')
myfunc(" and lcc",2)
print("\n")
函数如果没写 return 也会默认返回一个 none
print("————————函数返回值————————————")
def div(x,y):
if(y==0):
return "除数不能为0!!!"
else:
return x/y
result=div(4,2)
print(result)
print("\n")
根据参数位置是确定的,如果不按照这个顺序输入,结果就会不一样
def myfunc(s,vt,o):
return "".join((o,vt,s))#返回一个字符串,并且这个字符串调用了 join函数进行字符串拼接
print(myfunc("我","打","你"))
根据参数名字确定,跟位置没关系
print("—————————关键字参数———————————————")
def myfunc(s,vt,o):
return "".join((o,vt,s))#返回一个字符串,并且这个字符串调用了 join函数进行字符串拼接
print(myfunc(o="我",vt="打",s="你"))
print()
默认参数必须放在后面,不能放在前面
注意事项:(1)对于一些函数,例如 sum abs 是不允许进行关键字参数,只能位置传递。
abs(x=-1)❌ abs(-1)✔
(2)关键字参数看 * 位置参数看 /
print("—————————默认参数———————————————")
def myfunc(s,vt,o="我"):
return "".join((o,vt,s))#返回一个字符串,并且这个字符串调用了 join函数进行字符串拼接
print(myfunc("你","打","刘家森"))
print()
定义:传入参数的数量随意,这样的参数叫收集参数
语法:* 形参名字
注意事项:(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()
为了实现传入的元组进行解包成单独模块
注意事项:(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()
指一个变量可以被访问的范围。当一个变量被定义在函数内部中,这个变量称为局部变量
print("—————————作用域 局部 ———————————————")
def myfunc():
x=520
print(x)
myfunc()
#print(x)这是一个局部变量,无法在全局中访问
定义在函数外部的变量,作用域为全局,这个变量称为全局变量
print("—————————作用域 全局 ———————————————")
x = 520
def myfunc():
x=250
print(x)
myfunc()
print(x)#这是一个全局变量,无法在全局中访问
在局部变量前加一个 global 可以实现 局部变量修改全局变量的值
print("—————————作用域 global ———————————————")
x = 520
def myfunc():
global x
x=250
print(x)
myfunc()
print(x)
在一个函数内部在定义一个函数。在使用内部函数时,需要在内部提取调用
print("—————————嵌套函数 ———————————————")
def myfunc():
x=520
def myfund():
x=250
print("d:x=",x)
myfund()#嵌套函数需要在函数内部中 调用,外部不能调用
print("c:x=",x)
myfunc()
print()
在内部函数中去修改外部函数的变量
print("—————————嵌套函数 nonlocal———————————————")
def myfunc():
x=520
def myfund():
nonlocal x
x=250
print("d:x=",x)
myfund()#嵌套函数需要在函数内部中 调用,外部不能调用
print("c:x=",x)
myfunc()
print()
L:local 局部作用域,局部作用域会消失
E:enclosed 嵌套函数外层函数作用域 外层作用域的值会保留下来
G:global 全局作用域
B:build-in 内置作用域 相当于内置函数变为了变量名
当作用域发生冲突时,例如 L 和 G,则 python 会使用 L 局部作用域
简单解释就是说,内层函数调用了外层函数的变量,并且外层函数返回的是内存函数的引用。这样子就可以实现对一个变量重复改变使用。举个例子,一个点在坐标移动,它往右移动之后得到新坐标,这时再往上移动不是从原点出发,而是从第一次移动后的点
print("—————————闭包———————————————")
def power(exp):
def exp_of(base):
return base ** exp
return 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=0
y=0
def inner(x1,y1):
nonlocal x,y
x+=x1
y+=y1
print(F"x={x},y={y}")
return inner
move=outer()
print(move(1,2))
print(move(-1,2))
作用:在闭包基础之上,把函数的传入参数也设置为函数,这样就相当于先执行闭包的内层函数,再碰到外层的传入函数时,就执行调用的函数。
本质:再调用函数的时候,相当于把调用函数放进了装饰器里面!
语法(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()
在被调用函数上存在多个装饰器,调用顺序从下往上
print("—————————函数作为参数传递 多装饰器 ———————————————")
def add(func):
def inner():
x=func()
return x+1
return inner
def cube(func):
def inner():
x=func()
return x*x*x
return inner
def square(func):
def inner():
x=func()
return x*x
return inner
@add
@cube
@square
def test():
return 2
print(test())
语法(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_func
return time_master
@logger("A")
def funA():
time.sleep(1)
print("A")
@logger("B")
def funB():
time.sleep(2)
print("B")
funA()
funB()
作用:解决一些简单的函数
语法: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))
作用:让函数退出之后还能保留状态,是一种特殊的迭代器
语法:yield 替换 return
print("——————————yield基本规则————————————")
def counter():
i=0
while(i < 5):
yield i
i+=1
for i in counter():
print(i)
print("——————————yield+next————————————")
c=counter()
print(next(c))
print(next(c))
print(next(c))
区别:列表推导式:一次性生成所有数据放到列表中
生成器推导式:一次只产生一个数据
方法:(1)使用 yield
(2)直接写
print("——————————生成器直接表达式————————————")
t=(i*i for i in range(5))
for i in t:
print(i)
作用:函数调用自身的过程
print("———————递归基本规则-无限循环———————————")
# def func():
# print("ljs")
# func()
# print(func())
print("———————递归基本规则-条件循环———————————")
def func(i):
if i>0:
print(F"ljs{i}")
i-=1
func(i)
print(func(10))
print("———————递归基本规则-阶层1———————————")
def factIter(n):
result=n
for i in range(1,n):
result *=i
return result
print(factIter(5))
print("———————递归基本规则-阶层2———————————")
def factIter(n):
if n==1:
return 1
else:
return n*factIter(n-1)
print(factIter(5))
print("———————递归基本规则-斐波那契数列迭代———————————")
def fib(n):
a=1
b=1
c=1
while(n>2):
c=a+b
a=b
b=c
n -=1
return c
print(fib(12))
print("———————递归基本规则-斐波那契数列递归———————————")
def fibc(n):
if n==1 or n==2:
return 1
else:
return fibc(n-1)+fibc(n-2)
print(fibc(12))
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')