美文网首页
python 基础知识(二)

python 基础知识(二)

作者: z_hboot | 来源:发表于2019-10-23 11:03 被阅读0次

    python 基础知识

    继上一篇【python基础】

    说明:

    • 参考系列加入官网系列文档:python 3.7
    • 各部分代码都是写到同一文件中的second.py
    • 声明的变量是公用的。

    上一篇主要是入门,如果你学习过其他编程语言,基本动手操作一遍就了解了。

    高级特性

    切片
    获取部分数据(类似slice)的操作方法。

    说明:

    • 基础语法表示[start:end]start其实位置,end结束位置(不包含);接受负数(-1),从最后一个元素开始。
    • 默认start0 ,默认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 True
    print(isinstance(names,Iterable))
    # enumerate
    names = 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关键字,成为一个生成器函数;
    # generator
    names=(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
    # False
    print(isinstance(nums,Iterator))
    # True
    print(isinstance(names,Iterator))
    # using iter()    output: True
    print(isinstance(iter(nums),Iterator))
    

    函数

    学习是建立在有前端基础的情况下,一些类似于JS的语法、语义不会在重复书写,只记录不同之处。

    匿名函数

    说明:

    • lambda表示匿名函数,
    # 匿名函数
    total = lambda val:val*3
    # 12
    print(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
    @log
    def login(user):
        print("欢迎登陆:"+user)
        
    # ------操作-------- login ---------操作用户名称--------- admin
    # 欢迎登陆:admin
    login("admin")
    # 装饰器函数掺入自定义参数
    import functools
    
    def 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
    # 欢迎登陆:test
    login("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() 设置处理 ,无需每次传递参数 flag
    info_ = 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.info
    
    print_log()
    print(user.info._Author_)
    

    正则表达式

    re模块包含了所有正则表达式的功能。

    说明

    • 由于字符串自身\的转义,在使用时使用r""
    • re.match() 匹配到时返回match对象
    • re.split() 第一个参数提供正则表达式,分割字符串 , 数据类型为list
    • group()获取匹配到的结果只,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 发布!

    相关文章

      网友评论

          本文标题:python 基础知识(二)

          本文链接:https://www.haomeiwen.com/subject/ycwhvctx.html