函数:就是让程序模块化,把具有独立功能的代码块当成一个整体封装成一个函数

首先打印一个佛主看看:

print("                            _ooOoo_  ")
print(" o8888888o ")
print(" 88 . 88 ")
print(" (| -_- |) ")
print(" O\\ = /O ")
print(" ____/`---'\\____ ")
print(" . ' \\| |// `. ")
print(" / \\||| : |||// \\ ")
print(" / _||||| -:- |||||- \\ ")
print(" | | \\\\\\ - /// | | ")
print(" | \\_| ''\\---/'' | | ")
print(" \\ .-\\__ `-` ___/-. / ")
print(" ___`. .' /--.--\\ `. . __ ")
print(" ."" '< `.___\\_<|>_/___.' >'"". ")
print(" | | : `- \\`.;`\\ _ /`;.`/ - ` : | | ")
print(" \\ \\ `-. \\_ __\\ /__ _/ .-` / / ")
print(" ======`-.____`-.___\\_____/___.-`____.-'====== ")
print(" `=---=' ")
print(" ")
print(" ............................................. ")
print(" 佛祖镇楼 BUG辟易 ")
print(" 佛曰: ")
print(" 写字楼里写字间,写字间里程序员; ")
print(" 程序人员写程序,又拿程序换酒钱。 ")
print(" 酒醒只在网上坐,酒醉还来网下眠; ")
print(" 酒醉酒醒日复日,网上网下年复年。 ")
print(" 但愿老死电脑间,不愿鞠躬老板前; ")
print(" 奔驰宝马贵者趣,公交自行程序员。 ")
print(" 别人笑我忒疯癫,我笑自己命太贱; ")
print(" 不见满街漂亮妹,哪个归得程序员?")

那么这个时候我们想打印很多遍佛主的话,总不能一直复制粘贴,所以我们需要定义一个打印佛主函数:

def print_fozhu():  #首先在开始定义打印佛主的函数,函数名为print_fozhu
print(" _ooOoo_ ")
print(" o8888888o ")
print(" 88 . 88 ")
print(" (| -_- |) ")
print(" O\\ = /O ")
print(" ____/`---'\\____ ")
print(" . ' \\| |// `. ")
print(" / \\||| : |||// \\ ")
print(" / _||||| -:- |||||- \\ ")
print(" | | \\\\\\ - /// | | ")
print(" | \\_| ''\\---/'' | | ")
print(" \\ .-\\__ `-` ___/-. / ")
print(" ___`. .' /--.--\\ `. . __ ")
print(" ."" '< `.___\\_<|>_/___.' >'"". ")
print(" | | : `- \\`.;`\\ _ /`;.`/ - ` : | | ")
print(" \\ \\ `-. \\_ __\\ /__ _/ .-` / / ")
print(" ======`-.____`-.___\\_____/___.-`____.-'====== ")
print(" `=---=' ")
print(" ")
print(" ............................................. ")
print(" 佛祖镇楼 BUG辟易 ")
print(" 佛曰: ")
print(" 写字楼里写字间,写字间里程序员; ")
print(" 程序人员写程序,又拿程序换酒钱。 ")
print(" 酒醒只在网上坐,酒醉还来网下眠; ")
print(" 酒醉酒醒日复日,网上网下年复年。 ")
print(" 但愿老死电脑间,不愿鞠躬老板前; ")
print(" 奔驰宝马贵者趣,公交自行程序员。 ")
print(" 别人笑我忒疯癫,我笑自己命太贱; ")
print(" 不见满街漂亮妹,哪个归得程序员?") print_fozhu()    #然后在下面调用print_fozhu函数
print_fozhu()

带有参数的函数

首先我们来定义一个函数来计算两个数的总和:

def sum():  #表示定义一个函数,函数名为sum
a = 20
b = 30
sum = a+b
print("%d+%d=%d"%(a,b,sum)) sum()  #在下面调动这个函数

这样会不会有点太死板了,我们希望能够从键盘输入a和b去获取这两个数的总和,那么需要怎么做呢?

def sum(a,b):  #在上面定义搞一个函数,函数名为sum,并且携带两个参数a,b,用来接收的叫做形参
sum = a+b
print("%d+%d=%d"%(a,b,sum)) num1 = int(input("第1个值:")) #input键盘输入的值是字符串类型,需要用int()转换成整形
num2 = int(input("第2个值:"))
sum(num1,num2)  #在调用sum函数时,等于把num1和num2传到sum()函数里去,调用时的传的参数叫做实参 root@test:~/codes# python3 01-带有参数的函数-input.py
第1个值:    10
第2个值:50
10+50=60

return的作用:所谓“返回值”,就是程序中函数完成一件事情后,最后给调用者的结果

