写在前面:

昨天早睡之后,感觉今天已经恢复了百分之八十的样子

又是活力满满的小伙郭

今日份鸡汤:

我始终相信,在这个世界上,一定有另一个自己,在做着我不敢做的事,在过着我想过的生活。-------宫崎骏

函数

一、函数出现的背景

在学习函数之前,一直遵循:面向过程编程,
即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,
开发过程中最常见的操作就是粘贴复制,
也就是将之前实现的代码块复制到现需功能处,如下:

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小白学习之路(十)—【函数】【函数返回值】【函数参数】的更多相关文章

  1. Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数

    Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数 内容大纲 1.函数的初识 2.函数的定义 3.函数的调用 4.函数的返回值 5.函数的参数 1.函数初识 # def ...

  2. Python小白学习之路(十四)—【作用域】【匿名函数】【编程方法论】【高阶函数】

    吧啦吧啦内心戏 在没有具体学作用域之前,我在之前的学习笔记中就有提到 我开始以为是自己自创的词儿 没想到这个词早已经存在(手动捂脸) 真是个无知的小火锅(不知者无罪) 我发现自己最擅长做的事情,就是给 ...

  3. Python小白学习之路(二十四)—【装饰器】

    装饰器 一.装饰器的本质 装饰器的本质就是函数,功能就是为其他函数添加附加功能. 利用装饰器给其他函数添加附加功能时的原则: 1.不能修改被修饰函数的源代码        2.不能修改被修饰函数的调用 ...

  4. Python小白学习之路(二十二)—【生成器】

    一.什么是生成器? 生成器可以理解成是一种数据类型,特殊地是生成器可以自动实现迭代器协议其他的数据类型需要调用自己内置的__iter__方法所以换种说法,生成器就是可迭代对象 !回忆:很重要的迭代器协 ...

  5. Python小白学习之路(十五)—【map()函数】【filter()函数】【reduce()函数】

    一.map()函数 map()是 Python 内置的高阶函数 有两个参数,第一个是接收一个函数 f(匿名函数或者自定义函数都OK啦):第二个参数是一个 可迭代对象 功能是通过把函数 f 依次作用在 ...

  6. Python小白学习之路(十七)—【内置函数二】

    序列操作类函数 all() 功能:判断可迭代对象的每个元素是否都为True值注意:If the iterable is empty, return True.(举例3) 回顾:None     ''  ...

  7. Python小白学习之路(九)—【字符串格式化】【百分号方式】【format方式】

    写在前面: 最近的事情好像有很多.李咏的离去,让我觉得很突然,仿佛印象中就是主持节目的他,看着他和哈文的爱情,很是感动.离去,没有什么抱怨,只是遗憾. 总会感慨,时光的流逝. 好像真的很快,转眼间,我 ...

  8. Python小白学习之路(二十三)—【生成器补充】

    生成器的一些补充 接着下鸡蛋和吃包子! 补充一:生成器只能遍历一次 (总是把生成器比喻成母鸡下鸡蛋,需要一个下一个,首先是下出来的鸡蛋不能塞回母鸡肚子里,其次是一个母鸡一生只能下一定数量的鸡蛋,下完了 ...

  9. Python小白学习之路(十八)—【内置函数三】

    一.对象操作 help() 功能:返回目标对象的帮助信息 举例: print(help(input)) #执行结果 Help on built-in function input in module ...

随机推荐

  1. mysql实现分页的几种方式

    mysql实现分页的几种方式: 第一种:使用框架自带的pageable来进行分页 package com.cellstrain.icell.repository.repositoryImpl; imp ...

  2. 2018.10.15 bzoj4570: [Scoi2016]妖怪(凸包)

    传送门 不得不说这题有点东西啊. 看到题第一眼二分,用二次函数求范围来进行checkcheckcheck,20分滚粗了233. 于是开始思考正解. 发现可以把每只怪物的二元组属性看成二维坐标. 这时对 ...

  3. 2018.09.21 codeforces1051D. Bicolorings(线性dp)

    传送门 sb线性DP. f[i][j][0/1/2/3]f[i][j][0/1/2/3]f[i][j][0/1/2/3]表示前i列j个连通块且第i列状态为00/01/10/11时的方案总数. 这个显然 ...

  4. 2018.06.29 NOIP模拟 Gcd(容斥原理)

    Gcd 题目背景 SOURCE:NOIP2015-SHY-2 题目描述 给出n个正整数,放入数组 a 里. 问有多少组方案,使得我从 n 个数里取出一个子集,这个子集的 gcd 不为 1 ,然后我再从 ...

  5. qmake-how to

    简单例子 假设已经实现如下程序: hello.cpphello.hmain.cpp 首先,使用编辑器,在上述文件目录下创建文件hello.pro.然后加入几行语句告诉qmake项目中的源文件和头文件. ...

  6. HDU2553 N皇后问题 2016-07-24 13:56 283人阅读 评论(0) 收藏

    N皇后问题 Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上. 你的任务是, ...

  7. linux处理U盘中的资料-挂载-tar.gz软件安装-linux环境下软件的安装方式

    1. U盘插入linux一般会有以下反映 (1)/dev 的目录下,多出一个sdb的磁盘. 因为:目前系统中有两个硬盘, sda是原来的系统磁盘.sdb是插入的U盘. 其中:sdb1表示sdbU盘的一 ...

  8. 转一篇做BI项目的好文

    首先,我们有一个大的假设前提,集团报表平台是服务于大型公司,比如有很多分公司,子公司,多部门等,并且有BI需求的访问人群超过1000以上的公司. 这样,我们的关键词是:集团 平台 运营 集团:意味着, ...

  9. 【AppCan 开发者】移动信息化随想

    现在的移动信息化,准确来说,是手机智能网络化.从08年到14年这6年时间里,手机发生翻天覆地的变化,成为移动设备智能中心,取得巨大成就,也成就一批公司,带动移动互联网的发展,引来众多人眼红热血投入.其 ...

  10. Content-Disposition 响应头,设置文件在浏览器打开还是下载

    Content-Disposition属性有两种类型:inline 和 attachment inline :将文件内容直接显示在页面 attachment:弹出对话框让用户下载 code: cont ...