轻松上手,快乐学习!

Python 函数


定义一个函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

创建一个函数

在Python中,使用def 关键字定义函数:

实例

def my_function():
  print("Hello from a function")

调用函数

要调用函数,请使用函数名称后跟括号:

实例

PYTHON标题

def my_function():
  print("Hello from a function")

my_function()

运行实例 »


参数

信息可以作为参数传递给函数。

参数在括号内的函数名后面指定。您可以根据需要添加任意数量的参数,只需用逗号分隔即可。

以下示例具有一个带有一个参数(fname)的函数。当调用该函数时,传递一个名字,在函数内部使用它来打印全名:

实例

def my_function(fname):
  print(fname + " Refsnes")

my_function("Emil")
my_function("Tobias")
my_function("Linus")

运行实例 »


默认参数值

以下实例显示如何使用默认参数值。

如果我们调用没有参数的函数,它使用默认值:

实例

def my_function(country = "Norway"):
  print("I am from " + country)

my_function("Sweden")
my_function("India")
my_function()
my_function("Brazil")

运行实例 »


List作为参数传递

可以将任何数据类型的参数发送到函数(字符串,数字,列表,字典等),并将其视为函数内的相同数据类型。

例如,如果您将List作为参数传递,它到达函数内时仍是List:

实例

PYTHON标题

def my_function(food):
  for x in food:
    print(x)

fruits = ["apple", "banana", "cherry"]

my_function(fruits)

运行实例 »


返回值

要让函数返回值,请使用return 语句:

实例

PYTHON标题

def my_function(x):
  return 5 * x

print(my_function(3))
print(my_function(5))
print(my_function(9))

运行实例 »


递归

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

在使用递归时要小心,因为它可以很容易编写一个永不终止的函数,或者使用大量内存或处理器能力的函数。但是,正确使用递归是一种非常有效且数学上优雅的编程方法。

在例子中tri_recursion()是定义为调用递归函数。使用k变量,每次递归时递减(-1)。当条件不大于0时(即为0时)递归结束。

对于一个新手来说,可能需要一些时间来确定其工作原理,最好的方法是通过不断修改测试,以达到熟练。

实例

递归

def tri_recursion(k):
  if(k>0):
    result = k+tri_recursion(k-1)
    print(result)
  else:
    result = 0
  return result

print("\n\nRecursion Example Results")
tri_recursion(6)

运行实例 »

递归经典实例:

阶乘计算

阶乘公式表示n! = 1 * 2 * 3 * ... * n,用函数fact(n)表示,可以看出:

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

所以,fact(n)可以表示为n * fact(n-1),只有n=1时需要特殊处理。

于是,fact(n)用递归的方式写出来就是:

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

运行结果:

>>> fact(1)
1
>>> fact(5)
120
我们可以看fact(5)的执行过程:
===> fact(5)
===> 5 * fact(4)
===> 5 * (4 * fact(3))
===> 5 * (4 * (3 * fact(2)))
===> 5 * (4 * (3 * (2 * fact(1))))
===> 5 * (4 * (3 * (2 * 1)))
===> 5 * (4 * (3 * 2))
===> 5 * (4 * 6)
===> 5 * 24
===> 120

 

递归经典实例:

斐波那契数列 (Fibonacci数)

斐波那契数列,数学中最重要的数列之一,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,

是这样一个数列:0、1、1、2、3、5、8、13……

在数学上斐波那契数列以递归的方法定义:F(0)=0、F(1)=1、F(n)=F(n-1)+F(n-2)(n>2)。

def fun(n):
   if n <= 1:
       return n
   else:
       return fun(n - 1) + fun(n - 2)

打印10斐波那契数列结果:

>>> for i in range(10):
... print(fun(i))
...
0
1
1
2
3
5
8
13
21
34