比如:我给了我的朋友22块钱,让他帮我去买一包烟,然后朋友买完回来了把烟交给我,这个烟就是返回值

其次,在获取键盘输入时,也是这种道理:

In [1]: name = input("Name:")
Name:laowang In [2]: name
Out[2]: 'laowang'  #相当于才从键盘获取了一个值,然后拿给了name

那么,我们现在来举一个例子来说明return的作用:

def get_wendu():    #这里定义一个获取温度的函数get_wendu
wendu = 22    #定义一个wendu变量
print("当前的室温是%d"%wendu) def get_wendu_huashi():  #定义一个获取华氏温度的函数get_wendu_huashi
wendu = wendu + 2  #假设华氏温度=温度+2
print("当前的室温(华氏)是%d"%wendu) get_wendu_huashi()  #调用刚刚定义的函数,get_wendu_huashi 让我们看一下运行结果:
Traceback (most recent call last):
  File "02-获取温度.py", line 10, in <module>
    get_wendu_huashi()
  File "02-获取温度.py", line 7, in get_wendu_huashi
    wendu = wendu + 2
UnboundLocalError: local variable 'wendu' referenced before assignment  #这句话表示在声明变量wendu之前就已经对其调用,定位到错误的地方了

让我来解释一下:在函数中定义的变量,只允许在当前函数中使用,在其他函数里不能用,而且函数中不允许直接调用结果那么意思就是在get_wendu中定义的变量wendu,到了get_wendu_huashi中却不认识这个wendu变量

让我们来看一下修改后的代码:

def get_wendu():
wendu = 22
print("当前的室温是%d"%wendu)
return wendu  #在这里我们使用了return函数,那么意味着我们可以把这个值、这个结果返回到调用的地方 def get_wendu_huashi(wendu):  #wendu是形参,用来接收的
wendu = wendu + 2
print("当前的室温(华氏)是%d"%wendu)
result = get_wendu()  #return时需要有个容器来把结果存放起来,然后再传入时,把这个结果给存进去
get_wendu_huashi(result)  #在调用get_wendu_huashi函数时,把result这个变量作为实参给传送到函数里去 运行结果如下:
root@test:~/codes# python3 !$
python3 02-获取温度.py
当前的室温是22
当前的室温(华氏)是24 大功告成.....

总结:如果在一个函数中有了return,那么就意味着这个函数可以把一个值,一个结果返回到调用的地方,return时需要有个东西把结果存放起来,然后在传入时把这个东西存进去

如果一个函数想要有多个return,可以写多个return,但是函数一旦运行到return,函数就会结束,如下:

In [1]: def test():    #定义一个test函数
...: a = 11     #变量a
...: b = 22     #变量b
...: return a  
...: return b
...: In [2]: a = test()  #调用test函数,并把它的结果赋值给a In [3]: a
Out[3]: 11 In [4]: b = test()  #调用test函数,并把他的结果赋值给b In [5]: b
Out[5]: 11

那么为什么a和b的值是一样的呢?我们来看一下流程:

1.定义了一个test函数

2.在test函数中定义了两个变量a和b,并分别复制a = 11,b = 22

3.使用return返回a的值和b的值

4.调用test函数,并把它赋值给了a

5.然后开始进入函数,a = 11,b = 22,然后return a,结果赋值给了a,此时的a等于11,程序结束

6.到了b = test(),进入函数,a = 11,b = 22,然后return a,结果被赋值给了b,此时b等于11,所以a和b的结果是一样的

为什么呢?因为在函数中,每调用一次函数就从函数从头开始做,可以写多个return,但是当进入函数时,一看见return程序就会结束,所以a和b的结果是一样的了

修改程序如下:

In [6]: def test():
...: a = 11
...: b = 22
...: return a,b
...: In [7]: a,b = test() In [8]: print(a)
11 In [9]: print(b)
22

函数的类型

函数可以根据有没有参数,有没有返回值,可以相互结合

(1)无参数,无返回值

(2)无参数,有返回值

(3)有参数,无返回值

(4)有参数,有返回值

函数的嵌套使用

指在一个函数被调用的过程里,又调用了一个函数,举例说明一下:

def test1():
pass def test2():
print("-----2-1-----")
print("-----2-2-----") def test3():
print("-----3-1-----")
test2()  #在函数里面调用test2函数
print("-----3-2-----") test3()  #调用test3函数 程序运行结果如下:
-----3-1-----
-----2-1-----
-----2-2-----
-----3-2----
def print_line():  #定义一个函数,打印40个*
print("*"*40)   def print_5_lines():  #定义一个函数,打印5行
i = 0
while i<5:
print_line()  #又签到调用了print_line函数
i += 1
print_5_lines() 程序运行结果如下:
root@test:~/codes# python3 04-函数的嵌套调用2.py
****************************************
****************************************
****************************************
****************************************
***************************************

