周总结、、、模块 迭代器 内置函数

发布时间:2022-06-20 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了周总结、、、模块 迭代器 内置函数脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

本周内容概要

周总结、、、模块  迭代器   内置函数

其实每周的大作业还是能学好多东西的包含各种知识点吧  还能加深印象   其实会用到很多个关键字  接下来我们复习这个多层装饰器   

法糖会将紧挨着的被装饰对象的名字当做参数自动传入装饰器函数中"""
之所以叫语法「糖」,是因为加糖后的代码写起来很爽,包括但不限于:代码更简洁流畅,代码更语义自然... 写得爽,看着爽,就像了糖。效率高,错误少,老公回家早...
列表生成式中值允许出现for和if 不能出现else 因为会产生歧义多层装饰器
语法糖会将紧挨着的被装饰对象的名字当做参数自动传入装饰器函数中  我们应该好好  好好去理解这句话  更为具体需要代码示例  、、、

接下来是有参函数    这个参数如果提前定义   不能动  只能接受  一个被装饰对象的名字
  关于多层装饰器 我们尽量多实践 有参装饰器目的仅仅是给装饰器传递额外的参数  
  函数名加
  括号  执行的是优先级最高的 
  递归函数  本质成为函数的递归
  递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件。
当函数在一直递推,直到遇到墙后返回,这个墙就是结束条件。、
讲完了递归  我们学习了一个算法
就是最基本的二分算法    二分算法  就是去中间  中间的如果大于目标就保留左边  小于则反之保留右边    剩下的数据同上所述  大就保留左边  小就右边  知道找出结果  二分法有个弊端就是  如果目标在开头那就很麻烦  所以啊  没什么算法最好 看自己的实际需要   这是今天的内容   然后我们开始学习三元表达式   如果二选一建议三元表达式
我们如果想要在列表后面每一个元素加上一个想加的   我们可以定义一个新列表  for 循环每一个元素  然后  使用字符串拼接   添加到新的列表中  然后  我们学过列表生成式就更为简单  代码  也更为简洁   一的变量名接收一个列表  然后再每一个元素 后面加上自己所需要添加到     代码示例 
 res = [name+'_SB' for name in name_list]
# PRint(res)  记住  列表生成式中值允许出现for和if 不能出现else 因为会产生歧义
接下来我们学的就是匿名函数
匿名函数的意思就是没有函数名
![](https://img2022.cnblogs.COM/bLOG/2773994/202203/2773994-20220328010030367-2081076264.png)

这个匿名函数自我感觉还是很有用的   因为同学出了一道题老师就是这么讲的我都不会、、、、所以啊记不住也要眼熟  不然百度都不知道怎么百度   常见的内置函数有很多 所以我们 记不住也要眼熟  就像   刚才所说   不眼熟  百度你都不知道怎么百度
简单说一下  以下这几个内置函数
1.abs()
	绝对值
2.all()与any()
	all()所有元素对应的布尔值必须都是True结果才是True
  any()所有元素对应的布尔值有一个为True结果就是True
3.bin()oct()hex()
	获取进制数
4.callable()
	判断当前对象是否可以加括号调用
5.bytes()str()
	编码与解码操作(encode、decode)
6.chr()ord()
	基于ASCII码表做数字与字符的转换
7.dir()
	获取当前对象内部可以调用的属性(方法)
8.divmod()
	获取除法之后整数与余数>>>:可以做分页功能
9.enumerate()
	枚举>>>:通过参数start控制起始编号数
10.eval()与exec()
	识别字符串中的python代码并执行
	# 1.help()  查看注释信息
# help(len) 

# 2.id()  返回一串相当于内存地址的数字
# print(id('jason'))

# 3.int()  类型转换、机制转换

# 4.isinstance()  判断数据类型
# print(tyPE('jason') is str)  # 类型判断 别扭的很 不推荐
# print(isinstance('jason', str))  # True
# print(isinstance('jason', int))  # False

# 5.pow()  幂指数
# print(pow(10,2))

# 6.round()  四舍五入
# print(round(11, 1))  # 第二个参数控制需要保留几位小数部分
# print(round(11.29, 1))
# print(round(11.59, 1))

# 7.sum()求和
# print(sum([11,2,2,3,4,3,2]))

说完这些内置函数我们说一下
可迭代对象  可迭代对象 迭代     迭代对象分开理解   迭代就是更新  依据上一个结果去更新   迭代对象  就是内置有  __ITer__方法的对象  称之为  迭代对象  
1.大白话理解就是数据可以通过点的方式点出来__iter__
  2.__iter__该类代码的读法>>>:双下iter方法
   我们说一下属于可迭代对象的有那些
    字符串、列表、字典、元组、集合、文件对象
可迭代对象其实就是为了后续迭代取值做准备
 
 迭代器  这里可能有点绕   也不很绕 
 1.什么是迭代器对象?
	可迭代对象调用__iter__方法之后生成的结果就是迭代器对象
# 2.迭代器对象的特征
	含有__iter__方法和__next__方法
# 3.如何理解迭代器对象
	迭代器对象能够极大的节省存储空间
	 4.迭代器对象如何取值
	调用__next__方法即可 如果取完了则会直接报错!!!   、
这周的内容 相对来说更为 偏向去理解 相对的去 结合代码实践更好  
for循环我们很早就学习了  然后我们看一下  它的内部原理
for循环底层原理
    for 变量名 in 可迭代对象:
        循环体代码
1.会将in后面的数据调用__iter__()变成迭代器对象
    为什么文件对象也可以for循环 因为本身就是迭代器对象 再次调用不变
2.针对产生的迭代器对象依次调用__next__()方法迭代取值
3.当值取完之后 会自动处理报错并退出循环
"""
异常处理   bug  代码出错就是有异常  异常是会导致  程序立刻停止的     你报错之后会出现报错的组成部分
	1.line关键字所在的一行
  	用于提示你代码哪一行出错了 点击前面的蓝色字体可以直接定位
    '''如果报错的信息很长 一般最后一个才是'''
  2.NameError   (你妹儿  )错误的类型
  	代码的报错也可以分为很多类型
  3.name 'name' is not defined
  	具体的报错原因(就是解决报错的答案)
 我们学习代码就应该出错了也不怕   	正常情况下代码出错 肯定是直接导致程序停止
  但是也可以自己通过代码来处理 从而避免程序的停止
