python函数使用格式_python函数

函数:

由若干语句组成的语句块、函数名称、参数列表构成,它是组织代码的最小单元 ,完成一定的功能

作用:结构化编程对代码的最基本的封装,一般按照功能组织一段代码 ,封装的目的为了复用,减少冗余代码 ,代码更加简洁美观、可读易懂

函数参数:参数调用时传入的参数要和定义的个数相匹配(可变参数例外)

位置参数:按照参数定义顺序传入实参

关键字参数:使用形参的名字来出入实参的方式,如果使用了形参名字,那么传参顺序就可和定义顺序不同 。 要求位置参数必须在关键字参数之前传入,位置参数是按位置对应的

位置参数的可变参数:在形参前使用*表示该形参是可变参数,可以接收多个实参 , 收集多个实参为一个tuple

关键字参数的可变参数:形参前使用**符号,表示可以接收多个关键字参数 ,收集的实参名称和值组成一个字典

keyword-only参数(Python3加入) :如果在一个星号参数后,或者一个位置可变参数后,出现的普通参数,实际上已经不是普通的 参数了,而是keyword-only参数 ,args可以看做已经截获了所有的位置参数,x不使用关键字参数就不可能拿到实参

函数func中的位置参数默认值保存在属性__defaults__中,为一个元组,可以使用func.__defaults__进行查看; 属性__kwdefaults__中使用字典保存所有keyword-only参数的默认值

参数列表参数一般顺序是,普通参数、缺省参数、可变位置参数、keyword-only参数(可带缺 省值)、可变关键字参数

参数解构: 给函数提供实参的时候,可以在集合类型前使用*或者**,把集合类型的结构解开,提取出所有 元素作为函数的实参 ,非字典类型使用*解构成位置参数 , 字典类型使用**解构成关键字参数 , 提取出来的元素数目要和参数的要求匹配,也要和参数的类型匹配

函数返回值:Python函数使用return语句返回“返回值” ,所有函数都有返回值,如果没有return语句,隐式调用return None , return 语句并不一定是函数的语句块的最后一条语句 , 一个函数可以存在多个return语句,但是只有一条可以被执行。如果没有一条return语句被执 行到,隐式调用return None ,如果函数执行了return语句,函数就会返回,当前被执行的return语句之后的其它语句就不会 被执行了 。作用:结束函数调用、返回值。

函数不能同时返回多个值, return 1, 3, 5 看似返回多个值,隐式的被python封装成了一个元组 。可以使用 x, y, z = showlist() 使用解构提取更为方便。

函数嵌套:在一个函数中定义了另外一个函数,内部函数不能在外部直接使用,会抛NameError异常,因为它不可见

作用域:一个标识符的可见范围,这就是标识符的作用域。一般常说的是变量的作用域

全局作用域: 在整个程序运行环境中都可见

局部作用域:在函数、类等内部可见 ,局部变量使用范围不能超过其所在的局部作用域

例:

1563457-20190109141910299-1082954346.png

1563457-20190109141936419-326369716.png

x +=1 其实是x=x+1,相当于在f内部定义一个局部变量x,但是这个x还没有完成赋值,就被右边拿来做加1操作了,如何解决?

1563457-20190109142302673-1667191797.png

使用global关键字,将f内的x声明为使用外部的全局作用域中定义的x,全局作用域中必须有x的定义

global使用原则: 外部作用域变量会内部作用域可见,但也不要在这个内部的局部作用域中直接使用,因为 函数的目的就是为了封装,尽量与外界隔离,如果函数需要使用外部全局变量,请使用函数的形参传参解决

闭包:出现在嵌套函数中,指的是内层函数引用到了外层函数的自由变量,就形成 了闭包。

nonlocal关键字:

使用nonlocal关键字,将变量标记为不在本地作用域定义,而在上级的某一级局部作用域中定义,但不 能是全局作用域中定义

例:

1563457-20190109143207701-814833680.png

count 是外层函数的局部变量,被内部函数引用 ,内部函数使用nonlocal关键字声明count变量在上级作用域而非本地作用域中定义 ,代码可以正常使用,且形成闭包

默认值的作用域:函数func中的位置参数默认值保存在属性__defaults__中,为一个元组,可以使用func.__defaults__进行查看; 属性__kwdefaults__中使用字典保存所有keyword-only参数的默认值。使用可变类型作为默认值,就可能修改这个默认值,如何做到默认值不会改变呢?

例1:

1563457-20190109150741308-1721828555.png

例2:

1563457-20190109150854050-1930986783.png

第一种方法: 使用影子拷贝创建一个新的对象,永远不能改变传入的参数

第二种方法: 通过值的判断就可以灵活的选择创建或者修改传入对象 ,很多函数的定义,都可以看到使用None这个不可变的值作为默认参数,可以说这是一种惯用法

变量名解析原则LEGB:

1563457-20190109151120226-769413962.png

函数的销毁:

全局函数销毁:重新定义同名函数,del语句删除函数对象,程序结束时

局部函数销毁:重新在上级作用域定义同名函数,del语句删除函数名称,函数对象的引用计数减1,上级作用域销毁时。

匿名函数:

python借助lambda表达式构建匿名函数

格式:lambda 参数列表:表达式

参数列表不需要小括号,冒号是用来分割参数列表和表达式的,不需要使用return语句,表达式的值,就是匿名函数的返回值,lambda表达式只能卸载一行上,被称为单行函数

匿名函数的调用:

1563457-20190109205548037-182641504.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值