Python3学习笔记 | 十八、Python的函数-函数基础

一、函数简介

函数是将一些语句集合在一起的部件,它们能够不止一次地在程序中运行。函数还能计算出一个返回值,并能够改变作为函数输入的参数,而这些参数在代码运行时也许没次都不相同。

我们可以把可重复的工作,放进单个函数里,再次需要使用同样代码的时候,不需要重新写(或者拷贝、粘贴)同样或相似的代码。而且当需要改变功能时,只需要稍微更改函数本身,而不需要在整个代码里找相应的位置。

函数是Python为了代码最大程度的重用和最小化代码冗余而提供的最基本的程序结构。函数也是一种设计工具,使用函数,我们也可以把复杂的系统分解为可管理的部件。

总结使用函数的意义:

最大化代码重用和最小化代码冗余。

流程的分解。

二、函数相关的语句和表达式

Calls:my_function(‘First Arg’, ‘Second Arg’) def:def my_function(first_arg, second_arg=0): return:return first_arg + second_arg global:global x; x = new_value nonlocal:nonlocal x; x = new_value yield:def my_sqr(x): for i in range(x): yield i 2 lambda:Funcs = [lambda x: x 2, lambda x: x * 3]

三、编写函数

def是可执行的代码。在Python里,只有def执行之后,才会生成相应的函数。要是def没有执行,相应的函数就不会生成。def语句在if、while语句甚至是其它def语句里也是合法的。 def创建了一个对象,并将其赋值给一个变量。def语句是生成一个函数对象,并将其赋值给函数名变量。其实与赋值相同。 lambda创建一个函数对象发送给调用者。因此,也可使用lambda表达式创建函数,这一功能允许我们把函数定义内联到语法上一条def语句不能工作的地方。 return将一个结果对象返回给调用者。这个返回值成为函数调用的结果。 yield向调用者返回一个结果对象,但是记住它离开的地方。这个语句后续章节会介绍的高级语句。

global声明了一个模块级的变量并被赋值。在默认情况下,所有在函数内被赋值的变量,是在这个函数里的本地变量,并仅在函数函数运行过程中存在。为分配一个可以在整个模块中都可以使用的变量名,函数需要在global语句中列举出来。 nonlocal声明了将要赋值的一个封闭的函数变量。Python3.x里才有的语句。函数里嵌套函数时,都使用相同变量名时,只想继承上一个函数里的相同变量时可以使用。 函数是通过赋值(对象引用)传递的。参数是通过赋值传递的。但是,在Python中赋值就是对象引用。因此当参数被传递的对象为可变对象(列表、字典等),当对参数进行变更时,会影响到被传递进来的变量(变量所引用的对象)。 参数、返回值以及变量并不是声明。这个与其它变量相同,不需要提前声明,或者说是没有任何类型。

四、def语句

def语句将创建一个函数并将其赋值给一个变量名: def <变量名>([参数1,参数2,…]): <语句> def语句的首行定义函数名,并引用函数对象。参数个数是0或以上数目。语句里,可以包含return语句,在调用函数时,会返回一个值。当没有return时,默认返回值为None。函数里,也可使用yeild语句来生成返回值。在之后章节会讲到。

实时生成函数

在Python里,因为def是执行语句,因此函数是实时生成的。

>>> if False:
...     def myfun():
...             print('false')
...
>>> myfun()
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
NameError: name 'myfun' is not defined
>>> x = 2
>>> if x > 1 :
...     def myfun():
...             print(x)
... else:
...     def myfun():
...             print(x+10)
...
>>> myfun()
2

五、Python 函数中的多态

def times(x, y): return xy 在这个函数里,xy 的结果取决于x和y的对象类型。因为Python本身不定义变量类型,因此传递的值的类型与返回的类型都不一定是固定的类型。

>>> def times(x,y):
...     return x*y
...
>>> times('a',2)
'aa'
>>> times(3,2)
6
>>> times(4,[1])
[1, 1, 1, 1]

六、本地变量

>>> x = 10  --全局变量
>>> def printx():
...     x = 20  --这里的x是本地变量
...     print(x)  --在这里,打印的是本地变量x
...
>>> printx()
20
>>> print(x)  --这里打印的是全局变量
10
>>> [x for x in range(4)]  --这里的所有x都是for循环里的本地变量
[0, 1, 2, 3]

原文发布于微信公众号 - TeamsSix(OldCat0111)

原文发表时间:2019-02-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券