Python教程--函数(Function)

这篇文章中将会分享python中关于函数(Function)相关的一些知识。

通过前面几篇文章的学习,我们大概已经可以初步写出一些程序了。但我们会发现一个问题,那就是每次写完的程序不能重复利用。如果要用到相同或类似的功能,我们只能再把之前写过的东西重新写一遍。这样就大大降低了我们的程序使用效率。Python中的函数功能,就是为解决这个问题应运而生的。

一、什么是函数(Function)?

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

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

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

是不是看的有些头晕,别担心,我们可以看一个简单的例子:

1
2
3
def hello_func():
print ('Hello Functions!')
hello_func()

运行结果如下:

1
Hello Functions!

这样我们就创建了我们第一个自己的函数。每次调用的时候,只需要写出hello_func( )就可以了。如果只是输出一次”Hello Funcitons!”我们可能还感觉不到函数本身有什么强大的功能。但是,如果同样的函数我们在不同地方调用了很多次,最后发现有地方需要修改,我们就发现函数的妙用了。比如上面的函数,我们想要输出”Hello Funcitons!”一百次。在写完代码之后,老板突然说,你需要把“!”改成“.”。如果我们没有函数,只能熬夜加班挨个把他们改回来。但是,我们有了函数这个强大的工具,只需要修改函数本身,然后所有用到函数的地方都会被修改掉了。

二、参数传递

在函数中,我们还可以在括号中传递参数。从而使得程序输出结果会根据我们输入的参数不同而随之发生变化。比如这个例子:

1
2
3
def hello_func(greeting):
return (f'{greeting} Functions!')
print(hello_func('Hi'))

输出结果为:

1
Hi Functions!

这里我们可以改变“Hi”为任意我们想要的打招呼的语句,而不用去改变函数本身。再举一个稍微复杂一点的例子:

1
2
3
def hello_func(greeting, name = "You"):
return (f'{greeting}, {name}!')
print(hello_func('Hi'))

这次我们传递了两个参数,一个是打招呼的语句,另一个是打招呼的对象。但我们赋予了name一个默认值”You”。所以我们可以只输入第一个参数,第二个参数就会自动赋予默认值。运行程序结果如下:

1
Hi, You!

同样,我们也可以改变第二个参数,这样我们就会输出我们想要的结果。比如:

1
2
3
def hello_func(greeting, name = "You"):
return (f'{greeting}, {name}!')
print(hello_func('Hi', name = 'Corey'))

运行结果为:

1
Hi, Corey!

前面所说的这些都是需要知道我们有多少个参数输入。但在某些条件下,你可能需要一个函数能处理比当初声明时更多的参数。那么我们就会用到不定长参数,在参数前面加*和**来表示。举例如下:

1
2
3
4
def student_info(*args, **kwargs):
print(args)
print(kwargs)
student_info('Math','Art',name = 'Jone', age = 22 )

运行结果如下:

1
2
('Math', 'Art')
{'name': 'Jone', 'age': 22}

单个不定长度参数是用 *args 来标识,其中 * 是规定的,args可用其他名称替换,但一般习惯用 args 来表示。可变参数在传入函数后,被封装成一个 tuple 来进行使用。所以我们在函数内部,可以通过操作 tuple 的方法来操作参数。同样的,** kwargs 被用来在函数内部当作一个字典来用,用于不定长度的字典类型的参数。其中,**是规定的,不可变更,而kwargs可替换。


您的支持将鼓励我继续创作