python学习干货教程(16):函数

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

定义函数

函数的第一行语句可以使用文档字符串———用于存放函数说明。

语法:

def 函数名(参数列表):

       函数体

参数

关键字参数:(调用时指定传参对象)使用关键字参数允许函数调用时参数的顺序与声明时不一致。

不定长参数

调用时传入的比当初声明时更多的参数,叫做不定长参数。传参时可以不传入不定长参数。

基本语法如下:

def functionname([formal_args,] *var_args_tuple )::     # 星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。

    "函数_文档字符串" 

    function_suite

    return [expression]


参数带两个星号 **基本语法如下:

def functionname([formal_args,] **var_args_dict ):       # 两个星号 ** 的参数会以字典的形式导入。

     "函数_文档字符串"

     function_suite

     return [expression]

声明函数时,参数中星号 * 可以单独出现,如果单独出现星号 *,那它后面的参数必须用关键字传入。

参数传递


变量和类型


传参(传对象)


传不可变对象
传可变对象

匿名函数

python 使用 lambda 来创建匿名函数。匿名,意即不再使用 def 语句这样标准的形式定义一个函数。写在一行

lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。仅仅能在lambda表达式中封装有限的逻辑进去。

不等同于(C或C++的内联函数——目的是调用小函数时不占用栈内存从而增加运行效率。)

语法:

lambda [arg1 [,arg2,.....argn]]:表达式


return语句

用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。

None是python中的一个特殊的常量,表示一个空的对象,None和任何对象比较返回值都是False,除了自己。


变量作用域

在Python程序中创建、改变、查找变量名时,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域。python的作用域是静态的,在源代码中变量名被赋值的位置决定了该变量能被访问的范围。即Python变量的作用域由变量所在源代码中的位置决定。

Python的作用域一共有4种,分别是:

L (Local) 局部作用域

E (Enclosing) 闭包函数外的函数中

G (Global) 全局作用域

B (Built-in) 内置作用域(内置函数所在模块的范围)

以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。

作用域

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的。也就是说这些语句内定义的变量,外部也可以访问。

全局变量和局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。

global 和 nonlocal关键字

内部作用域想修改外部作用域的变量时,可以用global关键字:

global 外部作用域变量

要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字:

你可能感兴趣的:(python学习干货教程(16):函数)