函数设计与案例

一. 函数的定义与调用

如果在开发程序时,需要多次使用某块代码,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小块,这就是函数

打印如下

print('人生苦短,我用Python')
print('多情自古伤离别,更那堪冷落清秋节')
print('天若有情天亦老,人间正道是沧桑')

函数的写法及其调用

def 函数名([参数列表]):
代码 # 比如
def print_info():
print('人生苦短,我用Python')
print('多情自古伤离别,更那堪冷落清秋节')
print('天若有情天亦老,人间正道是沧桑')
print_info()    # 调用相当于电视机开关 有开关才能打开电视看电视, 不开就是一个空盒子
# print_info()
# print_info()
# print_info()
# print_info()
# print_info()
# print_info() # 可以更简练
for i in range(7):
print_info()

定义函数名注意事项 :

  • 见名知意
  • 不能和内置函数命名一样(print,input,max ,min , len )
  • 使用下划线或者驼峰式命名

1.1 函数的实际小案例

需求:用户到ATM机取钱:

  1. 输入密码后显示"选择功能"界面
  2. 查询余额后显示"选择功能"界面
  3. 取2000钱后显示"选择功能"界面

特点:显示“选择功能”界面需要重复输出给用户,怎么实现?

  1. 搭建整体框架(复现需求)
print('密码正确登录成功')

print('-----请选择功能-----')
print('查询余额')
print('存款')
print('取款')
print('-----请选择功能-----') print('查询余额完毕') print('-----请选择功能-----')
print('查询余额')
print('存款')
print('取款')
print('-----请选择功能-----') print('取了2000元钱') print('-----请选择功能-----')
print('查询余额')
print('存款')
print('取款')
print('-----请选择功能-----')
  1. 封装"选择功能"(编写函数)
# 封装ATM机功能选项 -- 定义函数
def select_func():
print('-----请选择功能-----')
print('查询余额')
print('存款')
print('取款')
print('-----请选择功能-----')
  1. 调用函数
print('密码正确登录成功')
# 显示"选择功能"界面 -- 调用函数
select_func() print('查询余额完毕')
# 显示"选择功能"界面 -- 调用函数
select_func() print('取了2000元钱')
# 显示"选择功能"界面 -- 调用函数
select_func()

二. 函数的参数及类型

思考:完成需求如下:一个函数完成两个数1和2的加法运算,如何书写程序?

def add_num():
result = 1 + 2
print(result)

思考 : 那如果完成1加上4的加法运算是不是还得重新写一个函数来进行调用??

这样就显得 不是那么灵活与方便,如果想要这个函数变得更灵活,可以计算任何用户指定的两个数字的和,如何书写程序?

分析:用户要在调用函数的时候指定具体数字,那么在定义函数的时候就需要接收用户指定的数字。函数调用时候指定的数字和定义函数时候接收的数字即是函数的参数。

# 定义函数时同时定义了接收用户数据的参数a和b,a和b是形参
def add_num2(a, b):
result = a + b
print(result) # 调用函数时传入了真实的数据10 和 20,真实数据为实参
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) #1,1,1
func(1,1,5) #1,1,5

2.2 关键参数

# 定义有三个参数的函数(a1/a2/a3一般称为形式参数-形参)
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():  # return 后面的返回值 谁调用 就给谁
print('我付完钱了, 百威给我吧')
return '百威' # 使用变量保存函数返回值
goods = buy()
print(goods) # 注意 : 是谁买的 ? 也就是谁调用的函数 ,就会把返回值给谁

return返回值的注意事项

返回值可以是任意类型,如果函数中没写return,则默认返回None,当在函数中未写返回值returnreturn None ,执行函数获取的返回值都是None。

def func():
return [1,True,(11,22,33)] result = func()
print(result) def func():
value = 1 + 1 ret = func()
print(ret) # None def func():
value = 1 + 1
return # 或 return None ret = func()
print(ret) # None

return后面的值如果有逗号,则默认会将返回值转换成元组再返回。

def func():
return 1,2,3 value = func()
print(value) # (1,2,3)

函数一旦遇到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 # break和return的区别 # 猜数 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))
#6 #含有默认参数
g=lamdbax,y=2,z=3:x+y+z
>>>print(g(1))
#6 #包含函数调用
def demo(n):
return n*n
>>>demo(5)
#25 alist=[1,2,3,4,5]
>>>map(lambda x:demo(x),alist)
[1,4,9,16,25] #map() 会根据提供的函数对指定序列做映射。
#第一个参数 function 以参数序列中的每一个元素调用 function 函 #数,返回包含每次 function 函数返回值的新列表。
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) # 6 # 求三个数的平均值 def average_num(a, b, c):
sumResult = sum_num(a, b, c)
return sumResult / 3 result = average_num(1, 2, 3)
print(result) # 2.0

