菜鸡总结

今天周日回顾一下上周的内容 上周首先是回顾了一下上周那个大作业 非常详细的讲解了一下 其实还是有一点不很熟练 要多加练习 这周的新内容就觉得更难理解了 开始函数了 首先讲解了一下编码跟解码 编码就是相当于做了一个翻译 人类能够读懂的字符直接转换为计算机能够读懂的字符 解码就是把计算机能够读懂的字符专过来让使用者能够读懂编码 encode 解码decode 用什么编码编的要用什么编码去解否则会报错 python3解释器默认的编码是utf8 代码操作文件的流程1.打开文件创建文件2.编辑文件的内容3.保存文件的内容4.关闭文件 这里有几个关键字 就是用这几个关键字去打开文件 open 读取文件close关闭文件 读取完文件都要关闭所以不要遗忘 close wite 上下文管理 我理解是一种格式 文件的读写模式 r read 只读不写 w write 只写不读 a。 append 追加模式 是在文件末尾添加新的内容 r 模式下就是读取模式,读取模式下路径不存在的情况下会直接报错 路径存在的情况下就是打开文件正常读取文件内容, 还学习了一个 新的代码pass就是用来补全语法还有三个点不过不建议使用 提一下这个单词啊 able 表示具备什么什么能力 readable、就是表示具备读的能力 writbale就是表示具备写的能力 w wite 模式 如果路径不存在就是创建文件 注意如果路径存在会把里边清空然后再写入 换行做一个了解也会经常用 斜杠加n斜杠加r a模式append a模式就是如果路径不存在会自动创建文件 路径存在会在文件末尾写入新的内容就 就很人性化不会改变原来的数据 t 模式rtwtat这三种模式 必须指定encoding参数 这些模式之操作文本文件都是以字符串为最小单位读写 b模式 rbwbab可以操作任意类型的文件 就是不能省略b 不需要加指定参数 读写都是byetes、类型最小的单位还有几个内置方法read一次性读取一次性读取所有 readline一次读取一行内容 readlines结果是一个列表里面的各个元素还是文件的一行一行的内容 readble 判断当前的文件是否可以读取支持for循环 # 一行行读取文件内容(推荐使用) 内存中同一时刻只会有一行内容 write() # 写入文件内容(字符串或者bytes类型) writelines() # 可以将列表中多个元素写入文件 writable() # 判断文件是否可写 flush() # 相当于主动按了ctrl+s(保存) 文件光标我们做一个了解 read括号内写数字可以操作光标的移动 括号内的数字表示的是读取多少个字符个数二进制模式下括号内的数字表示的是读取多少个字节数 seek是可以去控制光标移动 seek(offset,whence)offset是控制移动的字节数 whence是控制模式 tell获取光标到文件开头的字节数光标我们做一个简单的了解就到这里 然后我们开始说一下函数 函数救类似于一个工具用的时候提前定义好然后就可以重复使用它 函数体代码跟循环体代码不同的就是函数体代码是在不同的地方·重复执行而循环体代码是在相同的地方重复执行 函数语法的结构 def关键字不能少 然后是函数名 然后是参数”函数注释也要有 函数体代码 最后是返回值“” 整个结构def关键字肯定不能少 参数可有可无参数的作用就是给函数内部传值 参数可以有多个也可以单个也可以不写看个人所需 函数名也就是相当于变量名指代函数体代码必须要有的 注释也是可有可无 主要就是用一些文字来说明函数的功能使用方法什么的 函数体代码是必不可少的 否则灵魂就没了 return 也是可有可无 不过写了就是return后面些什么返回什么 return就是用来返回值的如果后面什么都不写就是返回空的定义函数体代码一定要一定要遵循先定义后调用 就是定义的函数替代吗一点更要比调用的函数代码先执行 定义玩了我们该调用了调用方法就是 函数名加括号 有参数的情况下我们在括号里写上参数 函数名就是相当与变量名 不要函数名所迷惑 本人经常纠结函数名变量名 函数名之后是参数 参数怎么说就是里边如果有一个a调用的时候就是括号里也得有也不用过于纠结 像我们学习的 if 什么的 都有结构分类什么的函数也是有分类的 函数的分类分内置函数 自定义函数 内置函数 就是python解释器 提前定义好了我们直接拿着用就好 比如 len print open 什么的拿着用别客气 自定义函数也就是我们将来成为程序员自己编写的函数 我们学到的就是 无参函数有参函数 空函数 无参函数这个很好理解吧就是没有参数

