zoukankan      html  css  js  c++  java
  • Python之内置函数、匿名函数

    一、内置函数(68个)

    1. 作用域相关(2)
      locals(): 局部作用域中的变量
      global(): 全局作用域中的变量
     在全局中执行这两个变量,结果相同
    def func():
        pass
    
    func()
    print(locals())
    print(globals())
    

       在局部执行locals()表示函数内的名字,globals()始终不变

    def func():
        a= 0
        b = 1
        print(locals())
        print(globals())
    
    func()
    

    2. 迭代器和生成器相关(3)

      a. iter():  只接收一个内部含有__iter__()方法的对象统一接口(iter() 和 __iter__()是一样的,在python里尽量少的调用双下方法
      b. next(迭代器):  next()和__next__()是一样的
      c. range(*****):  range生成的是一个可迭代对象,最好循环取结果

        *. range(100) 0-99

        *. range(0,100)

        *. range(0,100,2)可以设置步长

    3. 基础数据类型(39)

      1. 数字相关(14)
        a. 数据类型(4)

    bool()  # 强转布尔类型(*****)    
    int()   # 强转整数类型(*****)
    float() # 强转浮点类型(*****)
    complex(实部, 虚部)  # 转为复数类型
    print(complex(1,2))
    # 结果为:(1+2j)

        b. 进制转换(3)

    bin()   # 二进制
    oct()   # 八进制
    hex()   # 十六进制

        c. 数学运算(7)
      
        *. abs() 绝对值

    ret = abs(-99)
    print(ret)  # 99

          *. divmod(被除数,除数)  应用:分页

    print(divmod(9,5))    # (1,4)

          *. round(小数,留几位小数) 

    print(round(2.4567432,3))    # 2.456
    

          *. pow(x,y)幂运算 x的y次幂

          pow(x,y,z)    x的y次幂对z取余,z的默认值是1
    print(pow(2, 3))    # 8
    print(pow(3, 3, 5))    # 2
    

          *. sum() 求和

             sum(iterable,start)  

              start:开始计算值,默认是0

              应用,求本钱加利息sum(利息,本钱)

    print(sum(range(5),3))
    

          *. min(iterable,key,default)

            ierable:可迭代对象或多个值

            key: 判断最小值的条件函数

            default:未计算出最小值时返回值

    # 什么也不设置的时候:
    li = [1, -2, 3, -5]
    print(min(li))  # -5
    # 设置key值的时候;
    li = [1, -2, 3, -5]
    print(min(li, key=abs))  # 1
    # 设置default的时候:
    li = []
    print(min(li, key=abs, default=1))  # 1
    

           *. max(iterable,key,default)

            ierable:可迭代对象或多个值

            key: 判断最小值的条件函数

            default:未计算出最小值时返回值

    # 什么也不设置的时候:
    li = [1, -2, 3, -5]
    print(max(li))  # 3
    # 设置key值的时候;
    li = [1, -2, 3, -5]
    print(max(li, key=abs))  # -5
    # 设置default的时候:
    li = []
    print(max(li, key=abs, default=1))  # 1
    

      2. 列表、元组(4)

        a. list(): 强转为列表类型

        b. tuple(): 强转为元组类型

        c. reversed(): 反转,针对本身有序的对象,结果是一个反序迭代器(列表,元组,字符串通用)

    ret = reversed([1, 2, 3, 4, 5, 6, 7])
    ret = reversed("sjkfndjdk")
    print(list(ret))
    
    ret = reversed("sjkfndjdk")
    print("".join(list(ret)))   
    

        d. slice(start, end, length)  切片操作(列表,元组,字符串通用)

    li = [2, 3, 5, 6, 8, 9, 0, 0, 4, 1]
    my_s = slice(1, 5, 2)
    print(li[my_s])    # 等价于li[1:5:2]
    

      3. 字符串(10)

        a. str():强转为字符串类型

        b. format("content", "对齐方式"): 字符串拼接,对齐方式有三种,<左对齐,>右对齐,^居中  

    print(format("abc", ">20"))
    print(format("abc", "<20"))
    print(format("abc", "^20"))
    

         c. bytes(): 强转为字节类型

    by = bytes("字符", encoding="utf-8")  # 转换成unicode编码
    print(by)
    # 结果:b'xe5xadx97xe7xacxa6'
    by = bytes("字符", encoding="utf-8") by = by.decode("utf-8")  # 转为string类型 print(by) # 结果:字符

         d. bytearray():强转为字节数组类型

    ret = bytearray("字符", encoding="utf-8")
    print(ret)    # 结果:bytearray(b'xe5xadx97xe7xacxa6')
    

         e. memoryview(): 内存查看对象,是指对支持缓冲区协议的数据进行包装,在不需要复制对象基础上允许Python代码访问,即在不开辟新的内存空间的情况下,展现字符串的一部分。

    ret = memoryview(bytes('你好', encoding='utf-8'))
    print(len(ret))  # 6
    print(bytes(ret[:3]).decode('utf-8'))  # 你
    print(bytes(ret[3:]).decode('utf-8'))  # 好
    

        f. ord(): 字符转为数字,根据Unicode转变

        g. chr(): 数字转为字母,根据Unicode转变

        h. ascii(): 转为ascii码

        i. repr(): 将对象转化为供解释器读取的形式,返回对象的字符串格式。用于%r格式化输出

        j. basestring(): 判断一个对象是否为 str 或者 unicode 的实例

          basestring是 str 和 unicode 的超类(父类),也是抽象类,因此不能被调用和实例化.,isinstance(obj, basestring) 等价于 isinstance(obj, (str, unicode))。

      4. 字典、集合(3)

        a. dict(): 强转成字典

        b. set(): 强转成集合

        c. frozenset():改为不可变集合

    set_test = set('hello')
    f_set_test = frozenset(set_test)
    # dic = {set_test:1} 这样直接写会报错,因为集合是可变的,而字典的key值只能是不可变数据类型
    dic = {f_set_test: 1}
    print(dic)
    

      5. 各类数据类型相关的内置函数(8)

        a. len(): 求长度

        b. enumerate(): 给一个可迭代对象加序号   

    se = {'computer': 10000, 'umbrella': 200}
    for num, goods in enumerate(se, 1):
        print(num, goods, se[goods])
    
        c. all(可迭代对象): 判断bool值是否有Flase的值
    print(all([1,"",3,5]))    # False
    

         d. any(可迭代对象): 判断bool值是否有True的值

    print(any(["",[],3]))    # True
    

         e. zip(可迭代对象,可迭代对象.....): 得到的是迭代器,返回的是列表

    li = [1, 2, 3, 4, 5, 6]
    a = "faskdlfj"
    print(zip(li, a))
    ret = zip(li, a)
    for i in ret:
        print(i)
    

         f. filter(函数,可迭代对象):过滤,过滤条件是函数。
          从可迭代对象里取值,在函数里运行,符合条件时,就放到返回值里,返回值是迭代器。

    例一:
    def func(n):
        if type(n) is str:
            return True
    
    li = ["af", [1, 2, 3], (3, 4, 5)]
    ret = filter(func, li)
    for i in ret:
        print(i)
    例二:
    def func(n):
        if n and n.strip():
            return True
    
    li = ['test', None, '', 'str', '  ', 'END']
    ret = filter(func, li)
    print(list(ret))
    

         g. map(函数,可迭代对象): 返回的是列表

    def func(n):
        return n + n
    
    li = [1, 2, 3, 4, 5]
    ret = map(func, li)
    for i in ret:
        print(i)
    

         h. sorted(对象): 排序,默认从小到大 #有返回值

    li = [1, 2, 53, 1234, 3, 4, -455]
    print(sorted(li))
    

           sort(): 排序,没有返回值,只用在list对象上。

    li = [1, 2, 53, 1234, 3, 4, -455]
    li.sort()
    print(li)
    

    4. 类相关(8)

      1. super(): 继承中用来调用父类的方法

          super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。

    class A:
         def add(self, x):
             y = x+1
             print(y)
    class B(A):
        def add(self, x):
            super().add(x)
    b = B()
    b.add(2)  # 3
    

      2. 装饰器(3)

        a. classmethod(function):类方法

          对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。

    class A(object):
        bar = 1
        def func1(self):  
            print ('foo') 
        @classmethod
        def func2(cls):
            print ('func2')
            print (cls.bar)
            cls().func1()   # 调用 foo 方法
     
    A.func2()               # 不需要实例化
    

        b. staticmethod(function):静态方法

    class C(object):
        @staticmethod
        def f():
            print('runoob');
     
    C.f();          # 静态方法无需实例化
    cobj = C()
    cobj.f()        # 也可以实例化后调用
    

        c. property(function):把类中的方法假装成属性

    class Book:
        def __init__(self,name):
            self.name = name
    
        @property
        def get_name(self):
            return self.name
    
    book = Book("Fluent Python")
    print(book.name)    
    print(book.get_name)    # 这里去调用的时候,就是相当于调用一个属性
    

      3. 类的属性方法(4)

        a. setattr() 函数对应函数getattr(),用于设置属性值,该属性不一定是存在的。

        b. getattr(object, name[, default]): 返回一个对象属性值。

          object -- 对象。

          name -- 字符串,属性名。

          default -- 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。

        c. hasattr(object, name): 函数用于判断对象是否包含对应的属性。如果对象有该属性返回 True,否则返回 False。

        d. delattr(object, name): 删除属性。

          delattr(x, 'foobar') 相等于 del x.foobar。

    5. 其他类型(16)

      a. 执行字符串中的代码(3)

        eval:计算(有返回值)

        exec:流程控制(无返回值)

    print(eval("1+2+3+4"))    # 结果是:10
    
    print(exec("1+2+3+4"))    # 结果:None
    
    # 这样执行才会有返回值
    exec("print('hello,word')")
    

        compile(source,filname,mode): 当需要对某一个字符串类型的python代码多次执行的时候,用compile先编译一下。

          source:字符串,或AST(Abstract Syntax Trees)对象,即需要动态执行的代码段

          filename:代码文件名称,如果不是从文件读取代码传递一些可辨认的值。当传入了source参数时,filename参数传入空字符串即可

          model:指定编译代码的种类,可以指定为,exec,eval,single,三种,

    # 示例
    # 1. 当source中含有流程语句时,model = exec
    code = "for i in range(10):print(i)"
    compile1 = compile(code, "", 'exec')
    exec(compile1)
    
    # 2. 当source中含有一个简单的求值表达式时,model = eval
    code = "1+2+3+4"
    compile1 = compile(code, "", 'eval')
    print(eval(compile1))
    
    # 3. 当source中含有交互式命令语句的时候,model = single
    code = "name= input('>>>')"  # input交互式命令语句
    compile1 = compile(code, "", 'single')
    exec(compile1)
    print(name)
    

      b. 输入输出函数(2)

        input():  返回字符串类型

        print():  输出

    import sys
    
    value = "string print"
    print(value, ..., sep=' ', end='
    ', file=sys.stdout, flush=False)
    
    # file:  输出内容到指定文件夹,默认输出到控制台
    # sep:   字符串之间的分隔符,默认是空格
    # end:   字符串结束符,默认是
    换行符
    # flush: 是否立即把内容输出
    
    import time
    import sys
    
    # 实现进度条
    for i in range(0, 101, 2):
        time.sleep(2)
        char_num = i // 2  # 打印多少个#
        per_str = '
    %s%% : %s
    ' % (i, '*' * char_num) if i == 100 else '
    %s%% : %s' % (i, '*' * char_num)
        print(per_str, end='', file=sys.stdout, flush=True)
    

       c. hash():  哈希方法,结果是一个数字,同一个对象的哈希值,在python的一次执行中是一样的,但是重新执行程序后就不一样了。

        可变的数据类型(列表,字典,集合)是不能被哈希的。  

        hashlib()计算出来的结果永远不会变

      d. id():  查看对象的内存地址

      e. 文件相关(2)

        *. open(filename,encoding,mode):  操作文件,生成文件对象

        *. execfile(filename):执行一个文件,输出文件内容

      f. import module : 导入模块

      g. help():  进入help模式,退出"q"

      h. callable(对象):  判断一个对象是否可以调用

      i. dir(): 查看内置属性

    print(dir(__builtins__))    # 所有内置名字
    

       j. 判断对象类型(3)

        type(): 返回该对象的类型

        isinstance(object, type): 判断对象是否是该类型数据,或者用来判断继承关系

        issubclass(子类,父类/多个父类): 判断两个类是不是父子关系

    
    

    二、匿名函数

      1. 一句话的python

        a. 三元运算

        b. 推导式,生成器表达式

        c. lambda表达式(解决简单问题

      2. lambda表达式

        funcname = lambda 参数:返回值

        print(funcname(arguments))

    func = lambda x,y:x+y
    print(func(2,5))

        规则:
          a. 参数可以有多个,用逗号隔开
          b. 不管逻辑多复杂,lambda表达式只写一行,且逻辑执行结束后的内容就是返回值
          c. 返回值和正常函数一样可以是任何数据类型

    # 现有两个元祖(("a"),("b")),(("c"),("d")),请使用python中的函数生成列表[{"a":"c"},{"b":"d"}]
    print(list(map(lambda t:{t[0]:t[1]},zip((("a"),("b")),(("c"),("d"))))))
    
    d = lambda p:p*2
    t = lambda p:p*3
    x = 2
    x = d(x)
    x = t(x)
    x = d(x)
    print(x)
    


        

  • 相关阅读:
    api示例
    Windows+Ubuntu文件互传
    UI
    事件
    插件开发入门
    文摘
    刘海屏适配
    APT
    热修复
    进程保活
  • 原文地址:https://www.cnblogs.com/chitalu/p/12342079.html
Copyright © 2011-2022 走看看