05-python中函数的使用的更多相关文章

  1. python 中函数的参数

    一.python中的函数参数形式 python中函数一般有四种表现形式: 1.def function(arg1, arg2, arg3...) 这种是python中最常见的一中函数参数定义形式,函数 ...

  2. python 中函数参数传递形式

    python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...

  3. python中函数的参数解析

    python中函数的各种参数梳理: 1.形参:函数定义时传入的参数 2.实参:函数调用时传入的参数 (有形参必传实参,形参里自身特点可不传的,可传可不传) 3.缺省参数:不传为默认值,传了会覆盖(下面 ...

  4. (转)python中函数参数中如果带有默认参数list的特殊情况

    在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 1 2 3 4 5 6 7 8 9 def f(x,l=[]):     for i in range(x):         ...

  5. 学以致用三十二-----python中函数的括号使用

    一直以来对python中函数括号的使用,有点分不清楚,到底什么时候用括号,什么时候不用括号,造成了很大看困惑. 今天来总结下. class aaa(): y = 'you' def __init__( ...

  6. python中函数的参数

    函数参数(一) 思考一个问题,如下: 现在需要定义一个函数,这个函数能够完成2个数的加法运算,并且把结果打印出来,该怎样设计?下面的代码可以吗?有什么缺陷吗? def add2num(): a = 1 ...

  7. python中函数的定义和详细的使用方法

    1. 函数的概念,函数是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集   2. 函数的作用,使用函数可以加强代码的复用性,提高程序编写的效率   3. 函数的使用,函数必须先创建才 ...

  8. Python中函数的参数传递与可变长参数

    转自旭东的博客原文 Python中函数的参数传递与可变长参数 Python中传递参数有以下几种类型: (1)像C++一样的默认缺省函数 (2)根据参数名传参数 (3)可变长度参数 示例如下: (1)默 ...

  9. python中函数参数传递的几种方法

    转自  http://www.douban.com/note/13413855/ Python中函数参数的传递是通过“赋值”来传递的.但这条规则只回答了函数参数传递的“战略问题”,并没有回答“战术问题 ...

  10. python中函数参数的引用方式

    值传递和引用传递时C++中的概念,在python中函数参数的传递是变量指向的对象的物理内存地址!!! python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方 ...

随机推荐

  1. SpringMVC对于传入多个对象参数遇到的问题

    最近遇到一个问题,一个添加接口,需要添加三个对象,而且这三个对象里面的属性名很多都是一样的,本来是拿三个对象直接接收值,但是因为很多属性名都一样,所以接收不到值.百度也有的说把这三个对象的参数重命名然 ...

  2. 推荐个非常简单好用的AOP -- MrAdvice

    https://github.com/ArxOne/MrAdvice 太简单了,写好自己的处理类, 作为Attribute加到要拦截的方法或者类上就可以了. Here is the minimal s ...

  3. mysql的空闲8小时问题

    在spring中配置数据源时,必须设定destroy-method="close"属性,以便spring容器关闭时,数据源能正常关闭. 如果数据库时mysql,如果数据源配置不当, ...

  4. CentOS(64位)安装apr

    安装apr来提高tomcat 的可伸缩性和性能 cd /usr/local/ 1.  下载apr 和 apr-util最新版 wget http://apache.fayea.com/apache-m ...

  5. codeforces 484B - LubaAndTicket - 贪心

    2017-08-22 10:54:00 writer:pprp 题意如下: 给你6个数组,你的操作可以是更改某一位的数字成为0-9之间任意一个数,要求前三个数字的和与后三个数字的和相等. 问你最少用几 ...

  6. python 编程测试练习2

    1.将A.txt(多行)文件的内容读取出来写入到B.txt中 2.总结 一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚 ...

  7. codeforces600E Lomsat gelral

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  8. Spark 基于物品的协同过滤算法实现

    J由于 Spark MLlib 中协同过滤算法只提供了基于模型的协同过滤算法,在网上也没有找到有很好的实现,所以尝试自己实现基于物品的协同过滤算法(使用余弦相似度距离) 算法介绍 基于物品的协同过滤算 ...

  9. 英语每日阅读---5、VOA慢速英语(翻译+字幕+讲解):美国人口普查局表示美国人受教育程度提升

    英语每日阅读---5.VOA慢速英语(翻译+字幕+讲解):美国人口普查局表示美国人受教育程度提升 一.总结 一句话总结: a.Thirty-four percent - college degree: ...

  10. 使用ASP.NET 的缓存机制的示例

    if (HttpContext.Current.Cache["code_" + CodeType] == null) { SysCodeService codeService = ...