python函数基础

函数

1.有参:当函数的代码逻辑需要依赖外界的数据才能完成功能时

2.无参:当函数的代码逻辑不需要依赖外界的数据才能完成功能时

3.空函数::没有函数体的函数称为空函数,用来编写程序初期定于程序的结构

函数调用:

1.直接调用,函数名加()

2.在表达式中调用函数

3.可以将函数的返回,作为另一个函数的参数

 

参数:

大体分为:

1.形参:在函数定义阶段的参数

2.实参:调用函数时传递的值

具体分为:

1.位置参数:有几个就必须传几个,实参会按照顺序依次赋值给形参

2.关键字参数(指的是实参):可以在调用时,按照形参的名字传值,可以打破顺序限制,必须在位置参数后面

3.默认值参数,可以在定于函数时,给形参指定一个值,默认值应该设置为不可变类型

4.可变长形参:

*可变长的位置形参,可以接受溢出的位置实数,打包为一个元组类型

**可以接受溢出的位置实数,打包为一个字典类型

可变长实参:

*可以跟任何的可迭代类型(str,list,tuple,set.dict)会把后面的值打散成单个元素以位置参数传给函数

**可以跟mapping(dict)会把后面的值打散成单个key:value以关键字参数传给函数

 

函数嵌套:

1.嵌套调用:指的是,在函数的执行过程中调用了另一个函数,可以简化外层大函数的代码.使得结构更清晰,可以将一个大的复杂的功能拆分为多个简单的小功能

2.嵌套定义时:在函数的函数体中定义了另一个函数

内部定义的函数,外部无法直接访问和调用

唯一的使用场景就是闭包函数,除此之外不要这么写

 

名称空间:

namespace就是存储名字的内存空间,存储名称与内存地址绑定关系的内存空间

名称空间的分类:

1.内置名称空间:

存的是解释器自带的名称,例如print,len

特点:在程序运行过程中都有效

生命周期:随着解释器的启动而生效,随着解释器运行结束而失效

2.全局名称空间:

只要是顶着最左边写的,没有任何缩进,就在全局中

特点:在程序运行过程中都有效

生命周期:随着py文件的启动而生效,随着py文件的运行结束而失效

if 1==1:

    age=1

age也是全局变量

在if中,如果顶着最左边的没有缩进的,那么if里面的名字也属于全局变量

同样的while for with 也是如此

3.局部名称空间

存的是函数内定义的名字

特点是:仅在函数调用时临时有效

生命周期:随着函数的调用而生效,随着函数的调用而失效

名字的查找顺序:

内置,全局和局部,优先使用局部,其次是全局,最后内置

名称空间的加载顺序:

内置->全局->局部

 

作用域:有效范围

简单的说就是名字的有效范围

存储名称的三个地方:

内置名称空间

全局名称空间

局部名称文件

由于内置名称空间的名字与全局名称空间的名字,可以在任何位置访问,所以他们可以划到同一个范围,称之为全局范围(全局作用域)

局部名称空间的名字只能在当前的函数中访问,所以它单独划分到一个范围,即局部作用域

global(全局)与nonlocal(不使用本地)关键字

global a,b #声明使用全局变量a,b

放在访问这个值之前

global:当在函数内部修改全局中名字的值

nonlocal a #声明修改外层的a,而不是定义一个新的,不能找全局变量

nonlocal:当需要在内层函数中修改外层函数中的名字

会一层一层的往外找,直到找到位置,只能找函数中的,不能找全局中的名字        

 

函数对象    

1.能够被调用

2.可以当做容器类型的元素

3.可以当做函数的参数

4.可以当做函数的返回值

函数名除了可以调用之外,与一个变量名没有本质区别,变量能怎么用,函数名就能怎么用

闭包函数:一个函数被另一个函数包裹

闭包函数也是一种函数

特点:定义在另一个函数中的

包含了对外层函数中名字的引用,无论在任何位置使用这个函数,都包含了外部名字引用

满足以上两条,就是闭包函数

名字所在的作用域,在函数定义阶段就已经固定了,与调用位置无关

目前,可以将闭包理解为,另一种为函数体传值的方式

之前只能通过参数给函数传值

现在可以通过闭包的方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值