定义函数体代码一定要一定要遵循先定义后调用 就是定义的函数替代吗一点更要比调用的函数代码先执行 定义玩了我们该调用了调用方法就是 函数名加括号 有参数的情况下我们在括号里写上参数 函数名就是相当与变量名 不要函数名所迷惑 本人经常纠结函数名变量名 函数名之后是参数 参数怎么说就是里边如果有一个a调用的时候就是括号里也得有也不用过于纠结 像我们学习的 if 什么的 都有结构分类什么的函数也是有分类的 函数的分类分内置函数 自定义函数 内置函数 就是python解释器 提前定义好了我们直接拿着用就好 比如 len print open 什么的拿着用别客气 自定义函数也就是我们将来成为程序员自己编写的函数 我们学到的就是 无参函数有参函数 空函数 无参函数这个很好理解吧就是没有参数 定义的时候就没有参数 有参函数 就是定义的时候括号里边写入了参数 空函数这个用的也比较多 用pass来代替函数替代码 或者三个点来代替 说完def 函数名参数 就到了 返回值 return return后面可以有多个返回值也可以没有前面我们说return可有可无其实我们不写也可以 不写返回值就是none空的只写return返回的也是none空的 记住如果后面写好多个返回值 逗号隔开即可 参数我们也来细说一下还是很重要的 照例依旧先划分 再一个一个细说 参数这里我们给他划分的有 形式参数简称形参 实际参数简称实参 基于这两个还分了位置参数位置实参位置形参 划分了这几个我们先来说形式参数 就是定义阶段括号内填写的变量名 实际参数 就是i奥用函数阶段括号内写的变量名 位置参数我们综上所述也不难来定义 位置形参就是从左往右依次写入的变量名 位置实参就是根据位置形参有多少个一次从左到右传入的真实数据 我们一直在说从左到右因为这是位置参数的特征 特征就是顺序不能乱 位置实参要跟位置形参个数对应 就是不能多也不能少 关键字一听这个关键就不简单他可以打破位置参数从左到右的这个特征 不好讲直接上代码 def index(a, b): print(a, b) index(b=111, a=222) 这里我们定义了这个函数 然后写入了参数 但是是我们给这个ab赋值了所以即使没按顺序也不会报错 相当于提前交代好你你等于多少多少跟谁在一起,这里我们要注意了啊虽然可以提前定义但是如果之定义一个也必须跟在位置参数的后边 也不能给形参定义两个值就是不能有两个实参 形参只能指向一个实参 .默认形参在函数定义阶段就已经给形参赋值了 这个我们也直接上代码 def zqh(a,b,c=100): print(a,b,c) w = a,b,c print(w) zqh(1,2) zqh(1,2,200) zqh(1,2,300) (1, 2, 100) (1, 2, 200) (1, 2, 300) 这里我们可以看到提前定义好c我们在调用的时候即使没传值也没有报错 给c传值就会改变原来定义好的值 可变长形参 号在形参中 可以接收多余的位置参数 并组织成元组的形式赋值给号后面的变量名 在形参中 用于接收多余的关键字参数 并且组织成字典的形式赋值给后面的变量名 def index(*args, **kwargs): 短的参数靠前 长的参数靠后 越简单的靠前 越复杂的靠后

