1.函数
1.1 函数概述
- 函数定义和优势
- 不同形状正方形打印
# 2个
for i in range(0, 2):
for j in range(0, 2):
print("*", end="")
print()
# 3个
for i in range(0, 3):
for j in range(0, 3):
print("*", end="")
print()
# 4个
for i in range(0, 4):
for j in range(0, 4):
print("*", end="")
print()
- 改写后:
# 定义函数,函数名称为print_xx
def print_xx(x):
for i in range(0, x):
for j in range(0, x):
print("*", end="")
print("")
# 函数调用
print_xx(2)
print_xx(3)
print_xx(4)
- 优点有哪些?
1.2 函数定义和调用
函数定义
函数调用
- 格式:函数名([参数列表])
- 调用过程:
- 程序在调用函数的位置暂停执行。
- 将数据传递给函数参数。
- 执行函数体中的语句。
- 程序回到暂停处继续执行。
作业1:改写
- 改写平均数成def
- 改写闰年判断
# 平均数字
def avg_input(x, y, z):
sum = x + y + z
avg = sum / 3
print("avg = ", avg)
# 判断闰年
def judge_rn(year=2008):
# 1能被400整除
if year % 400 == 0:
print(f"{year}是闰年")
# 2能被4整除但不能被100整除
elif year % 4 == 0 and year % 100 != 0:
print(f"{year}是闰年")
else:
print(f"{year}不是闰年")
#函数调用
# 1 求平均值
a = eval(input("a="))
b = eval(input("b="))
c = eval(input("c="))
avg_input(a, b, c)
# 2 判断闰年
judge_rn(2012)
1.3 参数传递
- 形参:定义函数时的参数
- 实参:调用函数时使用的参数
- 参数传递:实参——>形参
位置参数传递:
- 概念:第一个实参传递给第一个形参,将第二个实参传递给第二个形参
关键字参数传递:
- 概念:“形参=实参”形式
默认参数传递:
- 默认参数:指的是形参的默认值
参数的打包与解包
打包
-
函数在定义时无法确定需要接收多少个数据,那么可以在定义函数时为形参添加“”或“**”:
-
*—— 接收以元组形式打包的多个值
-
#定义 def test(*args): print(args) #调用 test(11, 22, 33, 44, 55) #结果 #(11, 22, 33, 44, 55)
-
**—— 接收以字典形式打包的多个值
-
#定义 def test(**kwargs): print(kwargs) #调用 test(a=11, b=22, c=33, d=44, e=55) #结果 #{'a': 11, 'b': 22, 'c': 33, 'd': 44, 'e': 55}
-
解包
-
实参是元组 → 可以使用“*”拆分成多个值 → 按位置参数传给形参
-
形参已经知道有多少个参数
-
#定义 def test(a, b, c, d, e): print(a, b, c, d, e) #调用 nums = (11, 22, 33, 44, 55) test(*nums) #结果 #{'a': 11, 'b': 22, 'c': 311 22 33 44 553, 'd': 44, 'e': 55}
-
-
实参是字典 → 可以使用“**” 拆分成多个键值对 → 按关键字参数传给形参
作业2:
# 平均数:计算n个参数的平均值
# n个数字的平均值函数,*args代表元组
def avg_input(*args):
sum = 0
for i in args:
sum += i
avg = sum / len(args)
print("avg = ", avg)
# 调用
avg_input(1, 1, 1, 1, 1)
avg_input(1, 2, 3, 4, 5)
avg_input(4, 5)
作业3:
# 从键盘一直获取数字,当输入0000退出,
# 计算之前获取的值的平均值
# 定义函数,计算平均值
def avg_input(mylist):
sum = 0
for i in mylist:
sum += i
avg = sum / len(mylist)
print(f"平均值是:{avg}")
# 获取n个数字
list_nums = []
while (True):
x = eval(input("请输入数字:"))
if x == 0000:
break
else:
list_nums.append(x)
# 调用
avg_input(list_nums)
混合传递
-
优先级:
- 优先按位置参数传递的方式。
- 然后按关键字参数传递的方式。
- 之后按默认参数传递的方式。
- 最后按打包传递的方式。
-
注意事项
在定义函数时: 带有默认值的参数必须位于普通参数之后。 带有“*”标识的参数必须位于带有默认值的参数之后。 带有“**”标识的参数必须位于带有“*”标识的参数之后
作业4:
1.4 函数的返回值
- return函数:
1.5 变量作用域
1.6 实训案例
- 角谷猜想
- 饮品自动售货机