它是有基本的语法结构  
、	try:
    可能会出错的代码
  except 错误的类型1 as e:  # e指代的就是错误的提示信息
    针对性的处理措施
  except 错误的类型2 as e:  # e指代的就是错误的提示信息
    针对性的处理措施
  except 错误的类型3 as e:  # e指代的就是错误的提示信息
    针对性的处理措施
  ...  还可以结合 else  finally  来使用
   1.结合else使用
	当try检测的代码没有发生异常 正常运行完毕之后执行else的子代码
  try:
    可能会出错的代码
  except Exception as e:  
    统一的处理措施
  else:
    可能会出错的代码没有出错 最后走else子代码
   
# 2.结合finally使用
	无论try检测的代码是否有异常 最后都会执行finally子代码
  try:
    name
	except Exception as e:
    print(e)
	finally:
    无论try检测的代码是否有异常 最后都会执行finally子代码
 
# 3.全部整合到一起使用
  try:
      name
  except Exception as e:
      print(e)
  else:
      print('没报错 好极了')
  finally:
      print('管你错不错 都执行')
    
# 4.断言(了解中的了解)
	name = 'jason'
	assert isinstance(name,str)


# 5.主动报错(需要掌握)
	raise NameError('不爽 就要作!!!')
  '''由于是主动报错 所以可以非常明确的知道错误的类型'''
  我们学过  索引取值  索引取值 和迭代  取值对比各有优缺点  索引取值的优点	优势:可以反复获取相同的元素 并且没有固定的方向
  劣势:只能支持有序的容器类型 无序的无法取值兼容性没有迭代取值高
  2.迭代取值
	优势:兼容所有的容器类型
  劣势:取值的顺序永远都是从左往右 并且无法重复获取 去完就完了
  
