当前位置: 首页 > 后端技术 > Python

python 基础知识(二)

时间:2023-03-26 12:26:57 Python

python 基础知识(二)♀?♀python 基础知识继上一篇【python基础】说明:参考系列加入官网系列文档:python 3.7各部分代码都是写到同一文件中的second.py声明的变量是公用的。上一篇主要是入门,如果你学习过其他编程语言,基本动手操作一遍就了解了。高级特性切片获取部分数据(类似slice)的操作方法。说明:基础语法表示[start:end],start其实位置,end结束位置(不包含);接受负数(-1),从最后一个元素开始。默认start为0 ,默认end为数据长度(length)[start:end:sep] 表示间隔sep取一个值;# [:] 生成10个有序数列names = list(range(11))print(names[1:6])# [::]print(names[1:6:2])迭代 for...in对数据进行迭代操作;说明:通过collections.abc模块导入Iterable类型isinstance判断数据类型是否同给定的类型相同,返回bool。通过内置函数enumerate把list转为索引-元素对。# 判断当前数据是否可以进行迭代from collections.abc import Iterable# output Trueprint(isinstance(names,Iterable))# enumeratenames = enumerate(names)for k,v in names: print(k,v)列表生成式 快速生成数据。[]表达式里进行操作; 说明:依次for循环取得变量。# [] 简易表达式nums = [n*n for n in [2,4,8]]print(nums)# 多层操作nums = [n*m for n in [2,4,8] for m in [1,3,6]]print(nums)生成器 生成器函数可以用来生成数据,利用它的特性不需要把所有数据都列出来,减少数据占据的空间。说明:()创建一个生成器;next()用来获取元素,获取到最后一个元素时,再次获取就会报错StopIteration;在普通函数中使用yield关键字,成为一个生成器函数;# generatornames=(n*n for n in [2,4,8])for val in names: print("for-",val)# for 循环已经输出了所有值,在调用next() 报错print(next(names))迭代器 ?迭代对象Iterator表示的是数据流,只能通过next()方法才能访问到下一个值;基本数据类型list/dict/set是可迭代数据,但不是迭代对象。说明:isinstance()判断是否为迭代对象。通过使用iter()函数将可迭代数据转换为迭代对象;生成器可用于生成无限大的数据流。# 判断当前数据类型是否为迭代对象from collections.abc import Iterator# Falseprint(isinstance(nums,Iterator))# Trueprint(isinstance(names,Iterator))# using iter() output: Trueprint(isinstance(iter(nums),Iterator))函数学习是建立在有前端基础的情况下,一些类似于JS的语法、语义不会在重复书写,只记录不同之处。匿名函数说明:lambda表示匿名函数,# 匿名函数total = lambda val:val*3# 12print(total(4))装饰器 在代码运行期间,动态增加功能的方式,称之为装饰器说明:__name__属性返回函数定义的名称@表示需要额外执行的函数名称,会自动调用。装饰器接受当前函数作为参数,用于回调执行。@functools.warps() 用于复制原始函数属性到返回函数上,比如实例中的wrapper函数,导致__name__变为了wrapper,# 装饰器 @+函数名称def log(fn): def wrapper(*arg,**oth): print("------操作--------",fn.__name__,"---------操作用户名称---------",arg[0]) return fn(*arg,**oth) return wrapper@logdef login(user): print("欢迎登陆:"+user) # ------操作-------- login ---------操作用户名称--------- admin# 欢迎登陆:adminlogin("admin")# 装饰器函数掺入自定义参数import functoolsdef log(bool): def decorator(fn): @functools.wraps(fn) def wrapper(*arg,**oth): print("------操作--------",fn.__name__,"---------操作用户名称---------",arg[0]) if bool: print("2019-10-06") return fn(*arg,**oth) return wrapper return decorator@log(True)def login(user): print("欢迎登陆:"+user)# ------操作-------- login ---------操作用户名称--------- test# 2019-10-06# 欢迎登陆:testlogin("test")偏函数 利用functools.partial()可以设置已定义函数的默认值参数。说明:针对公用函数进行设置,各模块需要传递各自标识,以进行不同处理操作。functools.partial()第二个参数如果没有指定参数名,如flag=False,则默认将参数放到arg[0]第一个。# 设定函数默认值def info(name,flag = True): adorn = "" if flag: adorn = "尊贵的" print("欢迎"+adorn+"客人:",name)info("admin",False)info("test",False)# 通过 functools.partial() 设置处理 ,无需每次传递参数 flaginfo_ = functools.partial(info,flag=False)info_("admin")info_("test")模块按功能进行划分以及每个人对自己写的模块进行包装。防止命名冲突说明:from...import... 导入某个模块中的方法或者变量import... 导入整个模块,使用调用以目录为package包,必须包含__init__.py文件,可为空,包目录示例:# 模块使用# 从模块文件中导入某个方法或者变量from logs.info import print_log# 导入整个模块 user.info 使用时调用获取import user.infoprint_log()print(user.info._Author_)正则表达式re模块包含了所有正则表达式的功能。说明由于字符串自身\的转义,在使用时使用r""re.match() 匹配到时返回match对象re.split() 第一个参数提供正则表达式,分割字符串 , 数据类型为listgroup()获取匹配到的结果只,group(0)永远是原始字符串。groups() 返回匹配到的结果值(元组)re.compile()使用预编译正则表达式,在后续使用过程中,程序不会再进行编译# re 模块 正则表达式import re# 匹配任意字符一次或多次 + 'lo'print(re.match(r".+lo","hello"))# 匹配 'l' 一次或多次进行分割print(re.split(r"l+","hello"))# groups ('h', 'lo')print(re.match(r"^([a-z]+)el([a-z]+)$","hello").groups())# 对表达式及进行编译,reg_ = re.compile(r"\d+\+\d+");print(reg.match("2233+123").group(1))本文由博客一文多发平台 OpenWrite 发布!