现在Python编程语言在工业以及科技上呗广泛应用,而且用Python语言编程程序简单易懂。所以Python语言也是编程初学者应该学习的一门语言。下面我们来了解一下关于Python中基础知识——函数。


Python的基础知识——函数

Python语言的函数是由一个新的语句进行编写的,这个语句就是def。函数要在程序运行了def之后才会存在。函数定义的一般格式:

def function_name(arg1,arg2[,...]):

statement

[return value]

注意,返回值不是必须的。如果你的语句中没有return,Python会默认返回None值。

下面看一个例子:

函数名的命名规则:

函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标点符号;

函数名是区分大小写的。

函数名不能是保留字。

局部变量

当这个函数执行的时候会为这个函数的局部变量引入一个新的符号表。然后所有在函数体中进行赋值的变量名和值都会存在这个符号表中。然后当函数体引用一个变量的时候,会首先查看函数中的符号表,如果这个函数定义包裹在其它函数定义中,就依次查看外围函数的符号表,然后查看全局符号表(也就是函数所属的module的符号表),最后查看Python的内置类型和变量的符号表。

下面的例子中函数引用的是在局部符号表中的参数,而不是全局符号表中的l 。


函数调用中的实参传递是通过赋值语句做的,所以传递的是Object的引用。而序列是一种可变的类型,如果用序列做参数传递的时候改变它的值时会影响它在外围符号表的值,这样子就类似与C++中的引用。


函数的参数

在Python中函数的参数是可以有默认值的,但是规定了有默认值的参数必须要放在没有默认值的参数后面。我们看下面的例子:


函数参数的值也可以取自一个变量,这个默认值会在函数定义的地方被计算。注意,默认值只会被计算一次。


可能对于刚刚学习Python的朋友不太明白if __name__ == "__main__":

在Python中,运用函数就要调用模块,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于您如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下, __name__ 的值将是一个特别缺省"__main__"。

如果当参数的默认值是list这样的可变对象

函数的默认参数只会被计算一次,不管函数被怎么调用,所以当参数是list这样的可变对象时,但在函数体中其值被改变时,再次调用参数的默认值就是改变后的值我们看看下面的例子:


从这例子我们可以看出从f(2)开始l 就有默认的值,不会再从新计算一次,然后又把一个值添加到l 中。

上面的例子中输出结果是:

[1]

[1,2]

[1,2,3]

但是我们看以下的代码:


这个代码中在f(2)调用的时候l=None,l被赋了一个内置常量,所以就不会被改变。

上面例子的输出结果是:

[1]

[2]

[3]

append的作用是为l 列表添加一个数,并且每一次只能添加一个。

Python函数中实参和形参

实参(argument)是指函数调用时传递进去的参数值(value),形参是定义函数的时候函数名后面括号中的参数。而实参也分为了两类,一类叫关键字实参,一类叫位置实参。

关键字实参就是说在调用函数的时候,可以在调用函数的括号后面使用name=value的形式传递参数。由于使用这种形式的话已经指明了参数名,所以在括号中使用的时候不用理会顺序。

位置实参就是不使用name=value的形式传递参数,你如果要传递正确的数值。你就要把实参的值放在正确的位置上,这样才能和对应的形参匹配。

下面我们看看例子帮助理解:


输出的结果为:a = 5 b = 2 c = 8

参数的解包

这是什么意思?,就是说如果我们再一个list或者一个dict中定义了参数,我们就可以直接将这个list或者dict传给函数。里面的值可以被解包出来传给函数中一个个参数。

作为位置参数解包

位置参数的定义上文我们有说到,所以作为位置实参解包就是讲一个list或者tuple解包后对应的值作为位置参数传递,调用的时候要以*args的形式。


作为关键字参数解包

要解包为关键字参数,使用字典。字典的key为形参的name,是字符串,字典value为传递的实参。 语法上在调用的时候以**args的形式


参数的打包

参数打包就是将参数打包成一个元祖,然后将这个元祖传给一个形参,这样子就可以通过元祖给函数传递任意个参数了。


关于Python函数的了解就先说到这里,初学者要知道的是,Python和C语言和java一样在调用函数之前都要先引入对应的头文件或者包。而这个概念在Python中称为模块。总的来说,Python的函数简单易懂,代码也不复杂。在文中一些初学者可能不懂的地方都做了一定的了解。希望文章有做帮助。