07-python基础知识-函数使用

函数使用

零碎知识

  • 灵活的if-else

    a = 3 if False else 5
    
    # 上下两种写法等价
    
    # if False:
    #     a = 3
    # else:
    #     a = 5
    
    print(a)
    
  • 灵活的and/or

    # 前面的表达式为真,才会执行后面的表达式
    a = True and 3
    print(a)
    
    # 前面的表达式为假,后面的表达式根本无需执行
    b = False and 5
    print(b)
    
    # 前面的表达式值真,后面的表达式无需执行
    c = True or 3
    print(c)
    
    # 前面的表达式为假,需要后面表达式的判断
    d = False or 5
    print(d)
    
  • 类型判断

    a = 250
    # print(type(a))
    # if type(a) == int:
    if type(a) == type(1):
        print('a', '是一个整数')
    
    # 判断一个对象是不是某种类型的一个实例
    print(isinstance(a, int))
    print(isinstance(a, str))
    
    def test():
        pass
    
    # print(type(test))
    # 用能使用这种方式进行函数类型的判断
    # print(isinstance(test, function))
    
    from inspect import isfunction
    # 判断一个标识符是否是函数
    print(isfunction(test))
    print(isfunction(a))
    
  • 变量地址

    # 获取变量地址
    print(id(a))
    
    b = 10
    print(id(b))
    
    # a和b地址相同
    
    lt = [1, 2, 3]
    print(id(lt))
    
    lt2 = [1, 2, 3]
    print(id(lt2))
    
    # lt和lt2地址不同
    

生成器

  • 使用场景:

    在使用列表时,很多时候我们不会一下子使用数据,通常都是一个一个使用;当数据量较大的时候,定义一个列表会是程序内存占用突然增大,为了解决此类问题,python中引入了生成器。

  • 生成方式:

    • 方式1:将列表生成式的[]改为()即可
    # 列表生成式
    # lt = [i for i in range(10)]
    # print(lt)
    
    lt = (i for i in range(3))
    print(lt)
    
    # 可以转换为列表
    # print(list(lt))
    
    # 可以进行遍历
    # for i in lt:
    #     print(i)
    
    # 可以一个一个提取,当提取结束后再次提取会报StopIteration错
    print(next(lt))
    print(next(lt))
    print(next(lt))
    print(next(lt))
    
    • 方式2:在函数中使用yield关键字
    '''
    # 当数据量特别大的时候,占用内存会突然增大
    def test(n):
        lt = []
        for i in range(1, n+1):
            lt.append(i)
        return lt
    
    print(test(10))
    '''
    
    def test(n):
        for i in range(1, n+1):
          	# 执行到此处,函数会返回yield后的内容,然后会停止在这里
          	yield i
            
    t = test(3)
    # print(t)
    
    # 可以一个一个提取
    # print(next(t))
    # print(next(t))
    # print(next(t))
    
    # 可以遍历
    # for i in t:
    #	print(i)
    
    # 可以转换为列表
    print(list(t))
    
  • 使用说明:

    • 生成器对象保存的是特定数据的生成算法,而不是特定的所有数据
    • 使用任意一种方式操作,都是单次的
    • 生成器可以做的操作:遍历、next、转换为列表

迭代器

  • 定义:能够使用for-in进行遍历,并且可以使用next函数进行迭代的对象

  • 说明:

    • 生成器就是一种特殊的迭代器
    • 判断一个对象是否是迭代器
    from collections import Iterator
    # 判断是否是迭代器
    print(isinstance(lt, Iterator)) 
    
    • 字符串及容器类型的对象都不是迭代器,他们都是可迭代对象

可迭代对象

  • 定义:可以使用for-in遍历的对象,都是可迭代对象

  • 说明:

    • 前面学习过的字符串及容器类型的对象都是可迭代对象
    • 迭代器一定是可迭代对象
    • 判断一个对象是否是可迭代对象
    from collections import Iterable, Iterator
    
    lt = [1, 2, 3]
    
    # 判断是否是可迭代对象
    print(isinstance(lt, Iterable))
    # 判断是否是迭代器
    print(isinstance(lt, Iterator))
    
    • iter:可以将可迭代对象转换为迭代器
    lt = [1, 2, 3]
    
    # 将可迭代对象转换为迭代器
    lt2 = iter(lt)
    

random

  • 示例:

    import random
    
    # 生成指定范围内的随机整数
    print(random.randint(1, 10))
    
    # 生成0~1之间的随机小数
    print(random.random())
    
    # 生成指定范围内的随机整数,可以指定步幅
    print(random.randrange(1, 10, 2))
    
    lt = [1, 2, 3, 4, 5, 6, 7]
    # 从容器对象或字符串中随机挑选一个元素
    print(random.choice(lt))
    # print(random.choice('ashdaiapo'))
    
    # 从容器对象中随机挑取指定个数的元素
    print(random.sample(lt, 3))
    
    # 从容器对象中随机挑取一个元素,sample函数个数为1的情况
    print(random.choices(lt))
    
    # 打乱一个列表
    random.shuffle(lt)
    print(lt)
    

高级函数

  • map

    • 参数:
    func:一个函数
    iter:一个可迭代对象
    
    • 功能:

    将可迭代对象遍历,每个元素都使用该函数处理一遍,然后返回,保存这种算法的迭代器

    • 使用:
    from collections import Iterator
    lt = [1, 2, 3, 4, 5]
    
    def pingfang(n):
        return n * n
    
    # 返回map对象,是一个迭代器
    # ret = map(pingfang, lt)
    
    ret = map(lambda x: x*x, lt)
    print(isinstance(ret, Iterator))
    print(list(ret))
    
    # print(next(ret))
    # print(next(ret))
    
    
  • 练习:

    • 熟悉字符串函数:strip、lstrip、rstrip
    • 使用map函数:将一个元素全是字符串的列表进行处理,去掉两边空白,然后首字符大写
  • filter

    • 参数
    function:一个函数
    iterable:可迭代对象
    
    • 功能:

      使用function依次作用于可迭代对象中的每个元素,当返回结果为True时保留该元素。返回filter对象,是一个迭代器。

    • 示例:

    lt = [1, 2, 3, 4, 5]
    
    def oushu(n):
    	return n%2 == 0  
    
    # 返回filter对象,是一个迭代器
    # ret = filter(oushu, lt)
    
    ret = filter(lambda x: x%2 != 0, lt)
    print(ret)
    print(list(ret))
    
    # print(next(ret)) 
    
    • 练习:使用filter函数,提取一个任意列表中长度大于3的字符串元素。
  • reduce

    • 参数
    function:一个函数
    sequence:一个序列
    
    • 功能:
      • 首先从序列中取出前两个元素,作为function的参数处理一下
      • 处理完的结果与下一个元素再使用function处理一下
      • 处理结束,将处理完的结果返回
    • 示例:
    from functools import reduce
    
    lt = [1, 2, 3, 4, 5]
    
    def add(a, b):
    	return a + b
    
    # ret = reduce(add, lt)
    # ret = reduce(lambda x, y: x*y, lt)
    ret = reduce(lambda x, y: x*10 + y, lt)
    print(ret)  
    

猜你喜欢

转载自blog.csdn.net/weixin_44147782/article/details/85267257