Python(五)

函数用法和底层分析

函数不仅可以实现代码的复用,更能实现代码的一致性(只要修改函数的代码,则所有该调用该函数的地方都能得到体现)

函数简介

函数的基本概念

1.一个程序由一个个任务组成,函数就是代表一个任务或者一个功能

2.函数是代码复用的通用机制

Python函数的分类

1.内置函数:str()、list()、len()等

2.标准库函数:通过import语句导入库,然后使用其中定义的函数

3.第三方函数:Python社区提供了很多库,下载安装这些库后,通过import语句导入,然后就可使用这些第三方库的函数

4.用户自定义函数:用户自己定义的函数

函数的定义和调用

要点

1.使用def来定义函数,然后就是一个空格和函数名称:Python执行def时,会创建一个函数对象,并绑定到函数名变量上。(在Python中,一切都是对象

2.参数列表

(1)圆括号内是形式参数列表,有多个参数则使用逗号隔开

(2)形式参数不需要声明类型,也不需要指定函数返回值类型

(3)无参数,也必须保留空的圆括号

(4)实参列表必须与形参列表一一对应

3.return返回值

(1)如果函数体中包含return语句,则结束函数执行并返回值

(2)如果函数体中不包含return语句,则返回None值

4.调用函数之前,必须要先定义函数,即先调用def创建函数对象

(1)内置函数对象会自动创建

(2)标准库和第三方库函数,通过import导入模块时,会执行模块中的def语句

形参和实参

形式参数是在定义函数时使用的,命名只要符合“标识符”命名规则即可。

实际参数是在调用函数时传递的参数。

譬如以上函数中,在定义时写的printMax(a,b),a和b就是“形参”;printMax(10,20),10和20就是“实参”

文档字符串(函数的注释)

由于程序的可读性的重要性,一般会在函数体开始的部分附上函数定义说明,被称为“文档字符串”,通过三个单引号或者三个双引号实现,中间可以加入多行文字进行说明。

调用help(函数名._doc_)可以打印输出函数的文档字符串

返回值

return返回值要点:((1)(2)两点在函数的定义与调用)

(3)要返回多个返回值,使用列表、元组、字典、集合将多个值“存起来”即可

函数也是对象,内存底层分析 

执行def定义函数后,系统就创建了相应的函数对象

变量的作用域(全局变量和局部变量)

变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。

全局变量:
1.在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始到模块结束

2.全局变量降低了函数的通用性和可读性,尽量避免全局变量的使用

3.全局变量一般做常量使用

4.函数内要改变全局变量的值,使用global声明一下

局部变量:
1.在函数体中(包含形式参数)声明的变量

2.局部变量的引用比全局变量快,优先考虑使用

3.若局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量

局部变量的查询和访问速度比全局变量快,优先考虑使用,尤其是在循环的时候 

参数的传递

函数的参数传递本质上就是从实参到形参的赋值操作,所有的赋值操作都是“引用的赋值”,因此Python中参数的传递都是“引用传递”,不是“值传递”。

1.对“可变对象”进行“写操作”,直接作用于原对象本身

2.对“不可变对象”进行“写操作”,产生一个新的“对象空间”,并用新的值填充这块空间(起到“值传递”效果,但不是“值传递”)

可变对象有:字典、列表、集合、自定义的对象等

不可变对象有:数字、字符串、元组、function等

传递可变对象的引用

传递参数是可变对象,实际传递的是对象的引用。在函数体中不创建新的对象拷贝,而是可以直接修改所传递的对象。

传递不可变对象的引用

传递参数是不可变对象,实际传递的还是对象的引用。在“赋值操作”时,由于不可变对象无法修改,系统会新创建一个对象。

(n和a一开始是同一个对象,但给n赋值后,n是新的对象)

浅拷贝和深拷贝

内置函数:copy(浅拷贝)、deepcopy(深拷贝)

浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用

深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象

传递不可变对象是浅拷贝

传递参数是不可变对象(例如:int、float、字符串、元组、布尔值),实际传递的还是对象的引用,但在“写操作”时,会创建一个新的对象拷贝,这个拷贝使用的是“浅拷贝”,而非“深拷贝”

参数的几种类型

位置参数

函数调用时,实参默认按位置顺序传递,需要个数和形参匹配。按位置传递的参数被称为“位置参数”

默认值参数

为某些参数设置默认值,这些参数在传递时就是可选的(默认值参数放到位置参数后面)

命名参数

按照形参的名称传递参数(也称为“关键字参数”)

可变参数

可变参数指的是“可变数量的参数”

1.*param(一个星号),将多个参数收集到一个“元组”对象中

2.**param(两个星号),将多个参数收集到一个“字典”对象中

强制命名参数

在带星号的“可变参数”后面增加新的参数,必须在调用的时候“强制命名参数”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值