到目前为止所编写的代码都是以一个代码块的形式出现的。当某些任务,例如一个数的阶乘,需要在一个程序中不同位置重复执行时,这样造成代码的重复率高,应用程序代码繁琐。解决这个问题最好的方式就是使用函数。无论是哪种编程语言中,函数都是起着很重要的角色。




python怎么定义全局变量 python定义全局变量的函数_函数参数


1. 函数的定义

在某些的编程语言当中,函数声明和函数定义是区分开的,但是在python中,函数声明和函数定义视为一体的。如下,函数定义的基本形式如下:


python怎么定义全局变量 python定义全局变量的函数_python_02


说明:

A、 在python中采用def关键字进行函数的定义,不用指定返回值的类型

B、 函数参数可以是零个、一个或者是多个,同样的,函数参数也不用指定参数类型,因为在python中变量都是弱类型的,python会自动根据值类维护其类型

C、 Python函数的定义中缩进部分是函数体

D、 函数的返回值是通过函数中的return语句获得的。Return语句是可选的,它可以在函数体的任何地方出现,表示函数调用执行到此结束。如果没有return语句,会自动返回None,如果有return语句,但后面没有接表达式或者是值的话也是返回None。


python怎么定义全局变量 python定义全局变量的函数_python定义全局变量_03


2. 函数的使用

在定义函数之后,就可以使用该函数了,但是在python中要注意一个问题,就是在python中不允许前向引用,记载函数定义之前,不允许调用该函数。


python怎么定义全局变量 python定义全局变量的函数_作用域_04


3. 函数的返回值

函数是使用return返回值,也可以将Lambda表达式作为函数的返回值。如下:


python怎么定义全局变量 python定义全局变量的函数_python_05


4. 函数参数

4.1 函数形参和实参的区别

形参全称是形式参数,在def关键字定义函数时函数名后面括号里的变量称为形式参数。实参全称为实际参数,在调用函数时提供的值或者变量称为实际参数,如下:


python怎么定义全局变量 python定义全局变量的函数_python定义全局变量_06


4.2 函数参数的类型

在C语言中,调用函数时必须依照函数定义时的参数个数以及类型来传递参数,否则将会发生错误,这个是严格规定的。然而在python中函数参数定义和传递就相对有些灵活很多了。

A、 默认值参数:在于它能够给函数提供默认值:如:


python怎么定义全局变量 python定义全局变量的函数_python定义全局变量_07


在上面的代码中,分别给a和b指定了默认参数,即如果不给a和b传递参数时,它们分别采用默认值的,在给参数指定了默认值后,如果传参时不指定参数名,则会从左到右进行传参。默认值参数如果使用不当,会导致很难发现的逻辑错误。

B、 关键字参数:

前面接触的那种函数参数定义和传递方式叫做位置参数,即参数时通过位置进行匹配的,从左到右,依次进行匹配,这个对参数的位置和格式都有严格的要求。而在python中还有一种通过参数名来匹配,不需要严格按照参数定义时的位置来传递参数,这种参数叫做关键字参数。避免了用户需要牢记位置参数顺序的麻烦


python怎么定义全局变量 python定义全局变量的函数_python_08


可以看到通过指定参数名族传递参数的时候,参数位置对结果是没有影响的。

C、 任意个数参数

一般情况下,在定义函数时,函数参数的个数是可以确定的,然鹅在某些的情况下是不能确定参数的个数的,例如要存储某个人的名字和他的小名,某些人小名可能有2个或者是更多的,因此在无法确定参数的个数,只需要在参数前面加上'*'或者'**'.,如下:


python怎么定义全局变量 python定义全局变量的函数_python_09


说明:'*'或者'**'表示能够接受0到任意多个函数,'*'代表是将没有匹配的值都放在同一个元组里,'**'.代表是将没有匹配的值都放在一个字典里。

5. 变量的作用域

当引入函数的概念之后,就出现了变量作用域的问题。变量起作用的范围称为变量的作用域。一个变量在函数外定义和在函数内部定义,其作用域是不同的。如果特殊的关键字定义一个变量,也就会改变其作用域。

5.1 局部变量

在函数内部定义的变量只能在函数内起作用,称为局部变量。它们与函数外具有相同名的其他变量没有任何关系的,即变量名称对于函数来说是局部的。所有局部变量的作用域是它们被定义的块,从它们的名称被定义处开始的,函数结束时,其局部变量被自动删除

5.2 全局变量

还有一种变量就是全局变量,它是在函数外部定义的,作用域是整个程序。全局变量可以直接在函数里面使用,但是如果要在函数内部改变全局变量值,必须使用global关键字进行声明,如下:


python怎么定义全局变量 python定义全局变量的函数_python定义全局变量_10