02-01 函数

函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段。函数能提高应用的模块性和代码的重复利用率。函数分为内建函数和自定义函数。

语法

Python中函数代码以def关键词开头,后接函数标识符名称和圆括号;任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数;函数的第一行语句可以选择性使用文档字符串存放函数说明;函数内容已冒号其实,并缩进;return结束函数,选择性返回一个值给调用方,不带表达式的return相当于返回None。

def函数名(参数列表):

函数体

命令行中定义和调用函数:

脚本方式定义和调用函数:

函数调用

定义一个函数后,可以通过另一个函数进行调用,也可以直接从Python命令提示符执行。

传递参数

在Python中,类型属于对象,变量没有类型。变量是一个对象的引用(一个指针),可以指向任何类型的对象。

可更改与不可更改对象

Python中,string、tuple、number是不可更改的对象,list、dict等是可以修改的对象。

不可变类型:变量赋值一个不可更改对象后,再赋值另一个不可更改对象,这里是指新生成一个不可更改对象再让变量指向它,而原来指向的对象被丢弃,不是改变原来被指向对象的值,相当于新生成了变量。

可变类型:变量赋值可变对象后,在修改可变对象内部元素值,本身对象没有变动,只是起内部的一部分值被修改。

参数传递:

不可变类型:类似c++的值传递,如整数、字符串、元组。

可变类型:类似c++的引用床底,如列表、字典。

参数

python调用函数时可以使用的参数类型有:必须参数、关键字参数、默认参数、不定长参数等。

必须参数:必须参数必须用正确的顺序传入函数。调用时的数量必须和声明时一样。

关键字参数:关键字参数和函数调用关系紧密,函数调用使用关键字来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,Python解释器能够用参数名匹配参数值。

默认参数:调用函数时,如果没有传递参数,则会使用默认参数。

不定长参数:喊出能处理比声明时更多的参数,这些参数叫做不定长参数。在参数列表中加了“*”的参数,该参数会以元组的形式导入,存放所有未命名的变量参数,如果在函数调用时没有指定参数,它就是一个空元组。还有一种不定长参数是两个“*”的参数,该参数会以字典的形式导入。声明函数时,参数中的不定长参数可以单独串行,如果单独出现不定长参数,该参数后的参数必须使用关键字传入。

匿名函数

Python使用lambda创建匿名函数。匿名函数就是不使用函数标准形式定义函数。

lambda只是一个表达式,函数体比def简单

lambda的主体是一个表达式,不是一个代码块。仅能封装有限的逻辑

lambda函数拥有自己的命名空间,且不能访问自己参数列表以外或全局命名空间的参数。

lambda函数语法:

lambda[arg1[,arg2,……argn]]:expression

return语句

return[表达式]语句用于退出函数,向调用方返回一个表达式。不带参数的return返回None。

变量作用域

变量作用域决定了在哪一部分程序可以访问哪个特定的变量。Python作用域有4中:

Local局部作用域

Enclosing闭包函数外的函数中

Global全局作用域

Built-in内建作用域(系统固定模块里的变量,如:int、bytearray)

以Loacal >Enclosing> Global>Built-in的规则查找变量,即局部找不到去闭包中找,闭包找不到去全局找,全局找不到去内建中找。

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

全局变量和局部变量

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

局部变量只能在其呗声明的函数内部访问,而全局变量可以在整个程序范围内访问,调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。

global和nonlocal关键字

当内部作用域想修改外部作用域变量是,就要用到golbal和nonlocal关键字了。

如果要修改嵌套作用域(enclosing作用域,外层不是全局作用域)中的变量需要使用nonlocal关键字。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190131G0KOUF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券