函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
定义函数
函数的第一行语句可以使用文档字符串———用于存放函数说明。
语法:
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 关键字:
网友评论