zoukankan      html  css  js  c++  java
  • Python学习笔记之函数与正则

    Python函数

    Pycharm
    常用快捷键,例如复制当前行、删除当前行、批量注释、缩进、查找和替换。
    常用快捷键的查询和配置:Keymap
    Ctrl + D:复制当前行
    Ctrl + E:删除当前行
    Shift + Enter:快速换行
    Ctrl + /:快速注释(选中多行后可以批量注释)
    Tab:缩进当前行(选中多行后可以批量缩进)
    Shift + Tab:取消缩进(选中多行后可以批量取消缩进)
    Ctrl + F:查找
    Ctrl + H:替换
    
    -----------------------------------------------------------------
    是否为主文件:__name__      __name__就是标识模块的名字的一个系统变量
    if __name__ == '__main__'
    
    查看当前文件路径 __file__
    print __file__
    
    查看当前文件路径 __doc__
    print __doc__      查看模块注释
    1.__doc__ 返回指定函数的文档字符串(函数的注释)
    def doc_value(x):
        """两数相加"""
        return x+x
    -------------------------------
    doc_value.__doc__
    -------------------------------
    print result is :
             "两数相加"
    
    2.__name__ 返回函数名
    def doc_value(x):
    -------------------------------
    doc_value.__name__
    -------------------------------
    print result is:
             "doc_value"
    
    3.__module__返回函数所在模块名字
    def doc_value(x):
    -------------------------------
    doc_value.__module__
    -------------------------------
    print result is:
             "__main__"  maim 代表主函数
    
    4.func_defaults 返回一个包含默认参数值的元祖
    
    5.func_dicts 返回支持任意函数属性的命名空间
    
    6.func_globals 返回一个包含函数全局变量的字典应用
    
    7.func_closure 返回一个胞体元祖,其中胞体包含了函数自由变量的绑定
    
    
    **********************************************
    
    函数调用函数
    
        1.默认函数   :这允许用户为函数的参数定义一些默认值。
    这种情况下,可以以更少的参数来调用该函数,而函数调用时未提供的参数,Python会使用默认提供的值作为这些参数值
          def default(x=22.关键字函数  key =value 
          def dict_value(**x)
          dict_value(x=2)
        3.任意的参数列表 ,可变函数 Python还支持定义这样的函数,该函数可以接受以元组形式传递的任意数量的参数
          def list_value(*x)
          list_value(1,2,3,4,5)
           当实参为list时也可以入多个值
          def list_test(x)
          list_test([1,2,3,4])
    
    参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数
    def test(a, b=1, *c, **d)
    yield 生成器,延迟生成 |保持函数的执行状态
    xrange 生成器 python3取消
    python3 range 放映列表对象range(1,10---------------------------
    
    三元运算:
      result = 'gt' if 1 > 3 else 'lt'
      print(result)
    
    lambda 可以这样认为,lambda作为一个表达式,定义了一个匿名函数
    非常容易理解,在这里lambda简化了函数定义的书写形式。是代码更为简洁,但是使用函数的定义方式更为直观,易理解。
    
    lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值
    
    
    ---------------------------
    内置函数
    help()帮助
    dir() 返回模块的属性列表。
    vars()  返回对象object的属性和属性值的字典对象
    type()  查看参数是什么类型
    ----------------------------
    reload()
    用于重新载入之前载入的模块
    import test_demo.demo
    import imp
    imp.reload(test_demo.demo)
    
    id()查看变量内存地址
    
    ----------------------------
    原cmp(x, y)用于比较2个对象 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
    python3 摒弃
    
    import operator       #首先要导入运算符模块
    operator.gt(1,2)      #意思是greater than(大于)
    operator.ge(1,2)      #意思是greater and equal(大于等于)
    operator.eq(1,2)      #意思是equal(等于)
    operator.le(1,2)      #意思是less and equal(小于等于)
    operator.lt(1,2)      #意思是less than(小于)
    
    返回布尔值
    ----------------------------
    abs() 绝对值
    bool()布尔值 
    divmod() 返回商与余数的元组  用于网页分页
    max() 最大值
    min() 最小值
    
    len() 长度
    
    sum() 求和
    all(可迭代对象) 遍历迭代对象,全部为真则为true,有一个为假则为假,空为True
    any(可迭代对象) 有一个不为flase,则返回true,空为flase
    
    chr()主要用来表示ascii码对应的字符他的输入时数字
    ord()函数主要用来返回对应字符的ascii码
    
    hex(x )  将一个整数转换为一个十六进制字符串    
    oct(x )  将一个整数转换为一个八进制字符串
    bin() 返回一个整数 int 或者长整数 long int 的二进制表示
    
    -----------------------------------------------
    enumerate 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
    list_value = [1, 2, 3, 4]
    for value in enumerate(list_value):
        print(value)
    
    (0, 1)
    (1, 2)
    (2, 3)
    (3, 4)
    
    print('{0}{1}{2}'.format('无敌', '', ''))
    -----------------------------------------------
    结果:无敌的我
    
    
    apply(func [, args [, kwargs ]]) 函数用于当函数参数已经存在于一个元组或字典中时,间接地调用函数(python3已结不支持了)
    Python2详细用法:
    http://www.jb51.net/article/53044.htm
    
    
    map(function,list)是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
    print(list(map(lambda x: x*2, [1, 3, 5, 7, 9])))
    
    filter(function,list)函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表
    该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中
    print(list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5])))
    
    reduce(function,list[,可选参数])函数会对参数序列中元素进行累积。
    函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,
    得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
    python3 reduce已经从全局名字空间移除了,
    
    from functools import reduce
    print(reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]))
    
    zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
    传N个列表,生成一个新的序列,让每一列是一组
    
    list1 = [1, 2, 3]
    list2 = ['a', 'b', 'c']
    list3 = ['hello', 'world', 'jack']
    print(list(zip(list1, list2, list3)))
    
    [(1, 'a', 'hello'), (2, 'b', 'world'), (3, 'c', 'jack')]
    
    eval() 函数用来执行一个字符串表达式,并返回表达式的值
    print(eval('8*8'))
    64
    反射:通过字符串的形式导入模块,并以字符串的形式执行函数
    
    # 反射(模块)
    temp = 'os'
    model = __import__(temp)
    print(model.path.split(__file__)[0])
    
    C:/Users/TDH/Desktop/TestKnow/Python/day03/test_01
    
    实际:
    --------------------------------
    动态导入
    切换不同数据库 mysql,sqlserver
    用于随时切换数据库,减低程序耦合
    
    
    getattr() 函数用于返回一个对象属性值。 在没有对应属性时,将触发 AttributeError
    
    # 反射(函数)
    model = __import__('demo1')
    function = getattr(model, 'print_hello')
    print(function)
    import random
    print(random.random) #生成随机数,0-1之间
    print(random.randint(1, 2)) #定义取数区间,去其中的一个整数
    print(random.randrange(1, 3)) #大于等于1,小于3的数
    
    # 6位验证码
    
    import random
    
    code = []
    for i in range(6):
        if i == random.randint(1, 5):
            code.append(str(random.randint(1, 5)))
        else:
            code.append(chr(random.randint(65, 90)))
    print(''.join(code))
    # md5加密
    import hashlib
    m2 = hashlib.md5()
    m2.update('admin'.encode('utf-8'))
    print(m2.hexdigest())
    序列化/反序列化
    
    将对象转换为可通过网络传输或可以存储到本地磁盘的数据格式(如:XML、JSON或特定格式的字节串)的过程称为序列化;反之,则称为反序列化。
    
    Python的JSON模块 序列化与反序列化的过程分别叫做:encoding 和 decoding。
    encoding: 把Python对象转换成JSON字符串
    decoding: 把JSON字符串转换成python对象
    
    import pickle
    li = ['a', '12', '2', '32']
    print(pickle.dumps(li))
    print(pickle.loads(pickle.dumps(li)))
    
    
    参数名解释
    obj 要存入json文件的python对象
    fp 文件句柄
    ensure_ascii 设置为False的话才可以把中文以中文的形式存到文件里,否则会是’xXXxXX’这种
    indent 缩进的空格数,设置为非零值时,就起到了格式化的效果,比较美观
    # 序列化到文件中
    >>> with open('test.json', 'w') as fp:
    ...     json.dump({'a':'str中国', 'c': True, 'e': 10, 'b': 11.1, 'd': None, 'f': [1, 2, 3], 'g':(4, 5, 6)}, fp, indent=4)
    
    # 反序列化文件中的内容
    >>> with open('test.json', 'r') as fp:
    ...     json.load(fp)
    {'e': 10, 'g': [4, 5, 6], 'b': 11.1, 'c': True, 'd': None, 'a': 'str中国', 'f': [1, 2, 3]}
    
    应用场景:Python与Python之间文件传输

    Python正则表达式

    正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法
    ----------------------------------------------------
    
    Python支持的正则表达式元字符和语法
    
    *********************************
    字符
    ---------------------------------
    .匹配除换行符
    之外的任意字符
    转义字符
    [...] 字符集,对应的位置可以使字符集中任意字符
    *********************************
    预定义字符集
    ---------------------------------
    d 数字[0-9]
    D 非数字[^d]
    s 空白字符[<空格>	
    fv]
    S 非空白字符[^s]
    w 单词字符[A-Za-z0-9]
    W 非单词字符[^w]
    *********************************
    数量词
    ---------------------------------
    *  匹配前一个字符0或无限次
    +  匹配前一个字符1次或无限次
    ? 匹配前一个字符0次或1次
    {m} 匹配前一个字符m次
    {m,n} 匹配前一个字符m至n次
    *?+??非贪婪模式
    *********************************
    边界匹配
    ---------------------------------
    ^ 匹配字符串开头
    $ 匹配字符串末尾
    A 仅匹配字符串开头
     仅匹配字符串末尾
     匹配w和W之间
    B [^]
    *********************************
    逻辑、分组
    ---------------------------------
    | 代表左右表达式任意匹配一个
    (...)  被括起来的表达式将作为分组
    (?P<name>...)分组,除了原有的编号外再指定一个额外的别名
    <number>引用编号为<number>的分组匹配到的字符串
    (?P=name)应用别名为<name>的分组匹配的字符串
    *********************************
    特殊构造
    ---------------------------------
    (?..) (..)的部分组版本
    (?iLmsux) iLmsux的每个字符代表一个匹配模式,只能用于正则表达式的开头
    (?#...) #之后的内容将作为注释被忽略
    (?=...) 之后的字符串内容需要匹配表达式才能匹配成功
    (?!...)
    (?<=..)
    (?<!..)
    (?(id/name)yes-pattern|no-pattern)
    *********************************
    ----------------------------------------------------
    
    贪婪模式与非贪婪模式
        Python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符
    例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb"。而如果使用非贪婪的数量词"ab*?",将找到"a"
    ----------------------------------------------------
    
    
    match 只能从起始位置匹配
    search 在整个字符串去匹配
    
    findall函数返回的总是正则表达式在字符串中所有匹配结果的列表
    re.compile()函数,将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例)
    
    groups 只获取组里的字符
    group  匹配所有符合的正则的字符
    
    ----------------------------------------------------
    
    # 将正则表达式编译成Pattern对象 
    pattern = re.compile(r'world') 
     
    # 使用search()查找匹配的子串,不存在能匹配的子串时将返回None 
    # 这个例子中使用match()无法成功匹配 
    match = pattern.search('hello world!') 
     
    print (match.group()) 
  • 相关阅读:
    SQL Server 2012本地发布、订阅及相关问题的解决方案
    微信小程序——try {} catch (e) {}
    C# .net 填充无效,无法被移除 微信小程序解密失败的解决办法
    功能测试--H5测试点
    功能测试--指纹识别测试点
    功能测试--二维码测试点
    功能测试--登录测试点
    功能测试--计步测试点
    功能测试--投票测试点
    功能测试--签到测试点
  • 原文地址:https://www.cnblogs.com/xiaoxiaolulu/p/8058042.html
Copyright © 2011-2022 走看看