Skip to content

Latest commit

 

History

History
311 lines (193 loc) · 7.07 KB

File metadata and controls

311 lines (193 loc) · 7.07 KB

第9节 python函数

❤️💕💕python是一种动态的解释形语言,由于python的普遍性,学会python能更快的解决问题,以及学习其他的知识。Myblog:http:https://nsddd.top


[TOC]

python函数

python函数相对于其他的编程语言来说就很简单了

函数是一段代码,只有在被调用时才会运行。

您可以将数据(称为参数)传递给函数。

函数可以返回数据作为结果。

python调用函数

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

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

my_function()

参数

默认参数

In [5]: def my_function(fname,lname):
   ...:     print(fname + " " + lname)
   ...:

In [6]:

In [6]: my_function("Emil","Refsnes")
Emil Refsnes

如果你只是用到了一个参数,那么会报错:

In [6]: my_function("Emil","Refsnes")
Emil Refsnes

In [7]: my_function("Emil")
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [7], in <cell line: 1>()
----> 1 my_function("Emil")

TypeError: my_function() missing 1 required positional argument: 'lname'

任意参数,*args

如果您不知道将传递给函数*的参数数量,请在函数定义中的参数名称前添加一个*

这样,该函数将接收一个参数元组,并可以相应地访问这些项目:

如果参数数量未知,*请在参数名称前添加:

In [8]: def my_function(*kids):
   ...:   print("The youngest child is " + kids[2])
   ...:
   ...: my_function("Emil", "Tobias", "Linus")
The youngest child is Linus

In [9]: def my_function(*kids):
   ...:   print("The youngest child is " + kids[2])
   ...:
   ...: my_function("Emil", "Tobias")
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)

关键字参数

您还可以使用key = value语法发送参数。

这样,参数的顺序就无关紧要了。

In [11]: def my_function(child3, child2, child1):
    ...:   print("The youngest child is " + child3)
    ...:

In [12]: my_function(child1 = "Emil", child2 = "Tobias", child3 = "Linus")
The youngest child is Linus

任意关键字参数,**kwargs

如果您不知道将传递给函数的关键字参数的数量,请**在函数定义中的参数名称之前添加两个星号:

这样,函数将接收参数字典,并可以相应地访问项目:

In [13]: def my_function(**kid):
    ...:   print("His last name is " + kid["lname"])
    ...:

In [14]: my_function(fname = "Tobias", lname = "Refsnes")
His last name is Refsnes

当你传入的是python的数据结构而不是某一个数字,用任意关键字参数或许是一个很好的办法

默认参数值

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

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

In [15]: def my_function(country = "Norway"):
    ...:   print("I am from " + country)
    ...:

In [16]: my_function("smile")
I am from smile

In [17]: my_function()
I am from Norway

In [18]: my_function("bell,email:[email protected]")
I am from bell,email:3293172751@qq.com

将列表作为参数传递

您可以将任何数据类型的参数发送给函数(字符串、数字、列表、字典等),它将在函数内部被视为相同的数据类型。

例如,如果你发送一个 List 作为参数,当它到达函数时它仍然是一个 List:

In [19]: def my_function(food):
    ...:   for x in food:
    ...:     print(x)
    ...:

In [20]: fruits = ["apple", "banana", "cherry", "kiwi", "mango"]

In [21]: my_function(fruits)
apple
banana
cherry
kiwi
mango

返回值

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

In [26]: def my_function(x):
    ...:   return 5 * x
    ...:

In [27]: my_function(132)
Out[27]: 660

In [28]: my_function(0)
Out[28]: 0

In [29]: my_function(-10)
Out[29]: -50

通行证声明

function定义不能为空,但如果您出于某种原因有一个function没有内容的定义,请放入pass语句以避免出错。

In [34]: def myfunction2():
    ...:   pass
    ...:
    ...:

In [35]: my_function2(1)

递归

Python 还接受函数递归,这意味着定义的函数可以调用自身。

递归是一个常见的数学和编程概念。这意味着一个函数调用自己。这样做的好处是,您可以遍历数据以得出结果。

开发人员应该非常小心递归,因为很容易陷入编写一个永不终止的函数,或者一个使用过多内存或处理器能力的函数。但是,如果编写正确,递归可能是一种非常有效且数学上优雅的编程方法。

在此示例中,tri_recursion()是我们定义为调用自身(“recurse”)的函数。我们使用k变量作为数据,每次递归时都会递减( -1 )。当条件不大于0时(即为0时)递归结束。

在递归中,一定要设置一个出口!

对于新开发人员来说,可能需要一些时间来弄清楚它是如何工作的,最好的方法是测试和修改它。

In [37]: def tri_recursion(k):
    ...:   if(k > 0):
    ...:     result = k + tri_recursion(k - 1)
    ...:     print(result)
    ...:   else:
    ...:     result = 0
    ...:   return result
    ...:

In [38]: tri_recursion(6)
1
3
6
10
15
21

上面的递归可以理解为函数入栈,先进后出,事实上也是这样,在操作系统中我们学习到程序产生中断,当前的软件和硬件保存当前的状态,然后后面恢复程序,我们以为的顺序是下降的,实际上是上升的。

匿名函数

lambda 函数是一个小的匿名函数。

一个 lambda 函数可以接受任意数量的参数,但只能有一个表达式。

lambda arguments : expression

将 10 添加到参数a,并返回结果:

In [39]: x = lambda a : a + 10
    ...: print(x(5))
15

In [40]: x = lambda a : a + 10

In [41]: x(1)
Out[41]: 11

In [42]: x(2)
Out[42]: 12

In [43]: x(x(3))
Out[43]: 23

前面很容易理解,我们看下后面调用x(x(3))x(3) = 3 + 10 = 13

x(13) = 13 + 10 = 23

匿名函数可以有多个参数

In [46]: x = lambda a,b,c : a * b * c

In [47]: x(2,3,4)
Out[47]: 24

END 链接