美文网首页
第二天:Python函数

第二天:Python函数

作者: VolleyZ | 来源:发表于2020-01-03 15:46 被阅读0次

    函数

    isinstance(x, int):检查参数类型
    callable(object):检查一个对象是否是可调用的。函数、方法、lambda 函式、 类以及实现了 call 方法的类实例, 它都返回 True

    >>> callable(0)
    false
    def func():
      pass
    >>> callable(func)
    true
    
    1.可变参数:numbers
    `在参数前加个*号表示把numbers的所有元素作为可变参数传进函数内部。
    在函数内部,参数numbers接收到的是一个`tuple``
    def function(*numbers):
       pass
    
    2.关键字参数:kw
    `关键字参数允许你传入0个或任意个含参数名的参数,
    关键字参数在函数内部自动组装为一个`dict``
    def person(name, age, **kw):
        print('name:', name, 'age:', age, 'other:', kw)
    >> person('Bob', 35, city='Beijing')
    name: Bob age: 35 other: {'city': 'Beijing'}
    
    >>> extra = {'city': 'Beijing', 'job': 'Engineer'}
    >>> person('Jack', 24, **extra)
    name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
    
    3.命名关键字参数:
    `命名关键字参数需要一个特殊分隔符*,`*`后面的参数被视为命名关键字参数.
    命名关键字参数必须传入参数名,可以理解为是参数前加了个描述`
    def person(name, age, *, city, job):
        print(name, age, city, job)
    >>> person('Jack', 24, city='Beijing', job='Engineer')
    Jack 24 Beijing Engineer
    

    参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

    递归:如果一个函数在内部调用自身本身,这个函数就是递归函数。
    举例:fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n
    fact(n)用递归的方式写出来就是:

    `这里需要注意的是`:递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,
    每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。
    由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。fact(1000):就会栈溢出。所以这种方法不太好。
    def fact(n):
        if n==1:
            return 1
        return n * fact(n - 1)
    
    `解决递归调用栈溢出的方法是通过尾递归优化`:尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。
    这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。
    def fact(n):
        return fact_iter(n, 1)
    
    def fact_iter(num, product):
        if num == 1:
            return product
        return fact_iter(num - 1, num * product)
    
    

    相关文章

      网友评论

          本文标题:第二天:Python函数

          本文链接:https://www.haomeiwen.com/subject/abscoctx.html