函数设计与案例

一. 函数的定义与调用

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

打印如下

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. 字节跳动Web Infra发起 Modern.js 开源项目,打造现代 Web 工程体系

    10 月 27 日举办的稀土开发者大会上,字节跳动 Web Infra 正式发起 Modern.js 开源项目,希望推动现代 Web 开发范式的普及,发展完整的现代 Web 工程体系,突破应用开发效率 ...

  2. python21day

    内容回顾 re模块的常用方法 findall(正则,待匹配字符串,flag):返回所有匹配项的列表 search:返回一个变量,通过group取到第一个匹配项 match:从头开始找第一个,其他同se ...

  3. Redis内存满了怎么办(新年快乐)

    Redis内存满了怎么办(新年快乐) 入我相思门,知我相思苦. 长相思兮长相忆,短相思兮无穷极. 一.配置文件 Redis长期使用或者不设置过期时间,导致内存爆满或不足,可以到Redis的配置文件re ...

  4. python pyautogui

    使用pyautogui随机调用图库里的一张照片设置为壁纸,每天定时执行 代码 import time import pyautogui import random pyautogui.keyDown( ...

  5. Git使用教程(超全,看一篇就够了)

    目录 Git介绍 Git安装 Git使用 问题与解决 推荐学习网址 Git介绍 Git是什么? Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别? SVN是集中式版本控制系 ...

  6. ForkJoinPool简单使用

    简介 ForkJoinPool的优势在于,可以充分利用多cpu,多核cpu的优势,把一个任务拆分成多个"小任务",把多个"小任务"放到多个处理器核心上并行执行, ...

  7. 懒加载--初步理解. by:王朋

    懒加载(LazyLoad),又称为延迟加载. 举个例子,当我们在用网易新闻App时,看着那么多的新闻,并不是所有的都是我们感兴趣的,有的时候我们只是很快的滑过,想要快速的略过不喜欢的内容,但是只要滑动 ...

  8. FileInputStream 类与 FileReader 类的区别

    FileInputStream 类与 FileReader 类的区别: 两个类的构造函数的形式和参数都是相同的,参数为 File 对象或者表示路径的 String ,它们到底有何区别呢? FileIn ...

  9. 有手就行5——jenkins项目构建类型(pipeline流水线项目构建推荐)

    有手就行5--jenkins项目构建类型(pipeline流水线项目构建推荐) Pipeline简介 1) 概念 Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立 ...

  10. Node.js躬行记(15)——活动规则引擎

    在日常的业务开发中,会包含许多的业务规则,一般就是用if-else硬编码的方式实现,这样就会增加逻辑的维护成本,若无注释,可能都无法理解规则意图. 因为一旦规则有所改变,那么就需要修改代码再发布代码, ...