周四周五讲的内容我觉得更需要自己去敲代码实践  代码是敲出来不是看出来的这句话很深刻  一直会记得  
周四的自定义迭代器本质其实还是迭代器 只不过是我们自己通过写代码产生
、生成器对象也是节省存储空间的 特性与迭代器对象一致'''
"""
当函数体代码中含有yield关键字
    第一次调用函数并不会执行函数体代码
    而是将函数变成了生成器
如何验证?
    是否有iter()和next()方法
    没有调用之前 就是一个普通的函数
    加括号调用并接收结果:不执行代码 而是变成生成器对象(迭代器)
    变成生成器对象之后调用__next__就会开始执行函数体代码
    如果函数体代码中含有多个yield关键字  执行一次__next__返回后面的值并且让代码停留在yield位置 
再次执行__next__基于上次的位置继续往后执行到下一个yield关键字处
如果没有了 再执行也会报错  StopIteration
yield关键字作用
# 1.在函数体代码中出现 可以将函数变成生成器
# 2.在执行过程中 可以将后面的值返回出去 类似于return
# 3.还可以暂停住代码的运行
# 4.还可以接收外界的传值(了解)、
我们首先了解什么是模块
 1.什么是模块?
	模块就是一系列功能的结合体 可以直接使用
# 2.为什么要用模块?
	极大地提升开发效率(拿来主义>>>:站在巨人的肩膀上)
# 3.模块的三种来
	1.内置的模块
  	无需下载 解释器自带  直接导入使用即可
  2.自定义模块
  	自己写的代码 封装成模块 自己用或者发布到网上供别人使用
  3.第三方模块
  	别人写的发布到网上的 可以下载使用的模块(很多牛逼的模块都是第三方)
# 4.模块的四种表现形式(大白话:长啥样子)
	1.使用python代码编写的py文件		 # 掌握
  2.多个py文件组成的文件夹(包)     # 掌握
  3.已被编译为共享库或DLL的c或C++扩展(了解)
  4.使用C编写并链接到python解释器的内置模块(了解)
模块的两种导入方式
模块使用先导入后使用
 方式1>>>:import...句式
 、在研究模块的时候 一定要分清楚谁是执行文件 谁是被导入文件(模块)
    模块简介.py是执行文件  md.py是被导入文件(模块)
导入模块内部到底发送了什么事情
    1.执行当前文件 产生一个当前文件的名称空间
    2.执行import句式 导入模块文件(即执行模块文件代码产生模块文件的名称空间)
    3.在当前文件的名称空间中产生一个模块的名字 指向模块的名称空间 
    4.通过该名字就可以使用到模块名称空间中的所有数据
ps:相同的模块反复被导入只会执行一次
方式2>>>:From...import...句式
1.执行当前文件产生一个名称空间
2.执行导入语句 运行模块文件产生名称空间存放运行过程中的所有名字
3.将import后面的名字直接拿到当前执行文件中
"""
"""
1.重复导入也只会导入一次
2.使用模块名称空间中的名字不需要加模块名前缀 直接使用即可
3.但是from...import的句式会产生名字冲突的问题
    在使用的时候 一定要避免名字冲突
4.使用from...import的句式 只能使用import后面出现的名字
    from...import...可以简单的翻译成中文
        从...里面拿...来用 没有提到的都不能用      指名道姓
 # 3.通用导入
from md import *
'''*表示md里面所有的名字   from...import的句式也可以导入所有的名字
如果模块文件中使用了__all__限制可以使用的名字  那么*号就会失效 依据__all__后面列举的名字
循环导入  就是两个文件彼此导入    循环导入的问题就是某个名字还没创建就被使用了这样会报错  止报错就提前定义好     
判断文件类型  
py文件分两个类型  
执行文件  被导入文件
比方说有一个内置变量__name__
	当__name__所在的文件是执行文件的时候 结果是__main__
  当__name__所在的文件是被导入文件时候 结果是文件名(模块名)

