函数设计与案例
一. 函数的定义与调用
如果在开发程序时,需要多次使用某块代码,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小块,这就是函数
打印如下
print('人生苦短,我用Python')
print('多情自古伤离别,更那堪冷落清秋节')
print('天若有情天亦老,人间正道是沧桑')
函数的写法及其调用
def 函数名([参数列表]):
代码
def print_info():
print('人生苦短,我用Python')
print('多情自古伤离别,更那堪冷落清秋节')
print('天若有情天亦老,人间正道是沧桑')
print_info()
for i in range(7):
print_info()
定义函数名注意事项 :
- 见名知意
- 不能和内置函数命名一样(print,input,max ,min , len )
- 使用下划线或者驼峰式命名
1.1 函数的实际小案例
需求:用户到ATM机取钱:
- 输入密码后显示"选择功能"界面
- 查询余额后显示"选择功能"界面
- 取2000钱后显示"选择功能"界面
特点:显示“选择功能”界面需要重复输出给用户,怎么实现?
- 搭建整体框架(复现需求)
print('密码正确登录成功')
print('-----请选择功能-----')
print('查询余额')
print('存款')
print('取款')
print('-----请选择功能-----')
print('查询余额完毕')
print('-----请选择功能-----')
print('查询余额')
print('存款')
print('取款')
print('-----请选择功能-----')
print('取了2000元钱')
print('-----请选择功能-----')
print('查询余额')
print('存款')
print('取款')
print('-----请选择功能-----')
- 封装"选择功能"(编写函数)
def select_func():
print('-----请选择功能-----')
print('查询余额')
print('存款')
print('取款')
print('-----请选择功能-----')
- 调用函数
print('密码正确登录成功')
select_func()
print('查询余额完毕')
select_func()
print('取了2000元钱')
select_func()
二. 函数的参数及类型
思考:完成需求如下:一个函数完成两个数1和2的加法运算,如何书写程序?
def add_num():
result = 1 + 2
print(result)
思考 : 那如果完成1加上4的加法运算是不是还得重新写一个函数来进行调用??
这样就显得 不是那么灵活与方便,如果想要这个函数变得更灵活,可以计算任何用户指定的两个数字的和,如何书写程序?
分析:用户要在调用函数的时候指定具体数字,那么在定义函数的时候就需要接收用户指定的数字。函数调用时候指定的数字和定义函数时候接收的数字即是函数的参数。
def add_num2(a, b):
result = a + b
print(result)
add_num2(10, 20)
def func():
for i in range(3):
print(i)
def func(x):
for i in range(x):
print(i)
2.1 默认值参数
在定义函数时为形参设置默认值,调用带有默认值参数的函数时,可以不对默认值参数进行赋值
def func(a1, a2, a3=1):
print(a1,a2,a3)
func(1,1)
func(1,1,5)
2.2 关键参数
def func(a1, a2, a3):
print(a1 , a2 , a3)
func(a1=99, a2=88, a3=1)
func(a1=99, a3=1, a2=88)
2.3 可变长度参数
顾名思义,就参数长度与你传递的长度有关,是可变的
*parameter
def demo(*p):
print(p)
demo(1,2,3,4)
(1,2,3)
demo(1,2,3,4,5,6,7)
(1,2,3,4,5,6,7)
**parameter
def demo(**p):
for item in p.items():
print(item)
demo(x=1,y=2,z=3)
('y':2)
('x':1)
('z':3)
三. 函数的返回值
例如:我们去超市购物,比如买百威,给钱之后,是不是售货员会返回给我们百威这个商品,在函数中,如果需要返回结果给用户需要使用函数返回值。
def shop_beer():
print('我付完钱了, 百威给我吧')
return '百威'
goods = buy()
print(goods)
return返回值的注意事项
返回值可以是任意类型,如果函数中没写return,则默认返回None,当在函数中未写返回值 或 return 或 return None ,执行函数获取的返回值都是None。
def func():
return [1,True,(11,22,33)]
result = func()
print(result)
def func():
value = 1 + 1
ret = func()
print(ret)
def func():
value = 1 + 1
return
ret = func()
print(ret)
return后面的值如果有逗号,则默认会将返回值转换成元组再返回。
def func():
return 1,2,3
value = func()
print(value)
函数一旦遇到return就会立即退出函数(即终止函数中的所有代码)
def func():
print(1)
return "结束吧"
print(2)
ret = func()
print(ret)
def func():
print(1)
for i in range(10):
print(i)
return 999
print(2)
result = func()
print(result)
1
0
999
def func():
print(1)
for i in range(10):
print(i)
for j in range(100):
print(j)
return
print(2)
result = func()
print(result)
1
0
0
None
def foo():
while True:
num = input('请输入数字(Q代表退出): ')
if num == "Q":
break
num = int(num)
if num == 99:
print('bingo')
print('game ,over')
return
else:
print('请继续>>>>')
print('跳出循环,,但是没有跳出函数')
print('这是函数体的内容')
foo()
print('通过return,已经结束了foo函数的运行了')
四. 函数的注释
在定义函数时,开头的注释并不是必要的,但为函数加上注释后,在调用函数时,输入圆括号之后,就可以得到函数的使用说明
def add_num(a,b):
'''
两个数相加的操作程序求和函数
:param a: 是一个整型,或者浮点数
:param b:是一个整型,或者浮点数
:return: 返回两个数的和
'''
return a + b
add_num(2,5)
五. 函数的嵌套调用
def t_B():
print('---- testB start----')
print('这里是testB函数执行的代码...(省略)...')
print('---- testB end----')
def t_A():
print('---- testA start----')
t_B()
print('---- testA end----')
t_A()
六. lamdba表达式
lamdba表达式用来声明匿名函数。lamdba表达式只可以包含一个表达式,不允许其他复杂的语句,但在表达式中可以调用其他函数,且支持默认值参数和关键参数,该表达式的计算结果就是函数的返回值。
f=lamdba x,y,z:x+y+z
>>>print(f(1,2,3))
g=lamdbax,y=2,z=3:x+y+z
>>>print(g(1))
def demo(n):
return n*n
>>>demo(5)
alist=[1,2,3,4,5]
>>>map(lambda x:demo(x),alist)
[1,4,9,16,25]
def square(x) :
return x ** 2
>>>map(square, [1,2,3,4,5])
[1, 4, 9, 16, 25]
七. 小栗子
打印横线
def print_line():
return '-'*20
def print_lines(num):
for i in range(num):
res = print_line()
print(res)
print_lines(5)
求三个数的和
def sum_num(a, b, c):
return a + b + c
result = sum_num(1, 2, 3)
print(result)
def average_num(a, b, c):
sumResult = sum_num(a, b, c)
return sumResult / 3
result = average_num(1, 2, 3)
print(result)
|