Python_函数
一、认识函数
print()
round(a, n) :四舍五入保留小数点的n位
help(函数名):查看内置函数的使用方法 (首先在命令行输入 python进入后)
import this:搜索Python之禅
1. 功能性
2. 隐藏细节
3. 避免编写重复的代码
组织代码 自定义函数
二、函数的定义
1. 使用 def 来定义函数
① 参数列表可以没有
② 使用 return value 返回函数值;None(没有return)
③ return :只有return,return之后后面的语句是不会执行的
可以返回任意类型的变量,不需要定义
注:
1. 函数需要先定义,再调用
2. 自定义函数名不要和Python系统内置的函数名或者变量名重复
三、让函数返回多个结果
return的几种用法
1. 返回一个或多个变量时,只需在return后面用都好隔开多个变量,此时默认多个变量组成一个tuple
2. 空值(默认)
3. 只有return,后面不接变量时,函数运行终止,即不运行return后面部分
4. 当return返回多个值时,如何取出每一个值,虽然可以用 damages[0] 这种在序列中索引的方法取出每一个值,但可读性差,且每次提取都要重复代码。
最好是给元祖中的每一个元素赋予有意义的新变量名用于接收,下图
这种方法叫做序列解包!
序列解包
把一个tuple拆开,就叫做序列解包,比如:
d = 1, 2, 3 // 此时 d 是一个 tuple
a, b, c = d // 给a,b,c 赋值,这就叫做序列解包
注!!元素的格式要相等
链式赋值: a = b = c = 1
四、参数
1. 必须参数:
函数参数列表中定义的必须赋值的参数(形参)。必须放在参数列表的前面
形参:
实参:调用函数时,输入的参数
2. 关键字参数:
不用考虑传参的顺序,实现函数的调用。可以在函数调用时明确指出实参是传给哪个形参的
(代码的可读性)
def add ( x, y):
...
return result
c = add ( y = 3, x = 2)
3. 默认参数:
不必每次输入相同的参数
注意!
1. 所有非默认参数必须在所有默认参数钱,不论定义函数还是调用时都是一样
2. 参数顺序要一致,如果顺序不一致,想向某一特定的默认参数传递参数应该使用关键字参数指定要改变的默认参数,否则将根据默认参数顺序依次匹配。
3. 默认参数和关键字参数不能混合调用
4. 可变参数:
① 在参数列表前加一个“ * ” ,python可以自动把可变参数的实参组装成tuple,输出一个元组。
!!!但是就不能这样传:demo((1,2,3,4,5,6)),这样会得到二维元组
* 的作用是把每个元素拿出来平铺输出 (下图)
② 或者不加 * ,那么在调用函数时用tuple类型。
1 = 2 2 = 1各种参数调用的顺序:可变参数可以和其他类型的参数结合起来,注意必须参数必须放在最前面,也可使用关键字参数。
但是函数的参数列表尽量简单,不要有多重参数类型混合。!!!
可变参数可以用 for 循环来进行遍历调用 (下图)
squsum(1,2,3) 等于 squsum(*[1,2,3])
5. 关键字可变参数:
格式:def demo(**param) pass
或 def demo(**param) 调用时 a = (......) demo(**param)
这样在调用时可以传递多个关键字参数,此时python会将其转化为字典类型dict。
遍历字典类型数据的方法:(下图)
for key,value in param.items():
print(key,':',value)
五、变量的作用域
全局变量、局部变量
在函数体内部,局部变量是不分层级的,不能形成块级作用域,可以互相引用。
外部无法使用局部变量。
链式,作用域链:具有链式的特征,具有逐级寻找的过程
注释 c=3 >>> 2
注释 c=2 >>> 1
global 关键字:
在函数内部加上global 关键字,就可以在函数外部访问内部的变量值 >>> 变成全局变量
也可以实现调用模块