zoukankan      html  css  js  c++  java
  • python语法基础-函数-内置函数和匿名函数-长期维护

    ##################     内置函数        ####################### 

    """
    一共是 68个内置函数:
    
    反射相关的内置函数4个:
    setattr()  delattr()  hasattr()  getattr()
    
    和作用域相关的两个:
    globals()  locals()
    
    数据结构相关的:
    set()  list()  dict()  int()  float()  tuple()
    bool()  complex()
    
    和字符串相关的:
    str()  format()  bytes()  bytearray()  memoryview()  repr()  chr()  ascii()  ord()
    
    和数学运算相关的
    max()  pow()  sum()  abs()  min()  round()  divmod()
    
    和进制转换相关的:
    oct()  hex()  bin()
    
    和字符串执行相关的:
    eval()  exec()  compile()
    
    和迭代器相关的:
    next()   iter()
    
    面向对象相关的:
    object()  super()  classmethod()  staticmethod()  issubclass()  property()
    
    和处理序列相关的函数:
    1,enumerate()  枚举
    2,isinstance()  判断是否是某一种数据类型
    3,filter()  对序列进行过滤,返回一个列表,
    4,map()  对序列进行映射,返回一个可迭代对象,
    5,zip()  这是把两个序列,对应的元素合并成为一个元组,然后以列表的格式返回,
    6,any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。
    7,all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。
    8,len() 方法返回对象(字符、列表、元组等)长度或项目个数。
    9,sorted()
    
    
    其他常用的函数
    help()  dir()  open()  len()  type()  input()  print()  id()  hash()  callable()  range()
    __import__()  slice()   frozenset()  vars()  reversed()
    
    """

    ##################     内置函数:callable        #######################

    # callable() 函数用于检查一个对象是否是可调用的。
    # 如果返回 True,object 仍然可能调用失败;但如果返回 False,调用对象 object 绝对不会成功。
    # 对于函数、方法、lambda 函式、 类以及实现了 __call__ 方法的类实例, 它都返回 True。
    # 语法
    # callable(object)
    
    callable(0)  # false
    
    ##############
    def add(a, b):
        return a + b
    callable(add)  # true
    
    ##################
    class A:                
        def method(self):
            return 0
    callable(A)  # true
    
    ################
    a = A()
    callable(a)  # 没有实现 __call__, 返回 False
    
    
    ##############
    class B:
        def __call__(self):
            return 0
    callable(B)  # true
    
    b = B()
    callable(b)  # 实现 __call__, 返回 True        
    ################

    ##################     内置函数:enumerate 枚举        #######################

    """
    enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
    语法:enumerate(sequence, [start=0])  sequence -- 一个序列、迭代器或其他支持迭代对象。start -- 下标起始位置。
    """
    seasons = ['Spring', 'Summer', 'Fall', 'Winter']
    print(list(enumerate(seasons)))
    # [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
    print(list(enumerate(seasons, start=1)))       # 下标从 1 开始
    # [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
    
    # 使用for循环:
    seq = ['one', 'two', 'three']
    for i, element in enumerate(seq):
        print(i, element)
    # 0 one
    # 1 two
    # 2 three

    ##################     内置函数:isinstance()        #######################

    """
    isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。
    如果要判断两个类型是否相同推荐使用 isinstance()。
    语法:isinstance(object, classinfo)  object -- 实例对象。 classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组。
    
    """
    
    a = 2
    print(isinstance (a,int))
    # True
    print(isinstance (a,str))
    # False
    print(isinstance (a,(str,int,list)))    # 是元组中的一个返回 True
    # True
    
    # isinstance() 与 type() 区别:
    # type() 不会认为子类是一种父类类型,不考虑继承关系。
    # isinstance() 会认为子类是一种父类类型,考虑继承关系。
    class A:
        pass
    
    
    class B(A):
        pass
    
    
    print(isinstance(A(), A))  # True
    print(type(A()) == A)  # True
    print(isinstance(B(), A))  # True
    print(type(B()) == A)  # False

     ##################     内置函数:filter()        #######################

    """
    filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
    该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,
    然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
    语法:filter(function, iterable)
    """

     例题:

    # filter方法求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    def is_odd(n):
        return n % 2 == 1  # 为什么这么写,就是因为除以2 有余数,要么是余数0,就是偶数,要么是余数1,就是奇数,只有这两种情况,
    tmplist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    newlist = list(tmplist)
    print(newlist)
    
    # 过滤出1~100中平方根是整数的数:
    import math
    def is_sqr(x):  # 这是开根号,
        return math.sqrt(x) % 1 == 0  # 所有的整数的余数都是0,所以使用这个方法
    
    tmplist = filter(is_sqr, range(1, 101))
    newlist = list(tmplist)
    print(newlist)  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

      ##################     内置函数:map()       #######################\

    """
    map() 会根据提供的函数对指定序列做映射。
    第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的迭代器,
    语法:map(function, iterable, ...)   function -- 函数   iterable -- 一个或多个序列
    Python 2.x 返回列表。
    Python 3.x 返回迭代器。
    所以这个map和for循环一起使用,而且还可以和匿名函数一起使用,
    
    """

    例题:

    # 列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]
    list1 =[1,2,3,4,5]
    # 第一种方式:
    def func(x):
        return x**2
    ret = map(func,list1)
    print([i for i in ret if i>10])
    
    # 第二种方式
    ret = map(lambda x : x**2,list1)
    print([i for i in ret if i>10])
    
    # 提供了两个列表,对相同位置的列表数据进行相加
    ret =map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
    print([i for i in ret])  #[3, 7, 11, 15, 19]

     ##################     内置函数:zip()       ####################### 

    """
    zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象
    我们可以使用 list() 转换来输出列表。
    如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
    语法:zip([iterable, ...])  iterabl -- 一个或多个迭代器;
    
    """
    a = [1,2,3]
    b = [4,5,6]
    zipped = zip(a,b)     # 返回一个对象
    print(zipped)  # <zip object at 0x103abc288>
    print(list(zipped))  # list() 转换为列表   [(1, 4), (2, 5), (3, 6)]
    
    a1, a2 = zip(*zip(a,b))  # 与 zip 相反,zip(*) 可理解为解压,返回二维矩阵式
    print(list(a1))  # [1, 2, 3]
    print(list(a2))  # [4, 5, 6]

     ##################     匿名函数        #######################

    """
    匿名函数:
    func = lambda x : x**x
    函数名 = lambda 参数 :返回值
    func  函数名,
    lambda  定义匿名函数的关键值和def类似
    x  参数  参数可以有多个,用逗号隔开
    x**x  返回值
    
    注意:
    匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
    返回值和正常的函数一样可以是任意数据类型
    我们可以看出,匿名函数并不是真的不能有名字。
    匿名函数的调用和正常的调用也没有什么分别。 就是 函数名(参数) 就可以了~~~
    
    
    """
    # 这段代码
    def calc(n):
        return n ** n
    print(calc(10))
    
    # 换成匿名函数
    calc = lambda n: n ** n
    print(calc(10))

    # 用匿名函数做两个数字相乘
    func = lambda x,y :x*y
    func(2,3)
    # 这个匿名函数经常可以和filter和map函数进行结合使用队序列进行操作

     ##################     内置函数:反射相关的四个内置函数       #######################

    """
    反射:
    
    什么是反射
    反射是一个很重要的概念,它可以把字符串映射到实例的变量或者实例的方法然后可以去执行调用、修改等操作。它有四个重要的方法:
    
    getattr 获取指定字符串名称的对象属性
    setattr 为对象设置一个对象
    hasattr 判断对象是否有对应的对象(字符串)
    delattr 删除指定属性
    
    attr是属性英文的前几个字母,属性指的是类中类变量、实例变量和方法。但是要注意不能是私有的,如果你的变量是以“_”开头,那将无法获取。
    反射常常用在动态加载模块的场景中。
    
    """
    """
    getattr() 函数:
    getattr() 函数用于返回一个对象属性值。
    getattr(object, name[, default])  object -- 对象。name -- 字符串,对象属性。
    default -- 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError
    
    
    hasattr() 函数用于判断对象是否包含对应的属性。
    hasattr(object, name)   object -- 对象。   name -- 字符串,属性名。
    如果对象有该属性返回 True,否则返回 False。
    
    setattr(object, name, value)
    setattr() 函数对应函数 getattr(),用于设置属性值,该属性不一定是存在的。
    object -- 对象。name -- 字符串,对象属性。value -- 属性值。
    
    
    delattr 函数用于删除属性。
    语法:delattr(object, name)  -- 对象   name -- 必须是对象的属性。
    delattr(x, 'foobar') 相等于 del x.foobar。object 
    """
    
    class A(object):
        bar = 1
    
        def show(self):
            print("这是一个普通方法")
    
        @classmethod
        def dance(cls):
            print("这是一个类方法")
    
    a = A()
    print(getattr(A, 'bar'))  # 获取属性 bar 值  1
    print(getattr(a, 'bar'))  # 获取属性 bar 值  1
    ret = getattr(A,"dance")
    print(ret)  # <bound method A.dance of <class '__main__.A'>>,这是一个地址,
    ret()  # 加上括号就运行了,
    """
    这就是反射:
    1,通过一个字符串获取到了属性的值,
    2,通过字符串拿到了函数地址,然后加括号就调用了,
    """
    
    # getattr(a, 'bar2')       # 属性 bar2 不存在,触发异常,报错
    # getattr(a, 'bar2', 3)    # 属性 bar2 不存在,但设置了默认值
    # 所以需要和hasattr进行配合使用,先判断是否有,然后再使用getattr
    if hasattr(a, 'bar2'):
        getattr(a, 'bar2')

    #########################################

    1、一行代码实现1--100之和
    利用sum()函数求和
    sum(range(1,101))
    # 5050

    #########################################

    2、如何在一个函数内部修改全局变量
    利用global在函数声明 修改全局变量
    a = 5
    def func():
        global a
        a = 10
    func()
    print(a)

    #########################################

    #########################################

  • 相关阅读:
    树的计数 + prufer序列与Cayley公式 学习笔记
    链表
    密码学摘要
    查找与排序
    匿名内部类 调用方法内局部变量
    <c:url>标签相关知识点
    Oracle 导入导出数据库
    oracle cursor
    Oracle 删除用户和表空间------创建表空间和用户
    iOS延迟执行方法
  • 原文地址:https://www.cnblogs.com/andy0816/p/12161969.html
Copyright © 2011-2022 走看看