美文网首页
Python函数

Python函数

作者: 皮卡丘的电光一闪 | 来源:发表于2020-05-25 15:12 被阅读0次
    定义函数

    定义一个函数,要使用def语句,依次写出函数名、括号、参数和冒号,然后,在缩进块中写函数体,返回值用return语句返回。

    def <函数名>(<参数>, ...) :
        <函数体>
        return <返回值>
    

    当定义一个神秘石也不做的空函数时

    def passMethod():
        pass
    

    pass语句什么都不做,pass可以用来作为占位符,比如还没想好写函数的代码,可以先放一个pass,让代码能够运行起来。缺少了pass,代码运行就会有语法错误。

    调用函数

    python本身内置了很多有用的函数,可以直接调用,具体可以直接从python的官方网站查看文档

    数据类型转换

    python内置的常用函数还包括数据类型转换,如:

    • int()
    • float()
    • str()
    • bool()
      函数名其实就是执行一个函数对象的引用,也可以给这个函数起别名:
    >>> a = abc     # 变量a指向python内置函数abs函数
    >>> a(-1)       # 所以也可以通过a调用abs函数 等价abs(-1)
    1
    
    参数检查

    调用函数时,若参数个数不对,python解释器会自动检查出来,并抛出TypeError。但是若参数类型不正确,就无法帮我们检查。运行抛出TypeError。故而我们可以使用内置函数isinstance()帮助我们对数据类型进行检查。如:

    def my_abs(x):
        if not isinstance(x, (int, float)):
            raise TypeError('bad operand type')
        if x >= 0:
            return x
        else:
            return -x
    
    返回多个值

    当函数返回多个值(return x,y)时,返回值是一个tuple,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值。

    调用.py文件的函数
    from <文件名> import <函数名>
    import <包名>
    
    函数的参数

    即上述定义函数中的参数。参数可以是一个位置参数、默认参数、可变参数、关键字参数、命名关键字参数、参数组合。

    参数方式 写法
    位置参数 def method(x)
    默认参数 def method(x, y = 2)注:默认参数必须指向不变对象!
    可变参数 def method(*nums)注:当使用list、tuple作为参数时,可以使用*list或者*tuple,把list或tuple的元素变成可变参数传进去
    关键字参数 def method(name, age, **kw)注:可以使用dict,可以使用**dict,把dict的key-value变成参数传进去
    命名关键字参数 def method(name, age *, city, job),注:如果没有可变参数,就必须加一个*作为特殊分隔符
    参数组合 包含上述若干种参数注:虽然可以组合多达5种参数,但不要同时使用太多的组合,否则函数接口的可理解性很差
    # 关键字参数
    >>> person('Bob', 35, city='Beijing')
    name: Bob age: 35 other: {'city': 'Beijing'}
    >>> person('Adam', 45, gender='M', job='Engineer')
    name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
    >>> extra = {'city': 'Beijing', 'job': 'Engineer'}
    >>> person('Jack', 24, **extra)
    # **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,
    # kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra
    name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
    #  命名关键字参数
    # 限制关键字参数的名字,只接收city和job作为关键字参数。
    def person(name, age, *, city, job):
        print(name, age, city, job)
    # 调用,可不传入city参数
    >>> person('Jack', 24, job='Engineer')
    Jack 24 Beijing Engineer
    # 注意
    def person(name, age, city, job):
        # 缺少 *,city和job被视为位置参数,为了避免歧义,必须加一个*作为分隔符。
        pass
    
    递归函数

    在函数内部,可以调用其他函数,当在函数内部调用自身时,这个函数就是递归函数。

    举个栗子:计算n! = 123...n,用函数表示,即fact(n) = n! = 123...(n-1)*n =(n-1)! * n = fact(n-1) * n
    所以fact(n)可表示为n * fact(n -1),只有n=1时需要特殊处理,即:

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

    上述就是一个递归函数。

    >>> fact (1)
    1
    >>> fact (10)
    3628800
    

    为了防止栈溢出,可以通过尾递归优化,仅返回递归函数本身,而不是一个表达式。

    相关文章

      网友评论

          本文标题:Python函数

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