函数 function
什么是函数:
函数是可以重复执行的语句块,可以重复使用,可以提高代码的重用性
作用:
定义用户级别的函数
内建函数
max, len, complex .......
函数定义 def 语句 语法
def 函数名(参数列表):
语句块
def 语法说明:
1. 函数名就是语句块的名称
2. 函数的命名规则与变量名相同(函数名必须为标识符)
3. 函数名是一个变量(不要轻易对其赋值)
4.函数有自己的名字空间,要让函数处理外部数据需要用参数给此函数传入一些数据
5.函数不需要传入参数,则参数列表可以为空
6. 语句部分不能为空,如果为空需要填充pass语句
函数调用:
函数名(实际调用传递参数)
# 实际调用传递参数 也叫 实参
函数的调用说明:
函数调用是一个表达式
如果没有return 语句,函数执行完毕后返回None 值对象
如果函数需要返回其它值对象需要用到 return 语句
return 语句
语法:
return [表达式]
注:[] 代表内容可以省略
作用:
只能用在函数内部,用于结束当前函数的执行,返回到调用此函数的地方,同时返回一个值对象的引用关系
说明:
1. return 语句后跟的表达式可以省略,省略后等同于 return None
2. 如果函数内没有return 语句,则函数执行完最后一条语句后返回None(相当于在最后加了一条return None)
3. 函数调用只能返回一个对象的引用
函数的参数传递:
位置传参
实际参数(实参) 的对应关系与形式参数的对应关系是以位置来依次对应的。
示意:
def mymin(a, b, c):
pass
# ^ ^ ^
mymin( 1, 2, 3) #
说明:
实际参数的个数必须与形式参数的个数完全相同
序列传参:
序列的元素个数必须与形式参数个数相同
示例:
defmyfun1(a, b, c):
"这是一个函数参数的示例:"
print("a 的值是:",a)
print("b 的值是:",b)
print("c 的值是:",c)
s1= [11, 22, 33]
s2= (44, 55, 66)
s3= "ABC"
myfun1(s1[0],s1[1], s1[2])
myfun1(*s1)
myfun1(*s2)
myfun1(*s3)
myfun1(*"XYZ")
序列传参说明:
序列的位置信息对应相应的参数位置
关键字传参:
是指传参时,按着形参的名称给形参赋值
实参和形参按名称进行匹配
说明:
实参可以不按照位置给定
示例:
myfun1(b=22, c=33, a=11) # a->11, b->22, c->33
字典关键字传参:
通过字典进行匹配,字典的值传递给键对应的形式参数
例:
d1={"c": 33, "b": 22,"a": 11}
myfun1(**d1) 11->a 22->b 33->c
说明:
字典的键名和形参名必须一致
字典的键名必须为字符串
字典的键名要在形参中存在
总结:
传参方式有如下几种 :
1. 位置传参
2. 序列传参 *序列
3. 关键字传参
4. 字典关键字传参 **字典
可变/不可变类型的实参的参数传递的区别
可变的类型有:
list, dict, set, bytearray(后面要学)
传参说明:
1. 不可变类型的数据作为函数参数传入时,函数内部不会改变变量的原数据的值,是安全的
2. 可变类型的数据作为函数参数传入时,函数内部可以改变原数据,多用于返回更多函数执行的结果
示例:
# 写一个函数,在函数内部读取输入,把所有的奇数放在列表odd中,把所有的偶数放入列表even中
def read_number(o, e):
while True:
x = int(input("请输入一个数:"))
if x < 0:
break
if x % 2 == 1:
o.append(x)
else:
e.append(x)
odd = [] # 奇数列表:
even = [] # 偶数列表
read_number(odd, even)
print(odd)
print(even)
函数的综合传参:
函数的传参方式,在能确定形参能唯一匹配到相应实参的情况下可以任意组合
示例:
def myfun1(a, b, c):
print("a =", a)
print("b =", b)
print("c =", c)
myfun1(1, 2, 3)
myfun1(1, c=3,b=2)
myfun1(*[100, 200], 300)