什么是函数:
函数是可以重复执行的语句块,可以重复使用,提高代码的重用性。
函数语法:
def 函数名(参数列表):
语句块
def语法说明:
1.函数名就是语句块的名称。
2.函数的命名规则与变量相同
3.函数名是一个变量
4.函数有自己的命名空间,要让函数处理外部数据需要用参数给此函数传入一些数据。
5.函数不需要传入参数,则参数列表可以为空
6.语句部分不能为空,如果为空需要填充pass语句
def say_hello():
print("hello world!")
函数调用:
函数名(实际调用传递参数)
函数的调用说明:
函数调用是一个表达式
没有return语句,函数执行完毕后返回None
函数如果需要返回其他值对象需要用到return语句
def mymax(a, b):
if a > b:
print("a 比 b 大!")
return a
else:
print(" a 小于等于 b")
return b
mymax(100, 101)
return 语句
语法:
return [表达式]
作用:只能在函数内部,用于结束当前函数的执行,返回到调用此函数的地方,同时返回一个值对象的引用关系
说明:
1.return语句后跟的表达式可以省略,省略相当于 return None
2.如果函数内没有return语句,则函数执行完最后一条语句后返回None(相当于在最后加了一条return None)
3.函数调用只能返回一个对象引用
def myadd(x, y):
s = x + y
return s
a = int(input("请输入第一个数:")) # 100
b = int(input("请输入第二个数:")) # 200
print("您输入的两个数的和为:", myadd(a, b))
函数的参数传递:
位置传参
实际参数的对应关系与形式参数的对应关系是以位置来依次对应的。
def myfun1(a, b, c):
print("a 的值是:", a)
print("b 的值是:", b)
print("c 的值是:", c)
# 位置传参
myfun1(1, 2, 3) # 实际参数的个数必须与形式参数的个数完全相同
序列传参:
序列的元素个数必须与参数个数相同
def myfun1(a, b, c):
"这是一个函数参数的示例:"
print("a 的值是:", a)
print("b 的值是:", b)
print("c 的值是:", c)
s1 = [11, 22, 33]
s2 = (44, 55, 66)
s3 = "ABC"
myfun1(*s1)
myfun1(*s2)
myfun1(*s3)
myfun1(*"XYZ")
# 序列的位置信息对应相应的参数位置
关键字传参:
是指传参时,按着形参的名称给形参赋值 ,实参和形参名称进行匹配
说明:实参可以不按位置给定
def myfun1(a, b, c):
"这是一个函数参数的示例:"
print("a 的值是:", a)
print("b 的值是:", b)
print("c 的值是:", c)
myfun1(b=22, c=33, a=11) # a->11, b->22, c->33
字典关键字传参:
通过字典进行匹配,字典的值传递给键对应的形式参数
def myfun1(a, b, c):
"这是一个函数参数的示例:"
print("a 的值是:", a)
print("b 的值是:", b)
print("c 的值是:", c)
d1={"c": 33, "b": 22, "a": 11}
myfun1(**d1) # 11->a 22->b 33->c
说明:
1.字典的键名和形参名必须一致
2.字典的键名必须为字符串
3.字典的键名要在形参中存在
可变/不可变类型的实参的参数传递的区别
传参说明:
1.不可变类型的数据作为函数参数传入时,函数内部不会改变变量的原数据的值,是安全的
2.可变类型的数据作为函数传入时,函数内部可以改变原数据,多用于返回更多函数执行的结果
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)