zoukankan      html  css  js  c++  java
  • 廖---函数

    enumerate

    函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

    >>> list(enumerate(seasons, start=1))       # 下标从 1 开始
    [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
    

    函数定义

    def my_abs(x):
        if not isinstance(x, (int, float)):    # 类型判断
            raise TypeError('bad operand type')
        if x>=0:
            return x
        if x<0:
            return -x
    
    #空函数
    def nop():
        pass
    
    

    若是没有return语句,隐式 return none.

    返回多个值

    函数可以返回多个值,但实际上返回的是一个 元组。
    因为在语法上,返回一个元组可以省略括号,且多个变量可以同时接收一个tuple。

    参数

    位置参数

    在函数调用中,一般用到的都是 位置参数。

    默认参数

    def power(x, n=2):
        s = 1
        s = s ** n
        return s
    

    当调用power(5)时,相当于调用 power(5,2)。但传入两个参数时,则按定义进行计算。
    注意:

    1. 必选参数在前,默认参数在后。
    2. 变化大的参数在前面,变化小的参数放后面。
    3. 默认参数必须指向 不可变对象

    可变参数

    def calc(*numbers):
        sum  = 0
        for n in numbers:
            sum = sum + n * n
        return sum
    

    在函数内部,参数numbers接收到的是一个 tuple。
    若已经有一个lsit或是tuple,python允许在list 或是 tuple上加一个*号,把list 或 tuple的元素变成可变参数传进去。例:

    >>> nums = [1, 2, 3]
    >>> calc(*nums)
    

    关键字参数 & 命名关键字参数

    def person(name, age, **kw):
        if 'city' in kw:
            pass
        if 'job' in kw:
            pass
        print(name, age, kw)
    
    >>>person('xie',12, city = 'qingdao', job = 'engineer')
    xie 12 {'city': 'qingdao', 'job': 'engineer'}
    

    kw是含 参数名的参数,函数内部会将其自动组装为dict。
    对现有dict的调用

    >>>extra = {'city': 'qingdao', 'job': 'engineer'}
    person('zhao', 24, **extra)
    

    若使用 命名关键字参数,需要一个 特殊分隔符 *,其后的参数被视为 命令关键字参数,且此时必须输入命名关键字参数的名字。

    def person (name, age, *, city, job):
        print(name, age, city, job)
    #这种用法时,不会出现dict外面的大括号
    >>> person('zhao', 24, city = 'qingdao', job = 'engineer')
    zhao 24 qingdao engineer
    
    #命名关键字参数可以有缺省值
    def person(name, age, *, city='Beijing', job):
        print(name, age, city, job)
    >>> person('Jack', 24, job='Engineer')
    Jack 24 Beijing Engineer
    

    参数小结
    对任意函数,都可以使用类似 func(*args, **kw)的形式调用它。
    args是可变的 positional arguments列表, **kwargs是可变的 keyword arguments列表

    *args是可变参数,args接收的是一个tuple。
    **kw是关键字参数,kw接收的是一个dict。

    递归函数

    若一个函数在内部调用 自身,它即为 递归函数。

    def fact(n):
        if n==1:
            return 1
        return n * fact(n - 1)
    

    在计算机中,函数调用通过栈实现,每进入一个函数调用,栈会多一层,每当函数返回,则会少一层,所以若调用次数过多,会导致栈溢出。

  • 相关阅读:
    Nim or not Nim? hdu3032 SG值打表找规律
    Maximum 贪心
    The Super Powers
    LCM Cardinality 暴力
    Longge's problem poj2480 欧拉函数,gcd
    GCD hdu2588
    Perfect Pth Powers poj1730
    6656 Watching the Kangaroo
    yield 小用
    wpf DropDownButton 源码
  • 原文地址:https://www.cnblogs.com/qev211/p/7492771.html
Copyright © 2011-2022 走看看