接下来就开始了让人头疼的环节了各位大哥我自己就不是十分理解可能说的也很差劲 我觉得都不好理解 第一个我们就说一下名称空间 名称空间其实就是存放变量名与变量值绑定关系的地方 来我们接着给他划分名称空间又分为内置内置名称空间全局名称空间局部名称空间 内置名称空间就是python解释器给我们定义好了所以偶们也不做过多的讲解 python解释器运行产生 结束销毁 就像 len() print() open()这几个 全局名称空间呢就是 在py文件中编写的代码都会存在全局名称空间之中 个人理解为定义的变量名函数名都是在全局名称空间在没有运行的情况下 局部名称 函数体代码运行产生的都是局部名称空间 他两个的存活周期 2.全局名称空间 py文件开始运行 产生 py文件运行结束 销毁 3.局部名称空间 函数体代码开始运行 产生 函数体代码运行结束 销毁 在名称空间中名字的查找顺序 局部名称的查找顺序 就是由内到外局部到全局再到内置 如果是在全局 就是全局名称空间到内置名称空间 他们的作用域内置名称空间和全局名称空间是全局都有效的 局部空间显然就是局部有效

想办法让三个名称空间中都有相同的名字

len = '我是全局名称空间中的len' def index(): len = '我是局部名称空间中的len' print(len) index() # 调用函数 函数体就会执行 就会产生局部名称空间 print(len) 一如既往的关键字 global nonlocal global 关键字局部修改全局不可变类型 如果想要修改的全局是不可变类型需要加global关键字声明一下如果不是则不用声明 直接上老师的代码

x = 111

def index():

# x = 222 # 并不是在修改全局的x 而是在局部名称空间中创建了一个新的x

# 如果想要在局部名称空间中修改全局名称空间中的名字 那么需要使用关键字申明

global x # 申明 修改的是全局x而不是产生新的x

x = 666

index()

print(x)

l1 = [111, 222, 333] def index(): l1.append(444) index() print(l1) 这里可以看到列表就是可变类型所以不用加 x=111这个值已经定义所以要加关键字来改变

另一个关键字nonlocal 他是用于局部名称嵌套下内层想要修改外层的情况下 两种情况 也是根据数据类型是否可变 如果是不可变需要加 nonlocal 关键字 情况二就是数据可变 就不需要加关键字le 函数名的多种用法 常用的就是函数名也可以当作变量名赋值让变量名指代函数替代码这样我们直接变量名加括号就可以调用 函数名还可以作为容器类型的元素 “”容器类型有以下几个 内部可以存放多种元素的数据类型 如列表元组字典“” 基础阶段比较完善的代码结构 1.先定义出多个功能函数 函数 2.在定义一个功能对应关系 功能字典 3.最后编写匹配代码 循环比对

论闭包函数的重要性就是你自己听不懂 闭包函数的两大特征 1就是定义在函数内部的函数 2内部函数使用了外层函数名称空间的名字 闭包函数也是给函数体传参的一种方式 形参给函数体传参 就是在参数中写入见名知意的函数名 比如你需要一个名字你就在形参中写入一个name什么的 装饰器我们分开去理解 器:就是工具,而程序中的函数就具备某一种功能的工具 装饰:指的就是为被装饰对象添加额外的功能,就目前知识来看,定义装饰器就是定义一个函数,只不过该函数的功能是用来为其他函数添加额外功能的 装饰器有几个版本 简易进阶完整 建议版本不考虑参数和返回值进阶版本就是考虑到了参数问题完整版本考虑到了返回值问题 老师很贴心地给我们准备了一个装饰器模板 def outer(func_name):#接受被装饰对象名字 def inner(arges,**kwargs): # 兼容所有的函数类型 #执行被装饰函数之前可以做的额外操作 res = func_name(args,**kwargs)

执行被装饰函数之后可以做的额外操作

return res #返回真正的函数值 return inner 语法糖就是中让代码更好看

调用@加函数名

posted @   文质彬彬赵其辉  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示