美文网首页ITS·黑客
【python】定义函数、参数、递归(n!)

【python】定义函数、参数、递归(n!)

作者: MJXH | 来源:发表于2017-04-19 09:49 被阅读0次
  • 函数###

函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:

>>> a = abs   # 变量a指向abs函数
>>> a(-1)   # 所以也可以通过a调用abs函数
1
  • 定义函数###

1)定义函数使用def,returnreturn None的简写
在Python交互环境中定义函数时,注意Python会出现...的提示。函数定义结束后需要按两次回车重新回到>>>提示符下

def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x

2)可以将my_abs()的函数定义保存为abstest.py文件,在该文件的当前目录下启动Python解释器,用from abstest import my_abs来导入my_abs()函数,注意abstest是文件名(不含.py扩展名)

Paste_Image.png
注意:如果在.py文件中写的代码有问题(sublime中没有语法报错)则在导入函数时会出现语法错误
3)pass可以作为占位符,放在还没想好的函数过程中
4)数据类型检查isinstance()
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')

5)Python的函数返回多值其实就是返回一个tuple

  • 函数的参数###

1.位置参数:power(x, n)按照位置顺序依次赋给参数x和n
2.默认参数:def power(x, n=2) 这样传入一个参数时,第二个参数默认值为2
3.可变参数:允许传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple

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

若已有一个list或者tuple,在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去

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

4.关键字参数:允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict,kw是关键字参数

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

5.命名关键字参数:若要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。

>>>def person(name, age, *, city, job):
...     print(name, age, city, job)
>>> person('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer

1)命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数。
def person(name, age, *, city, job):
2)若函数定义中已经有了一个可变参数,后面的命名关键字参数就不再需要一个特殊分隔符*
def person(name, age, *args, city, job):
3)必须传入参数名,可有缺省值
>>>person('Jack', 24, city='Beijing', job='Engineer')
def person(name, age, *, city='Beijing', job):city有默认值,则调用时,可以不传入city值
特别注意:如果没有可变参数,就必须加一个*作为特殊分隔符。如果缺少*,Python解释器将无法识别位置参数和命名关键字参数

def person(name, age, city, job):
    # 缺少 *,city和job被视为位置参数
    pass

6.参数组合:顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

  • 递归函数:调用自己

fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n

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)

num - 1num * product在函数调用前就会被计算

相关文章

  • 【python】定义函数、参数、递归(n!)

    函数### 函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:...

  • Python:3.函数

    调用函数 定义函数 函数的参数 递归函数 参考 廖雪峰的Python教程

  • 动态规划

    先给出别人的总结?: 递归到动规的一般转化方法 递归函数有n个参数,就定义一个n维的数组,数组的下标是递归函数参数...

  • 动态规划入门03

    从递归转换到动态规划 如果一个递归函数有n个参数,那就定义一个n维数组,数组的下标就是递归函数的取值范围,数组元素...

  • python学习之路-函数

    python中函数定义语法 def power(): 函数的参数 参数的默认 eg:def power(x,n=...

  • 函数的基础

    在Python中,函数如下定义:def 函数名(参数1,参数2,...,参数n):函数体(语句块) 1.函数的命名...

  • Kotlin 函数用法入门

    本文内容: 函数与函数常量 扩展函数 命名参数与默认参数 运算符重载 递归与尾递归 定义函数 在 Kotlin 中...

  • Python语言程序---代码复用与函数递归(二)

    Python语言程序---代码复用与函数递归(二) 函数递归 在函数定义中,调用函数自身的方式就是递归。 递归并不...

  • 递归在实际中的应用与思考

    递归的三种表现形式 定义是递归的:例:阶乘函数的定义——n! = 1;n = 0时n! = n * (n-1)! ...

  • 【dp笔记】动态规划解题一般思路

    课程笔记:程序设计与算法(二)算法基础:dp 递归到动规的一般转化方法 递归函数有n个参数就定义n维的数组 数组的...

网友评论

    本文标题:【python】定义函数、参数、递归(n!)

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