Advertisement

第三四章笔记

阅读量:

# 第三章

#字符串

概念:

字符串:由0个或多个字符组成的有序字符序列

字符串由一对单引号或一对双引号表示

字符串是字符的有序序列,可以对其中的字符进行索引

"hello"---->h e l l o

索引 0 1 2 3 4

操作符及使用 描述
x+y 连接连个字符x和y
nx或xn 复制n次字符串x
x in s 如果x是s的字串,返回True,否则返回False

正向递增反向递减

使用[ ]获取字符串中一个或多个字符

数值小的在前面

索引:返回字符串中单个字符 <字符串>[M]

切片:返回字符串中一段字符子串 <字符串>[M: N]

左开右闭

举例

正向递增 0 1 2 3 4 5 6

反向递减 -7 -6 -5 -4 -3 -2 -1

云 想 衣 裳 花 想 容

复制代码
 Str = "云想衣裳花想容"

    
 print(Str[2:4])
    
 print(Str[-5:-3])
    
 print(Str[-5:4])
    
    
    
    
    AI写代码

#转义字符

1.转义符形成一些组合,表达一些不可打印的含义

"\b"回退

"\n"换行(光标移动到下行首)

"\r" 回车(光标移动到本行首)

让这个双引号去掉本身含义,就打印双引号

复制代码
  
    
 print("我想\"嫁给\"秦霄贤")
    
    
    
    
    AI写代码

常用函数

len() 获取字符串的长度

复制代码
 a = len("去某个国家追个星")

    
 print(a)
    
    
    
    
    AI写代码

str() 把任意数据类型转换成string

复制代码
 b = 30

    
 print(type(b))
    
 c = str(b)
    
 print(type(c))
    
    
    
    
    AI写代码

#Type()输出数据类型的

#hex() 十进制转换成十六进制(0x)

复制代码
    print(hex(99))
    
    AI写代码

#oct() 十进制转换成八进制(0o)

