写在前面:

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

又是活力满满的小伙郭

今日份鸡汤:

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

函数

一、函数出现的背景

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

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. distinct group by 去重查询

    select * from dc_restaurants;  31 select DISTINCT (restaurant_name),id from dc_restaurants ; 31 (会按照 ...

  2. socketpair初识

    #include <stdio.h>  #include <string.h>  #include <unistd.h>  #include <sys/typ ...

  3. C++ 面向对象基本释义

    public:子类继承,子类亦可以访问.本类函数可以访问,本类对象可以访问. private:子类继承,子类不可访问.本类(所有)函数以及友员函数可以访问,本类对象不可以访问. protect:子类继 ...

  4. 讲讲我在Windows10(uwp)开发中遇到的一些坑.

    7月29日发布的Windows10正式版,当天安装好以后,在网络不太好的情况下,经过多次尝试终于装上了Visual Studio 2015和Windows 10 10240的SDK.这两周一直在开发U ...

  5. METAGENOMIC SEQUENCING ANALYSIS WORKFLOW

    Metagenomics is defined as the study of the metagenome, which is total genomic DNA from environmenta ...

  6. 2018.08.09洛谷P3959 宝藏(随机化贪心)

    传送门 回想起了自己赛场上乱搜的20分. 好吧现在也就是写了一个随机化贪心就水过去了,不得不说随机化贪心大法好. 代码: #include<bits/stdc++.h> using nam ...

  7. 2018.07.10 NOIP模拟 sort(单调队列)

    Sort 题目背景 SOURCE:NOIP2016-RZZ-4 T1 题目描述 给你一个长度为 n 的排列,小W每次可以选择一个数,做以下操作: 不断把这个数与它右边的数交换. 当它右边没有数,或它右 ...

  8. 19. Fight over Fox-hunting 猎狐引发的冲突

    . Fight over Fox-hunting 猎狐引发的冲突 ① Foxes and farmers have never got on well.These small dog-like ani ...

  9. day08(异常处理,创建异常,finally,throws和throw的区别)

    异常处理, 异常的产生  运行时异常:程序运行中产生的异常:RuntimeException类.   编译时异常:程序在编译时产生的异常:除了RuntimeException类  其他都是编译时产生的 ...

  10. Spring mvc,jQuery和JSON数据交互

    一.实验环境的搭建 1.Spring mvc jar. 导入spring mvc运行所需jar包.导入如下(有多余) 2.json的支持jar 3.加入jQuery. 选用jquery-3.0.0.m ...