Python——函数设计与案例的更多相关文章

  1. [Python学习笔记][第五章Python函数设计与使用]

    2016/1/29学习内容 第四章 Python函数设计与使用 之前的几页忘记保存了 很伤心 变量作用域 -一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值结果反映到函数之外,可 ...

  2. len(x) 击败 x.len(),从内置函数看 Python 的设计思想

    内置函数是 Python 的一大特色,用极简的语法实现很多常用的操作. 它们预先定义在内置命名空间中,开箱即用,所见即所得.Python 被公认是一种新手友好型的语言,这种说法能够成立,内置函数在其中 ...

  3. Python函数的默认参数的设计【原创】

    在Python教程里,针对默认参数,给了一个“重要警告”的例子: def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print( ...

  4. python程序设计——函数设计与调用

    一.函数定义与调用 def 函数名([参数列表]): '''注释''' 函数体 # 输出小于n的斐波那契数 >>def fib(n): a,b=1,1 while a < n: pr ...

  5. python函数小案例

    python函数 目录 python函数 1.写一个函数求三个数的和,并返回结果 2.写一个函数,求平均值,并返回结果 写一个函数,求每个数与平均值之间的差,并放回结果 1.写一个函数求三个数的和,并 ...

  6. Python函数参数默认值的陷阱和原理深究"

    本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...

  7. Python入门笔记(18):Python函数(1):基础部分

    一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...

  8. jquery ajax 总是还未等到success回调就刷掉了,就进入了onError函数的错误案例分析

    jquery ajax 总是还未等到success回调就刷掉了,就进入了onError函数的错误案例分析: 同样的请求同时请求了2次,然后第二次的请求把第一次的给刷掉了! (比如:<div on ...

  9. Python学习教程(learning Python)--2.3.3 Python函数型参详解

    本节讨论Python下函数型参的预设值问题. Python在设计函数时,可以给型参预设缺省值,当用户调用函数时可以不输入实参.如果用户不想使用缺省预设值则需要给型参一一赋值,可以给某些型参赋值或不按型 ...

随机推荐

  1. UVA1619 感觉不错 Feel Good(良好的感觉) 题解

    0.题面: 给出正整数n和一个(1 <= n <= 100 000)长度的数列,要求找出一个子区间,使这个子区间的数字和乘上子区间中的最小值最大.输出这个最大值与区间的两个端点. 1.思路 ...

  2. 使用Xamarin开发移动应用示例——数独游戏(六)使用数据库

    项目代码可以从Github下载:https://github.com/zhenl/ZL.Shudu .代码随项目进度更新. 现在我们希望为应用增加更多的功能,比如记录每个完成的游戏,可以让用户自己添加 ...

  3. 寻找写代码感觉(十六)之 集成Validation做参数校验

    写在前面 今天是大年初五了... 不知不觉,又要上班了,美好的假期只剩一天了,有点不舍呢! 也不知道为什么,总感觉像在做梦一样,像没睡醒一样,并不是因为眼睛小,更多应该是自寻烦恼,想得多罢了. 参数校 ...

  4. 多源最短路-Floyd

    题目描述 时间限制:5.0s 内存限制:256.0MB 问题描述 给定\(n\)个结点两两之间的单向边的长度,求两两之间的最短路径. 输入格式 输入第一行包含一个整数\(n\),表示点数. 接下来\( ...

  5. 鸿蒙轻内核源码分析:文件系统LittleFS

    摘要:本文先介绍下LFS文件系统结构体的结构体和全局变量,然后分析下LFS文件操作接口. 本文分享自华为云社区<# 鸿蒙轻内核M核源码分析系列二一 02 文件系统LittleFS>,作者: ...

  6. Redis 分布式锁使用不当,酿成一个重大事故,超卖了100瓶飞天茅台!!!(转)

    基于Redis使用分布式锁在当今已经不是什么新鲜事了. 本篇文章主要是基于我们实际项目中因为redis分布式锁造成的事故分析及解决方案.我们项目中的抢购订单采用的是分布式锁来解决的,有一次,运营做了一 ...

  7. 截取一段时间内的log日志

    可以使用sed命令对log文件进行抽取操作:1,sed查看某时间段到现在的系统日志:sed -n '/May 20 17/,$p' /var/log/messages | less2,sed 截选时间 ...

  8. Android 如何让EditText不自动获取焦点&隐藏软键盘

    感谢大佬:https://blog.csdn.net/a18615971648/article/details/72869345 有时候的项目当中进入某个页面edittext会自动获取焦点弹出软键盘, ...

  9. Embedded Python应用小结

    转载请注明来源:https://www.cnblogs.com/hookjc/ (1)初始化Python脚本运行环境 Py_Initialize(); (2) 脚本的编译 bytecode = Py_ ...

  10. Shell之sed编辑器

    Shell之sed编辑器 目录 Shell之sed编辑器 一.sed编辑器 1. sed编辑器概述 2. sed编辑器的工作流程 二.sed命令 1. 命令格式 2. 常用选项 3. 常用操作 三.操 ...