第五关
学习用时:30min
随堂测验+上机作业:25min
随堂作业正确率:7/7
1.函数的定义、组成
1.定义:函数是一段组织好的、可重复使用的、用来实现特定功能的代码快。
python内置函数len()举例
print(len('生如夏花之灿烂'))
# 输出结果:7
2.函数的组成:
1.告诉计算机,要定义一个函数;
2.函数的名字是什么;
3.这个函数需要输入什么参数;
4.参数的处理过程是什么样的;
5.把什么样的处理结果还给输入者。
# def是函数定义的关键字(define 的缩写,意为“定义”),f 是我们取的函数名。
#函数名后有一对英文括号,括号里面是我们设定的参数(也就是我们之前说的输入),最后用一个英文冒号结尾。
# 冒号后有缩进的代码块,这部分叫函数体,这部分就是函数功能实现和输出返回值的地方。
# 最后一行的 return 用于返回函数处理的结果,return 后面的值称为函数的返回值。
def f(x):
y = 2 * x + 1
return y
# 下一行代码调用 f 函数,并赋值给变量 result
result = f(3)
print(result)
# 输出:7
# 也可以将后两行简写为
print(f(3))
注意:函数代码块快的缩进问题。
3.函数的执行顺序
函数的内部,return 语句一旦执行之后,剩下的语句将不再执行。
# 例1 这样的情况下 将不会有任何打印结果,因为return y 后,函数将不在执行
def f(x):
y = 2 * x + 1
return y
print(y)
f(3)
#---------------------------------------------------------------------------------------
# 例2 下面这种情况下没有return依旧打印出结果,但缺点是结果打印完之后就没有了,无法将结果进行有效的利用,相当于“阅后即焚”
def f(x):
y = 2 * x + 1
print(y)
f(3)
# 输出:7
#---------------------------------------------------------------------------------------
# 例3 强行获取函数结果
def f(x):
y = 2 * x + 1
print(y)
# 用 result 变量获取结果
result = f(3)
# 打印结果为 7 ,但是返回结果为 None,赋值给 result
print(result + 1)
# 报错: TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
# (类型错误,不支持 None 和整数的相加)
上面例3中,print(result + 1) 并不能让我们获得 8 这个目标值,因为函数内部没有 return 语句,y = 7 打印后就销毁了,然后函数暗搓搓地为你返回了 None ,并赋值给 result。
2.函数中的参数
对于函数的参数:形参和实参。
形参是形式上的参数(上面的x)的缩写,表明这里有一个叫x的参数,实参是实际上的参数(上面的3)的缩写,实参传给函数后x被赋值为3。
Python 函数的命名规范:函数名应该为小写,可用下划线连接多个英文单词,比如在习题中用 calc_age 的函数名来编写年龄计算器。函数名要有一定的描述性,避免使用 a、b、c 这样过于简单的英文字母。
# 练习1
# 定义一个名为 calc_age 的函数
# calc_age() 函数的输入为出生年份,输出为年龄
# 在屏幕上输出 calc_age() 函数的返回值
def calc_age(birth_yrear):
age = 2020 - birth_yrear
return age
x = int(input("请输入出生年份"))
print (calc_age(x))
这里面我又犯了一个错误就是python函数的命名不符合规范,里面的
3.函数的作用
DRY 原则 = Don’t repeat yourself = 不要重复自己
如果多次遇到同样的问题,就应该抽象出一个共同的解决方法,尽量避免写重复的代码。
另外:函数的参数和返回值都不是必选项,是可以没有的。
下面的函数既没有参数,也没有返回值:
def say_hello(name):
greetings = '你好啊~'
print(greetings + name)
# 不用再 print 了,因为函数里用了 print 函数
say_hello('鸽子')
# 输出:你好啊~鸽子
# 练习 2 将这首诗打印5遍~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def print_poetry():
print('----------------')
print('我打江南走过')
print('那等在季节里的容颜如莲花的开落')
print('春风不来,三月的柳絮不飞')
print('你的心如小小的寂寞的城')
print('恰若青石的街道向晚')
print('跫音不响,三月的春帷不揭')
print('你的心是小小的窗扉紧掩')
print('我达达的马蹄是美丽的错误')
print('我不是归人,是个过客……')
print_poetry()
print_poetry()
# 其他地方找的python中一个函数多次调用
for i in range(1,4):
print_poetry()
写函数的注意点
1.定义函数时,要遵循语法规则,给函数和参数的命名要有可读性;
2.注意缩进规则,函数体中是实现函数功能的代码,前面一定要有统一的空格缩进;
3.我们用 函数名() 的形式调用函数,执行函数体中的代码,用关键字 return 返回函数的结果;
4.函数体中也可以没有 return,系统会默认 return None。
5.函数内部如果有 print(),只负责显示结果,不能将结果保留或者传给其它变量。
4.随堂练习
计算多边形内角和的函数。 三角形内角和为 180°、四边形内角和为 360°
五边形内角和为 540°
# 输入内角和的边数
n = int(input("请输入所求内角和的边数:"))
# 定义求内角和的函数x为形参,新知识点是形参和实参可以是一个名字
def calc_degree(x):
calc = (x - 2) * 180
return calc
# 打印结果
print(str(n) + "边形内角和为" + str(calc_degree(n)))
5.学习巩固
定义一个名为 calc_profit 的函数;
该函数有一个参数,为当天卖出的奶茶数量;
函数的返回值为奶茶店当天的净利润(不需要单位);
通过 input() 函数获取当天卖出的奶茶数量;
调用函数并打印出奶茶店当天的净利润。
再定义一个名为 calc_perf 的函数;
该函数有一个参数,为当天的净利润(calc_profit() 函数的返回值);
该函数功能为:当净利润大于 2000 时打印 合格,否则打印 不合格;
使用 input() 函数获取当天卖出的奶茶数量;
调用函数并打印出奶茶店当天是否合格。
def calc_profit(n): #n为每日饮料销量形参
princ = 25 #饮料价格
cost = 9 #饮料成本
jingli = princ - cost #饮料净利润
chengben = 500 #每日成本
money = jingli * n - chengben #每日利润计算
return money
def calc_perf(money):
if money > 2000: #每日纯利润业绩>2000合格 否则不合格
print("合格")
else:
print("不合格")
# 输入每天销售额
number = int(input("今天你卖了多少杯奶茶啊?"))
print(calc_profit(number)) #每日纯利润
calc_perf(calc_profit(number)) #每日业绩是否合格