复制代码
    print(oct(99)
    
    AI写代码

#chr() 十进制转换成字符

复制代码
    print(chr(68))
    
    AI写代码

#ord() 字符转换成十进制

复制代码
    print(ord('A'))
    
    AI写代码
函数及使用 描述
len(x) 长度,返回字符串x的长度 len("一二三456")结果为6
str(x) 任意类型x所对应的字符串形式 str(1.23)结果为"1.23"str([1,2])结果为"[1,2]"
hex(x)或oct(x) 整数x的十六进制或八进制小写形式字符串 hex(425)结果为"0x1a9" oct(456)结果为"0o651"

方法本身也是函数,但与有关,.()风格使用

方法是一个特殊的函数

方法vs 函数

函数--->函数名字() 方法 类/模块.方法名字()

方法是一个特殊的函数

str.lower() 把字符串转换成小写 返回字符串

复制代码
 a = "AASDFGH"

    
 print(a.lower())
    
    
    
    
    AI写代码

#str.upper() 把字符串转换成大写 返回字符串

复制代码
 b = "luck"

    
 print(b.upper())
    
    
    
    
    AI写代码

#str.split(按照什么拆分) 拆分 返回的是list列表[]

复制代码
 c = "I,love,you"

    
 print(c.split(","))
    
    
    
    
    AI写代码

#str.count(子串) 某一个子串在str(字符串)中出现的次数 返回值整数类型

复制代码
 d = "o"

    
 #o在I,love,you中出现了多少次  2 
    
 print(c.count(d))
    
 print(type(c.count(d)))
    
    
    
    
    AI写代码

#str.replace(old,new) str中的任意一个子串替换成新的子串 返回字符串

复制代码
 Str01 = "I,LOVE,YOU"

    
 Str02 = Str01.replace("YOU", "李雪琴")
    
 print(Str02)
    
    
    
    
    AI写代码

#str.center(宽度,新的字符) Str字符串根据某一个宽度进行居中 返回值字符串

"""

宽度 = 新的字符+str

新的字符必须是一个字符

"""

复制代码
 Str03 = "刘华强"

    
 Str04 = Str03.center(10)
    
 print(Str04)
    
 Str05 = Str03.center(10,"牛")
    
 print(Str05)
    
    
    
    
    AI写代码

#str.strip(字符) 去掉左右两边的字符 返回字符串

复制代码
 Str06 = "==I,LIVE,YOU=="

    
 Str07 = Str06.strip("=L")
    
 print(Str07)
    
    
    
    
    AI写代码

一些以方法形式提供的字符串处理功能

方法及使用 描述
str.lower()或str.upper() 返回字符串的副本,全部字符小写/大写 "AbCdEfGh".lower()结果为"abcdefgh"
str.split(sep=None) 返回一个列表,由str根据sep被分隔的部分组成 "A,B,C".split(",")结果为['A','B','C']
str.count(sub) 返回字串sub在str中出现的次数 "a apple a day".count("a")结果为4


#格式化

第一种方式

使用百分号进行格式化输出的方式,用法如下:

%s,表示字符串;

%d,表示整数;

%f,表示浮点数。

%代表一个占位符

复制代码
 name = "张三"

    
 age = 18
    
 print("%s is %d year old"%(name,age))
    
    
    
    
    AI写代码

1.字符串和int不能拼接

2.对数据有未知性

格式化:让数据更加明了

# List

概念

列表是序列类型的一种扩展,十分常用

列表是一种序列类型,创建后可以随意被修改

创建

使用方括号 [] 或list() 创建,元素间用逗号 , 分隔

列表中各元素类型可以不同,无长度限制

复制代码
 ● list01 = [1,2,3,4]

    
 ● """
    
 ●   [] 空列表
    
 ●   list() 里面什么都没有,创建空列表
    
 ●   list(["张三","李四"])
    
 ● """
    
 ● list02 = list() #[]
    
 ● list03 = list(["张三","李四"])
    
 ● print(list01)
    
 ● print(list02)
    
 ● print(list03)
    
 ● list04 = [12.3,10,3.14e2,"张三"]
    
 ● print(list04) #[12.3, 10, 314.0, '张三']
    
    
    
    
    AI写代码

常用函数

#创建list

复制代码
    list01 = [1,2,5,7,-2,-9]
    
    AI写代码

#len(列表) 统计列表中元素的个数

复制代码
 a = len(list01)

    
 print(a) #6
    
    
    
    
    AI写代码

#sum(列表) 求和

复制代码
 b = sum(list01)

    
 print(b) #4
    
    
    
    
    AI写代码

#max(列表) 最大值

复制代码
 c= max(list01)

    
 print(c) #7
    
    
    
    
    AI写代码

#min(列表) 最小值

复制代码
 d = min(list01)

    
 print(d) #9
    
    
    
    
    AI写代码

# 增

# 元组

概念

元组是序列类型的一种扩展

• 元组是一种序列类型,一旦创建就不能被修改 不能增删改

创建

• 使用小括号 () 或 tuple() 创建,元素间用逗号 , 分隔

复制代码
 •#创建

    
 •tuple01 = (1,2,3)
    
 •tuple02 = tuple() #空元组  ()
    
 •tuple03 = tuple((5,6,7))
    
 •print(tuple01)
    
 •print(tuple02)
    
 •print(tuple03)
    
    
    
    
    AI写代码

# 查

运算符

# set

概念

集合是多个元素的无序(没有下标)组合

集合类型与数学中的集合概念一致

集合元素之间无序,每个元素唯一,不存在相同元素

集合元素不可更改,不能是可变数据类型

为什么? 无序唯一

创建

集合用大括号 {} 表示,元素间用逗号分隔

建立集合类型用 {} 或 set()

建立空集合类型,必须使用set()

复制代码
        1. ● #创建

    
        2. ● set01 = {1,2,3,4,5}
    
        3. ● set02 = set() #set()
    
        4. ● set03 = set({9,10,11})
    
        5. ● print(set01)
    
        6. ● print(set02) 
    
        7. ● print(set03)
    
    AI写代码

空列表 []

空元组 ()

空字典 {}

空集合 set()

原因是字典的创建也是{},两者冲突了

所以我们的空集合是set(),创建空集合的时候必须使用set()

复制代码
        1. ● print(type({})) #<class 'dict'>

    
        2. ● print(type(set())) #<class 'set'>
    
    AI写代码

#增

#删

#改

不可以更改数据

集合元素不可更改,不能是可变数据类型

为什么? 无序唯一

#查

直接打印集合名字去查询

不能使用索引进行查询,因为我们集合是无序的

复制代码
        1. print(set01)

    
        2. print(set02) 
    
        3. print(set03)
    
    AI写代码

# 第四章

#判断语句if

#单分支

语法

if 条件:

代码块

1.冒号必须是英文状态下

2.必须要缩进

执行流程

代码

eval(字符串)

1.把字符串转换成int类型

a = eval("10")

print(a) #10

print(type(a)) #<class 'int'>

2.对字符串进行计算

a = "3*2"

print(a) #3*2

b = eval(a)

print(b) #6

复制代码
        1. #input("请猜一个数字") ---Str

    
        2. #eval() 把Str转换成int
    
        3. guess  = eval(input("请猜一个数字"))
    
        4. if guess ==99:
    
        5.     print("恭喜你猜对了") #恭喜你猜对了
    
    AI写代码

#二分支

语法

if 条件:

代码块

else:

代码块

执行流程

代码

复制代码
        1. guess  = eval(input("请猜一个数字"))

    
        2. if guess == 99:
    
        3.     print("恭喜你猜对了")
    
        4. else:
    
        5.     print("谢谢惠顾")
    
    AI写代码

#多分支

语法

if 条件:

代码块

elif 条件:

代码块

elif 条件:

代码块

........

else:

代码块

执行流程图

代码

复制代码
        1. score = eval(input("请输入一个成绩:"))

    
        2. if score >= 90:
    
        3.     print("a")
    
        4. elif 90 > score>=80:
    
        5.     print("B")
    
        6. elif 80 >score>=70:
    
        7.     print("C")
    
        8. elif 70>score>=60:
    
        9.     print("D")
    
        10. else:
    
        11.     print("不及格")
    
    AI写代码

#三目运算符

语法

满足条件的代码块 if 条件 else 不满足条件的代码块

"""

三目运算符

if的缩写

满足条件的代码块 if 条件 else 不满足条件的代码块

"""

执行流程

代码

复制代码
    guess  = eval(input("请猜一个数字"))

    
    AI写代码
复制代码
    print("恭喜你,猜对了")if guess == 99 else print("谢谢惠顾")

    
    AI写代码

注意

1. 必须是二分支语句

条件判断以及组合

操作符 操作符 描述
< < 小于
<= 小于等于
>= 大于等于
> > 大于
== = 等于
! = 不等于
操作符及使用 描述
x and y 两个条件x和y的逻辑与
x or y 两个条件x和y的逻辑或
not x 条件x的逻辑非

##循环语句for

语法

for 变量 in 遍历结构:

代码块

执行流程

用法

字符串遍历

复制代码
        1. Str = "hello python"

    
        2. for  i in Str:
    
        3.     print(i)
    
    AI写代码

列表遍历

复制代码
        1. list01 = ["赵丽颖","舒畅","戚薇","朱梓骁"]

    
        2. for i in list01:
    
        3.     print(i)
    
    AI写代码

字典遍历

复制代码
        1. dict01 = {"天龙八部":"段誉","倚天屠龙记":"张无忌","九阴真经":"周芷若","射雕英雄传":"郭靖"}

    
        2.  
    
        3. """
    
        4.  1.用普通遍历,只能打印key
    
        5.     天龙八部
    
        6.     倚天屠龙记
    
        7.     九阴真经
    
        8.     射雕英雄传
    
        9. """
    
        10. for i in dict01:
    
        11.     print(i)
    
        12. """
    
        13.  2.字典.items()  返回一个元组("天龙八部","段誉")
    
        14.     ('天龙八部', '段誉')
    
        15.     <class 'tuple'>
    
        16.     ('倚天屠龙记', '张无忌')
    
        17.     <class 'tuple'>
    
        18.     ('九阴真经', '周芷若')
    
        19.     <class 'tuple'>
    
        20.     ('射雕英雄传', '郭靖')
    
        21.     <class 'tuple'>
    
        22. """
    
        23. for t in dict01.items():
    
        24.     print(t)
    
        25.     print(type(t))
    
        26. """
    
        27.  3.获取单独的key和value,就是想办法把元组拆分,返回基本数据类型
    
        28.      把元组赋值给两个变量
    
        29.     天龙八部
    
        30.     <class 'str'>
    
        31.     段誉
    
        32.     <class 'str'>
    
        33. """
    
        34. for k,v in dict01.items():
    
        35.     print(k)
    
        36.     print(type(k)) #Str
    
        37.     print(v)
    
        38.     print(type(v)) #Str
    
    AI写代码

#Set集合遍历****

复制代码
        1. set01 = {1,2,3,4}

    
        2. for i in set01:
    
        3.     print(i)
    
    AI写代码

******无限循环(**while)

语法

while 条件:

变量改变公式

代码块

代码

复制代码
        1. a = 10

    
        2. while a>0:
    
        3.     #变量不断改变,为了满足条件,避免进入死循环
    
        4.     a -= 1
    
        5.     print(a)
    
    AI写代码

breakcontinue****

break跳出并结束当前整个循环,不执行循环后的语句

continue结束当次循环,继续执行后续次数循环

执行流程


代码

复制代码
        1. for i in [1,2,3,4,5]:

    
        2.     if i==2:
    
        3.         break
    
        4.     print(i) #1
    
        5.  
    
        6. for i in [1,2,3,4,5]:
    
        7.     if i==2:
    
        8.         continue
    
        9.     print(i) #1
    
    AI写代码

#循环加else

语法

for 变量 in 遍历结构:

代码块

else:

代码块

执行流程

1.先执行完for循环

2.执行完以后执行else

代码

复制代码
        1. for i in [1,2,3,4,5]:

    
        2.     print(i)
    
        3. else:
    
        4.     print("循环结束")
    
    AI写代码

同理,while能不能加else,可以,和上面一样

#while语法

while <条件> :

<语句块1>

else :

<语句块2>

#循环结束后,会执行else的代码

#参数传递

参数传递机制

函数参数传递机制和赋值机制是一样的,其本质就是传递内存地址,这就是引用传递

a传进来的时候传进来的是内存地址

如果实在不理解,你可以以为是 x= a

复制代码
        1. def isid(x):

    
        2.     #打印参数的内存地址
    
        3.     print(id(x))
    
        4.  
    
        5. a = 10
    
        6. #变量的内存地址
    
        7. print(id(a)) #140731588047408
    
        8.  
    
        9. #a变成的参数,打印参数内存地址
    
        10. isid(a) #140731588047408
    
    AI写代码

#默认参数

复制代码
        1. #定义一个带有默认参数的函数

    
        2. def add(x,y=10):
    
        3.     sum01 = x+y
    
        4.     return sum01
    
        5.  
    
        6. """
    
        7. 1.add(2)  x=2  y=10
    
        8. 2.add(2,3)  x=2  y=3
    
        9. """
    
        10. print(add(2)) #12
    
        11. print(add(2,3)) #5
    
        12.  
    
        13.  
    
        14. """
    
        15.  能不能传参传入一个序列类型,比如list,让他默认是[]
    
        16. """
    
        17. def add(list01 = []):
    
        18.     list01.append(1)
    
        19.     return list01
    
        20.  
    
        21. #第一调用
    
        22. print(add()) #[1]
    
        23. #第二次调用
    
        24. print(add()) #[1, 1]
    
        25. #第三次调用 
    
        26. print(add()) #[1, 1, 1]
    
    AI写代码

不定数目的参数

******一个 *******

一个* :代表的是可变参数(就是可以是多个值)

复制代码
        1. def add(x,*y):

    
        2.     sum01 = x
    
        3.     for i in y:
    
        4.         sum01 += i
    
        5.     return sum01
    
        6.  
    
        7. print(add(1,2,3,4,5)) #15
    
    AI写代码

两个*

**y代表可以使用任意 键值(字典) 作为参数

**y就相当于字典类型

复制代码
        1. def func_add(x,**y):

    
        2.     sum01 = x
    
        3.     #切记这里是字典的循环
    
        4.     for k,v in y.items():
    
        5.         print(k,v)
    
        6.         #把v(值)进行和x相加
    
        7.         sum01 += v
    
        8.     return sum01
    
        9.  
    
        10. """
    
        11.  调用
    
        12. a=3,b=4,c=5 ----> {"a":3,"b":4,"c":5}
    
        13. """
    
        14. print(func_add(1,a=3,b=4,c=5)) #13
    
    AI写代码

name

****1.执行本文件的时候,name==main

#打印name这个属性

#执行本文件的时候,打印的是main,name == main

复制代码
    print("1、"+__name__) #1、__main__

    
    AI写代码

2.在被import导入到别的文件的时候,name==文件名字

一个文件就是一个模块,导入模块,就相当于导入文件,可以直接写

import 文件名字

复制代码
        1. import 本文件 as bwj

    
        2. #在其他类中运行导入的文件名字,__name__==文件名字
    
        3. print(bwj.__name__) #本文件
    
    AI写代码

#高阶函数

高阶函数

定义

高阶函数是一个( 以函数为参数,或者以函数为返回值的)函数

函数可以是参数,参数是变量,那么函数可以是变量吗

参数其实就是变量进行了赋值,函数能不能是变量

复制代码
        1. #定义一个函数,传入一个参数,求这个参数的平方

    
        2. def func_pf(x):
    
        3.     return pow(x,2)
    
        4.  
    
        5. #字典
    
        6. #已知李四的年龄是5的平方,求李四的年龄
    
        7. dict01 = {"张三":20,"李四":func_pf}
    
        8.  
    
        9. """
    
        10.  调用
    
        11.   1.func_pf = dict01["李四"]  根据key获取value,vaule是一个函数对象
    
        12.   2.age02 = func_pf(5) #调用函数就能获取年龄
    
        13. """
    
        14. #字典的特点是根据key获取value
    
        15. age01 = dict01["张三"]
    
        16. print(age01) #20
    
        17.  
    
        18. #顾名思义,通过李四,我们可以拿到函数func_pf
    
        19. #拿到的是函数对象,我们不能直接打印
    
        20. func_pf = dict01["李四"]
    
        21. print(func_pf) #<function func_pf at 0x000001E25A23D048>
    
        22.  
    
        23. age02 = func_pf(5)
    
        24. print(age02) #25
    
    AI写代码

函数为参数

复制代码
        1.  
    
        2. 定义
    
        3. #普通函数
    
        4. def func_pf(x):
    
        5.     return x**2
    
        6.  
    
        7. #高阶函数,以函数为参数
    
        8. def func_add(func_pf):
    
        9.     #x**2+10
    
        10.     return func_pf+10
    
        11.  
    
        12. #2**2+10
    
        13. a = func_add(func_pf(2))
    
        14. print(a) #14
    
    AI写代码

常用的高阶函数

这些常用的高阶函数是以函数为参数的高阶函数

map()

定义

map(fun,x) 转换,接受一个序列,按照fun的函数逻辑转换成新的序列,返回一个map对象

1.x必须是一个序列

  1. 返回一个map对象

执行流程

map(fun,x) 转换,接受一个序列,按照fun的函数逻辑转换成新的序列,返回一个map对象

1. x必须是一个序列

2.返回一个map对象

代码

复制代码
        1. def func_add(x):

    
        2.     return x+1
    
        3.  
    
        4. """
    
        5.   把原来的数据,经过func_add函数以后,每一个都加1,然后输出新的列表
    
        6. """
    
        7. m = map(func_add,[1,2,3,4,5])
    
        8. print(m) #<map object at 0x00000248E965C788>
    
        9. print(list(m)) #[2, 3, 4, 5, 6]
    
    AI写代码

filter()

定义

filter(func,x) 过滤,接受一个序列x,按照func函数要求进行转换,

func函数返回 True 或 False,最后将返回 True 的元素放到新列表中。

返回filter对象

执行流程

filter(func,x) 过滤,接受一个序列x,按照func函数要求进行转换,

func函数返回 True 或 False,最后将返回 True 的元素放到新列表中。

返回filter对象

代码

复制代码
        1. def func_ifScore(x):

    
        2.     #比较运算符,本身就是返回布尔值的
    
        3.     #如果大于等于60就是Ture,否则就是False
    
        4.     return  x>=60
    
        5.  
    
        6. f =  filter(func_ifScore,[80,98,70,34,60,59,10])
    
        7. print(f)  #<filter object at 0x00000232CC78C808>
    
        8. print(list(f)) #[80, 98, 70, 60]
    
    AI写代码

##reduce()

定义

reduce(func,x) 计算,接受一个序列,把列表中的每一个值按照函数进行累加或者别的运算

返回一个计算数值

1.因为是计算,所以我们的func是两个参数

2.必须要导包

执行流程

代码

复制代码
    from functools import reduce

    
    AI写代码

reduce(func,x) 计算,接受一个序列,把列表中的每一个值按照函数进行累加或者别的运算

返回一个计算数值

1.因为是计算,所以我们的func是两个参数

2.必须要导包

复制代码
        1. #累加   1+2+3+4+5

    
        2. def func_add(x,y):
    
        3.     return x+y
    
        4.  
    
        5. a = reduce(func_add,[1,2,3,4,5])
    
        6. print(a) #15
    
    AI写代码

zip()

定义

zip(list01,list02) 拉链、压缩

用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,返回一个对象

1.参数必须是可迭代的序列类型

2.对象里面放的是一个一个的元组

3.返回一个zip对象

代码

复制代码
        1. list03 = [1,3,5,7,9,11,13]

    
        2. list04 = [2,4,6]
    
        3. a = zip(list03,list04)
    
        4. #print(list(a)) #[(1, 2), (3, 4), (5, 6)]
    
        5.  
    
        6. """
    
        7.  a是一个压缩、拉链数据,能不能解压呢,
    
        8.  1.符号是*
    
        9.  2.zip(*list类型)
    
        10.  3.声明两个变量去承接
    
        11.  4.zip对象如果执行过了,就不存在了
    
        12. """
    
        13. b = list(a)
    
        14. list05,list06 = zip(*b)
    
        15. print(list05) #(1, 3, 5)
    
        16. print(list06) #(2, 4, 6)
    
    AI写代码

sorted()

sorted()

定义

sorted(序列类型的对象,key=函数,reverse=True/False) 排序

1.reverse=True/False 升序是False 降序是Ture

执行流程

代码

复制代码
        1. #list里面可以放任何数据类型

    
        2. list01 = [{"name":"张三","age":20},
    
        3.          {"name":"李四","age":30},
    
        4.          {"name":"王五","age":18},
    
        5.          {"name":"小明","age":8}
    
        6.         ]
    
        7.  
    
        8. #按照年龄进行排序
    
        9. #定义一个函数,返回一个年龄
    
        10. def func_age(list01):
    
        11.     #根据key(age)获取value(年龄)
    
        12.     age01 = list01["age"]
    
        13.     return age01
    
        14.  
    
        15. s = sorted(list01,key=func_age,reverse=False)
    
        16. print(s)
    
    AI写代码

函数为返回值

语法

def func_name01(参数1):

def func_name02(参数2):

return 逻辑

return fun_name02

执行流程图

代码

复制代码
        1. #x的y次方

    
        2. def func01(x,y):
    
        3.     return x**y
    
    AI写代码
复制代码
        1.  
    
        2.  
    
        3. """
    
        4.  简化1
    
        5.    以函数为返回值进行简化
    
        6.    1.闭包。函数里面的子函数,叫做闭包
    
        7.     8. """
    
        9. #f01 高阶函数
    
        10. def f01(x):
    
        11.     #f02是f01的子函数,又叫做闭包函数
    
        12.     def f02(y):
    
        13.         return x**y
    
        14.     #把闭包函数返回出来
    
        15.     return f02
    
        16.  
    
        17. """
    
        18.  调用
    
        19.    1.f = f01(2) f是谁,f就是f02(y),相当于f=f02(y)
    
        20. """
    
        21. f = f01(2) #意义就是x=2
    
        22. a = f(3) #意义就是y=3
    
        23. #a=x**y=2**3 = 8
    
        24. print(a) #8
    
    AI写代码

lambda表达式

定义

lambda表达式是一行函数。在其他语言中叫做匿名函数

语法

lambda 参数1,参数2,参数n : 逻辑

代码

复制代码
        1. def func01(x,y):

    
        2.     return x**y
    
        3.  
    
        4. lambda x,y:x**y
    
    AI写代码

#函数的递归

定义

"""

递归是指函数在执行过程中调用了本身。简单来说就是自己调用了自己

1.自己调用自己

2.一定要有一个条件,进行退出调用

"""

代码

"""

递归是指函数在执行过程中调用了本身。简单来说就是自己调用了自己

1.自己调用自己

2.一定要有一个条件,进行退出调用

"""

"""

阶乘:

比如说给一个数据5,阶乘54321

n = 5*(5-1)

n =n*(4-1)

n =n*(3-1)

n =n*(2-1)

总结规律

n! = n*(n-1)

复制代码
        1. def func_jc(n):

    
        2.   if n==1:
    
        3.     return 1
    
        4.   else:
    
        5.     return n*func_jc(n-1)
    
        6.  
    
        7. print(func_jc(5)) #120
    
    AI写代码

流程

# 装饰器

定义

1.装饰器是一个函数

2.装饰器是一个 为函数添加新的属性 的函数

3.通过闭包对函数添加新的属性

闭包函数:函数的子函数就是闭包函数

#异常

定义

语法

Try – except-else

复制代码
        1.  
    
        2.  
    
        3. try:
    
        4.       s = eval(input("请输入一个数字:"))
    
        5.       a = 10/s
    
        6. except ZeroDivisionError:
    
        7.       print("除数不能是零")
    
        8. else:
    
        9.       print("除数是正常的,运行成功")
    
    AI写代码

Try-finally

复制代码
        1. Try-finally

    
        2.   try:
    
        3.      代码块
    
        4.   finally:
    
        5.       代码块
    
    AI写代码

##Raise关键字

raise:无论代码是否异常,他自己会触发异常

语法:

raise 异常名称

复制代码
        1. try:

    
        2.       s = eval(input("请输入一个除数:"))
    
        3.       a = 10/s
    
        4.       #无论你的除数等不等于0,他都会报错
    
        5.       raise ZeroDivisionError
    
        6. except ZeroDivisionError:
    
        7.       #except是异常的时候给出的警告
    
        8.       print("警告:除数不能为0")
    
    AI写代码

常见的异常列表

BaseException 所有异常的基类
SystemExit 解释器请求退出
KeyboardInterrupt 用户中断执行(通常是输入^C)
Exception 常规错误的基类
StopIteration 迭代器没有更多的值
GeneratorExit 生成器(generator)发生异常来通知退出
StandardError 所有的内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
FloatingPointError 浮点计算错误
ValueError 传入无效的参数
ZeroDivisionError 除(或取模)零 (所有数据类型)
KeyError 映射中没有这个键
AttributeError 对象没有这个属性

#作用域

是按照变量的查找顺序 L>E>G>B

L**(local)**局部作用域

复制代码
        1. def func():

    
        2.       #a是函数中的变量,是局部变量,只能在函数中使用
    
        3.       a=10
    
        4.       print(a)
    
        5. #a是不存在的
    
        6. print(a)
    
    AI写代码

******E(********Enclosing)**闭包函数中的作用域

nonlocal :把闭包外的变量引用过来

复制代码
        1. age = 1

    
        2. def qunian():
    
        3.       #闭包外的变量,局部变量  4-11能用
    
        4.       age = 19
    
        5.       def jinian():
    
    AI写代码

******G(********Global)**全局作用域

global****把全局的age引用过来

G(Global) 全局作用域

复制代码
        1. #全局

    
        2. age = 20
    
        3. def func():
    
        4.       #把全局的age引用过来
    
        5.       global age
    
        6.       #局部
    
        7.       #前面的a相当于是重新赋值的a,是局部的
    
        8.       #后面的a是要进行相加的数据,所以要有这个数据,所以是全局的
    
        9.       age=1 + age
    
        10.       return age
    
        11.       
    
        12. print(func()) #30
    
    AI写代码

(Built-in) 内建作用域

系统固定模块里面的变量,比如 int, bytearray 等。

比如函数名 abs、char 和异常名称 BaseException、Exception 等等。