python函数
python中的函数其实也可以理解为变量,函数名就是变量名,函数体就是存储的数据。
函数定义的格式
def 函数名([参数]):
"注释"
函数体
[return value]
返回值不是必须的,如果没有定义返回值,则返回值默认为none
return 返回值可以是任何数据类型,也可以是函数。
函数中的参数
这里参考:
通过上面的测试,我们可以推出,对于传进来的元祖或列表,会循环遍历取出列表或者元祖中的元素。
关键字参数:关键字参数允许调用者传入0个或任意多个参数。这些参数会在函数内部自动组装成一个字典。
注意这样一个问题:
当我企图传入一个列表和数值、字符串作为key传入时报错了,于是推出,这里的key值应当是一个形式参数,也就是变量,当然不能用列表、数值作为变量名啊。
命名关键字参数:也就是通过“形参=实参”的形式,来传参。采用这种形式传参时,位置可以打乱。因为这是实参与形参之间的映射关系并不是通过位置来确定,而是通过“形参=实参”的形式。
混合参数
在前面我们提到,位置参数必须放在最前面,其次是默认参数,可变参数,命名关键字参数,最后是关键字参数。所以当我们使用混合参数时,要时刻注意不同参数类型的顺序问题。
全局变量与局部变量
变量命名规范:全局变量一般用大写表示,局部变量一般用小写表示。
对于同名变量的使用(全局变量与局部变量同名),我们要牢记“就近原则”,这一点与java相似。
当我们需要使用到全局的变量时,我们要使用到global关键字
注意细节:
当我企图在声明我们将使用到的是全局变量的同时,修改全局变量的值。这样操作是不允许的,会报错。
在嵌套函数中,
如果,我想输出“鸣人”“佐助”“佐助”的结果,我们可以使用nonlocal关键字。
nonlocal 表示接下来所使用的变量是来自上一级的。
关于嵌套函数调用中出现的问题:
这里出现了一个函数demo2未定义的问题,但是我们明明已经定义过了啊?
分析如下:
匿名函数
lambda [参数]:返回值
对于匿名函数,我们可以这样理解:
我们在内存中定义了一个数据,但是我们没有给它贴上标签。但是它是存在与内存中的,我们不妨不它叫做匿名变量(个人理解),同样的,如上面所说,函数即变量,匿名函数,其实也就是我们在内存中定义了一个函数,但是我们没有给他贴上标签。
匿名函数中,一般不能有复杂的逻辑。