zoukankan      html  css  js  c++  java
  • python基础 三、函数

    第五章 函数

    参数

    一、位置参数
    调用函数时根据函数定义的参数位置来传递参数。

    def print_hello(name, sex):
        sex_dict = {1: u'先生', 2: u'女士'}
        print 'hello %s %s, welcome to python world!' %(name, sex_dict.get(sex, u'先生'))
    
    # 两个参数的顺序必须一一对应,且少一个参数都不可以
    print_hello('tanggu', 1) #调用
    

    二、关键字参数
    用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。

    def print_hello(name, sex):
        sex_dict = {1: u'先生', 2: u'女士'}
        print 'hello %s %s, welcome to python world!' %(name, sex_dict.get(sex, u'先生'))
    print_hello('tanggu', sex=1)
    print_hello(1, name='tanggu')
    

    三、可变参数
    定义函数时,有时候我们不确定调用的时候会传递多少个参数(不传参也可以)。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。

    def func(*args):
        ....
    func()
    func(a)
    func(a, b, c)
    

    我们传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是包裹位置传递。

    def func(**kargs):
        ....
    
    func(a=1)
    func(a=1, b=2, c=3)
    

    kargs是一个字典(dict),收集所有关键字参数

    函数

    一、运算

    len(a) #求长度
    min(a) #求最小值
    max(a) #求最大值
    sorted(a) #排序
    reversed(a) #逆序
    sum(a) #求和
    abs(a) #求绝对值
    

    二、进制转换

    bin(a) #转换为二进制
    oct(a) # 转换为八进制
    hex(a) # 转换为十六进制
    

    三、ASCLL转换

    ord(a) #返回对应的ASCLL值
    chr(a) #用一个范围在(0~255)整数作参数,返回对应的字符
    

    四、高级函数

    1、enumerate() 枚举

    enumerate(sequence, [start=0])
    #实例
    seq = ['one', 'two', 'three']
    for i, element in enumerate(seq):
        print i, element
    

    2、zip() 配对
    zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
    如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

    zip([iterable, ...])
    #实例
    >>> a = [1,2,3]
    >>> b = [4,5,6]
    >>> c = [4,5,6,7,8]
    >>> zipped = zip(a,b)     # 打包为元组的列表
    [(1, 4), (2, 5), (3, 6)]
    >>> zip(a,c)              # 元素个数与最短的列表一致
    [(1, 4), (2, 5), (3, 6)]
    >>> zip(*zipped)          # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
    [(1, 2, 3), (4, 5, 6)]
    

    3、map() 映射
    map() 会根据提供的函数对指定序列做映射。
    第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

    map(function, iterable, ...)
    #实例
    >>>def square(x) :            # 计算平方数
    ...     return x ** 2
    >>> map(square, [1,2,3,4,5])   # 计算列表各个元素的平方
    [1, 4, 9, 16, 25]
    >>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数
    [1, 4, 9, 16, 25]
    # 提供了两个列表,对相同位置的列表数据进行相加
    >>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
    [3, 7, 11, 15, 19]
    

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

    filter(function, iterable)
    #实例
    def is_odd(n):
        return n % 2 == 1
     
    newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    print(newlist) #过滤出列表中的所有奇数
    

    5、eval()
    eval() 函数用来执行一个字符串表达式,并返回表达式的值。

    >>> x = 7
    >>> eval( '3 * x' )
    21
    

    6、reduce() #累积

    >>>def add(x, y) :            # 两数相加
    ...     return x + y
    >>> reduce(add, [1,2,3,4,5])   # 计算列表和:1+2+3+4+5
    15
    >>> reduce(lambda x, y: x+y, [1,2,3,4,5])  # 使用 lambda 匿名函数
    15
    

    五、迭代器与生成器

    1、迭代器
    迭代是Python最强大的功能之一,是访问集合元素的一种方式。
    迭代器是一个可以记住遍历的位置的对象。
    迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
    迭代器有两个基本的方法:iter() 和 next()。
    字符串,列表或元组对象都可用于创建迭代器:

    import sys         # 引入 sys 模块
    
    
    list=[1,2,3,4]
    it = iter(list)    # 创建迭代器对象
    for x in it:
        print (x, end=" ")
        
    while True:
        try:
            print (next(it))
        except StopIteration:
            sys.exit()
    

    2、生成器
    在 Python 中,使用了 yield 的函数被称为生成器(generator)。
    跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
    在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
    调用一个生成器函数,返回的是一个迭代器对象。

    import sys
     
    def fibonacci(n): # 生成器函数 - 斐波那契
        a, b, counter = 0, 1, 0
        while True:
            if (counter > n): 
                return
            yield a
            a, b = b, a + b
            counter += 1
    f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
     
    while True:
        try:
            print (next(f), end=" ")
        except StopIteration:
            sys.exit()
    

  • 相关阅读:
    15、事例十五:纹理映射
    14、事例十四:材质:十二个材质球
    [luogu]P1084 疫情控制
    [luogu]P2502 [HAOI2006]旅行
    [luogu]P2053 [SCOI2007]修车
    线性相关/线性基
    [luogu]P3629 [APIO2010]巡逻
    [luogu]P3623 [APIO2008]免费道路
    权值线段树
    树链剖分
  • 原文地址:https://www.cnblogs.com/xjl-dwy/p/10411693.html
Copyright © 2011-2022 走看看