可以借助于__name__区分被导入的代码和测试代码
if __name__ == '__main__':
  	当前文件是执行文件的时候才会执行的子代码块
  	模块的查找顺序   
  1.先从内存空间中查找
2.再从内置模块中查找
3.最后去Sys.path查找(类似于我们前面学习的环境变量)   这个比较绝对  但是也有弊端  如过有很多路径就会查找很多  
如果上述三个地方都找不到 那么直接报错 
1.在导入模块的时候一切查找模块的句式都是以执行文件为准
	无论导入的句式是在执行文件中还是在被导入文件中!!!
  绝对相对、、、
# 绝对导入
	永远按照执行文件所在的路径一层层往下查找(无脑查找即可)
# 相对导入
	相当导入打破了必须参照执行文件的所在路径的要求 只需要考虑当前模块所在的路径然后使用特殊符号.去查找其他模块即可
	包    本人理解就是一个包子  然后里面有很多菜  包子就是文件夹 菜就是多个模块  你是包包子的人  就像 __init__  你需要某的名字他会提前导入  就像你想吃什么包子馅料一样提前包入  也可以直接忽略__init__这个管家的存在使用绝对导入即可  就像你只要什么什么馅的包子一样  
	# 从专业的角度来解释的话
	包就是内部含有__init__.py的文件夹
# 从实际的角度来解释的话
	包就是多个模块的结合体(内部存放了多个模块文件)
	在导入包的时候 索要名字其实是跟包里面的__init__.py要
	1.如果想直接通过包的名字使用包里面所有的模块 那么需要在__init__.py中提前导入
		上述方式的好处在于__init__可以提前帮你准备好可以使用的名字
		
	2.也可以直接忽略__init__的存在使用绝对导入即可
	
# 我们实际工作中编写的程序软件都是有很多文件夹和文件组成的
	这些文件夹和文件其实都有各自存在的意义和主要功能
文件夹命名
bin   二进制 文件 接收器     .bin文件夹  是存放程序的启动文件
conf  配置文件 游戏配置
core  核心的,最重要的;基础的,必修的
lib    系统会使用到的函数库   理解为i公用
db   数据库   存放程序的数据	
log    日志 记录 原木 自然对数
readme   读我档案 自述文件 自述 说明文件   理解为说明程序说明
requirements      要求 需求  理解为可以存放需要使用的第三方文件
readme   读我档案 自述文件 自述 说明文件   理解为说明程序说明
requirements      要求 需求  理解为可以存放需要使用的第三方文件
settings    设置 系统设置
start    开始 启动 出发 实达
src  较为核心
common    共同 普通 常见 普遍的
# 我们实际工作中编写的程序软件都是有很多文件夹和文件组成的
	这些文件夹和文件其实都有各自存在的意义和主要功能
"""
课下可以看看自己脑上下载过的软件所在的位置 
查看文件名称很多时候可以找到相同文件名的文件
"""
1.bin文件夹
	存放程序的启动文件		start.py
2.conf文件夹
	存放程序的配置文件   settings.py
3.core文件夹
	存放程序的核心业务   src.py
  	就是最为重要的代码 能够实现具体需求
4.lib文件夹
	存放程序公共的功能   common.py
5.db文件夹
	存放程序的数据				userinfo.txt
6.log文件夹
	存放程序的日志记录		log.log
7.readme文本文件
	存放程序的说明、广告等额外的信息
8.requirements.txt文本文件
	存放程序需要使用的第三方模块及对应的版本

周总结、、、模块  迭代器   内置函数

周总结、、、模块  迭代器   内置函数

脚本宝典总结

以上是脚本宝典为你收集整理的周总结、、、模块 迭代器 内置函数全部内容,希望文章能够帮你解决周总结、、、模块 迭代器 内置函数所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。