Python小白学习之路(十)—【函数】【函数返回值】【函数参数】
写在前面:
昨天早睡之后,感觉今天已经恢复了百分之八十的样子
又是活力满满的小伙郭
今日份鸡汤:
我始终相信,在这个世界上,一定有另一个自己,在做着我不敢做的事,在过着我想过的生活。-------宫崎骏
函数
一、函数出现的背景
在学习函数之前,一直遵循:面向过程编程,
即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,
开发过程中最常见的操作就是粘贴复制,
也就是将之前实现的代码块复制到现需功能处,如下:
while True:
if cpu利用率 > 90%:
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接 if 硬盘使用空间 > 90%:
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接 if 内存占用 > 80%:
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
但是,学习了函数之后,if条件语句下的内容实质是相同的,可以将其提取出来
进行公用。修改后的程序如下:
def 发送邮件(内容)
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接 while True: if cpu利用率 > 90%:
发送邮件('CPU报警') if 硬盘使用空间 > 90%:
发送邮件('硬盘报警') if 内存占用 > 80%:
发送邮件('内存报警')
对于上述的两种实现方式,第二次必然比第一次的重用性和可读性要好,
第二次称为函数式编程
第一次称为面向过程编程
- 总结使用函数的好处:
- 代码重用
- 保持一致性,易维护
- 可扩展性
二、函数的定义
python中函数定义:函数式逻辑结构化和过程化的一种编程方法
def 函数名(参数): ...
函数体
...
返回值
函数的定义主要有如下要点:
- def:表示函数的关键字
- 函数名:函数的名称,日后根据函数名调用函数
- 参数:为函数体提供数据
- 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
- 返回值:当函数执行完毕后,可以给调用者返回数据。
举例:
def test(x):
"The function definitions"
x+=1
return x
- def:定义函数的关键字
- test:函数名
- ():内可定义形参
- "":文档描述(非必要,但是强烈建议为你的函数添加描述信息)
- x+=1:泛指代码块或程序处理逻辑
- return:定义返回值
以上要点中,比较重要有参数和返回值。
1.返回值:
函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。
过程定义:过程就是简单特殊没有返回值的函数
总结:当一个函数/过程没有使用return显示的定义返回值时,python解释器会隐式的返回None,
所以在python中即便是过程也可以算作函数。
- 总结:
- 返回值数=0:返回None
- 返回值数=1:返回object
- 返回值数>1:返回tuple
2.参数:
举例:
# ######### 定义函数 ######### # name 叫做函数func的形式参数,简称:形参
def func(name):
print name # ######### 执行函数 #########
# 'xhg' 叫做函数func的实际参数,简称:实参
func('xhg')
2.1形参
形参变量只有在被调用时才分配内存单元,
在调用结束时,即刻释放所分配的内存单元。
因此,形参只在函数内部有效。
函数调用结束返回主调用函数后则不能再使用该形参变量
2.2实参
实参可以是常量、变量、表达式、函数等,
无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
因此应预先用赋值,输入等办法使参数获得确定值
2.3位置参数和关键字
#位置参数,必须一一对应,缺一不行,多一也不行
def test(x,y,z): # x = 1;y = 2; z = 3
print(x)
print(y)
print(z) test(1,2,3)
#关键字参数,无需一一对应,缺一不行,多一也不行
def test(x,y,z):
print(x)
print(y)
print(z) test(y=1,z=22,x=3)
#关键字参数和位置参数混合使用时,位置参数必须在关键字参数左边
def test(x,y,z):
print(x)
print(y)
print(z) test(1,y=2,3)#报错
test(1,3,y=2)#报错
test(1,2,z=3)#正确
2.4默认参数
def func(name, age=18):
print("%s:%s" % (name, age)) # 指定参数
func('xhg', 19)
#执行结果
xhg:19 # 使用默认参数
func('alex')
#执行结果
alex:18
2.5参数组
- 非固定长度的参数
- *args 针对位置参数传递
- **kwargs 针对关键字参数传递
- *表传递的数据类型为列表
- **表传递的数据类型为字典
#*args 针对位置参数传递
def func(*args):
print(args)
func(1,2,3,4,'xhg','python')
#*args 针对位置参数传递,实参以列表形式,需要*表明
def func(*args):
print(args)
li = [1,2,3,4,'xhg','python']
func(*li)
#**kwargs 针对关键字参数传递
def func(x,**kwargs):
print(x)
print(kwargs)
func(12, name = 'xhg',age =18)
#**kwargs 针对位置参数传递,实参以字典形式,需要**表明
def func(x,**kwargs):
print(x)
print(kwargs)
s = {'name': 'xhg','age':18}
func(12, **s)
def func(x, *args, **kwargs):
print(x)
print(args)
print(kwargs)
li = [2, 2, 2, 2]
s = {'z': 3, 'v ': 3}
func(1, *li, **s)
#执行结果
1
(2, 2, 2, 2)
{'z': 3, 'v': 3}
def func(x, *args, **kwargs):
print(x)
print(args)
print(kwargs)
func(1, 2, 2, 2, 2, z = 3, v = 3) #执行结果
1
(2, 2, 2, 2)
{'z': 3, 'v': 3}
Python小白学习之路(十)—【函数】【函数返回值】【函数参数】的更多相关文章
- Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数
Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数 内容大纲 1.函数的初识 2.函数的定义 3.函数的调用 4.函数的返回值 5.函数的参数 1.函数初识 # def ...
- Python小白学习之路(十四)—【作用域】【匿名函数】【编程方法论】【高阶函数】
吧啦吧啦内心戏 在没有具体学作用域之前,我在之前的学习笔记中就有提到 我开始以为是自己自创的词儿 没想到这个词早已经存在(手动捂脸) 真是个无知的小火锅(不知者无罪) 我发现自己最擅长做的事情,就是给 ...
- Python小白学习之路(二十四)—【装饰器】
装饰器 一.装饰器的本质 装饰器的本质就是函数,功能就是为其他函数添加附加功能. 利用装饰器给其他函数添加附加功能时的原则: 1.不能修改被修饰函数的源代码 2.不能修改被修饰函数的调用 ...
- Python小白学习之路(二十二)—【生成器】
一.什么是生成器? 生成器可以理解成是一种数据类型,特殊地是生成器可以自动实现迭代器协议其他的数据类型需要调用自己内置的__iter__方法所以换种说法,生成器就是可迭代对象 !回忆:很重要的迭代器协 ...
- Python小白学习之路(十五)—【map()函数】【filter()函数】【reduce()函数】
一.map()函数 map()是 Python 内置的高阶函数 有两个参数,第一个是接收一个函数 f(匿名函数或者自定义函数都OK啦):第二个参数是一个 可迭代对象 功能是通过把函数 f 依次作用在 ...
- Python小白学习之路(十七)—【内置函数二】
序列操作类函数 all() 功能:判断可迭代对象的每个元素是否都为True值注意:If the iterable is empty, return True.(举例3) 回顾:None '' ...
- Python小白学习之路(九)—【字符串格式化】【百分号方式】【format方式】
写在前面: 最近的事情好像有很多.李咏的离去,让我觉得很突然,仿佛印象中就是主持节目的他,看着他和哈文的爱情,很是感动.离去,没有什么抱怨,只是遗憾. 总会感慨,时光的流逝. 好像真的很快,转眼间,我 ...
- Python小白学习之路(二十三)—【生成器补充】
生成器的一些补充 接着下鸡蛋和吃包子! 补充一:生成器只能遍历一次 (总是把生成器比喻成母鸡下鸡蛋,需要一个下一个,首先是下出来的鸡蛋不能塞回母鸡肚子里,其次是一个母鸡一生只能下一定数量的鸡蛋,下完了 ...
- Python小白学习之路(十八)—【内置函数三】
一.对象操作 help() 功能:返回目标对象的帮助信息 举例: print(help(input)) #执行结果 Help on built-in function input in module ...
随机推荐
- 创建DB2数据库联合对象
db2 1.db2 =>update dbm cfg using Federated YES 2. db2 =>db2stop force3. db2 =>db2start 4.创建 ...
- DevExpress VCL 13.1.2 发布
DevExpress VCL 的2013 第一个公开版发布, 基本上就是一些维护,没有大的变化,也没有FM 的支持. What's New in DevExpress VCL 13.1.2 Rel ...
- Exception: java.io.FileNotFoundException: D:\Users\liuyangOS2237\Workspaces\MyEclipse%2010\Zhuce\WebRoot\WEB-INF\classes\users.xml (系统找不到指定的路径。解决
com.exception.DaoException: java.io.FileNotFoundException: D:\Users\liuyangOS2237\Workspaces\MyEclip ...
- Matlab 中以分数显示结果
转http://www.blogbus.com/shijuanfeng-logs/234881647.html Matlab,计算得到的结果一般是小数形式. 但为了更精确表示,我们有时候需要用到分数形 ...
- WPF 嵌入字体文件
官方说明文档:将字体与应用程序一起打包 https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/advanced/packaging-fonts-w ...
- Paper格式-国际会议版
Paper Title 论文题目 Authors Name/s per 1st Affiliation (Author) 作者名字/s 每第一作者 line 1 (of Affiliation): d ...
- (线段树)Balanced Lineup --POJ --3264
链接: 对于POJ老是爆,我也是醉了, 链接等等再发吧! http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82832#problem/G 只 ...
- # 20155204 2016-2017-2 《Java程序设计》第五周学习总结
20155204 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 Java中所有错误都会被打包为对象,运用try.catch,可以在错误发生时显示友好的错误信 ...
- C++中的“error:LNK2005 已经在*.obj中定义”异常问题
C++中的“error:LNK2005 已经在*.obj中定义”异常问题 异常现象如下:
- 老刘 Yii2 源码学习笔记之 Action 类
Action 的概述 InlineAction 就是内联动作,所谓的内联动作就是放到controller 里面的 actionXXX 这种 Action.customAction 就是独立动作,就是直 ...