Python 函数之函数定义、调用、传参
2015-08-29 17:51
495 查看
函数是组织好的,可以被重复使用的,用来实现单一或相关功能的代码块。
任何编程语言都提供了很多内嵌函数,同时还允许用户自己定义想要的函数。本节主要讲自定义函数。
1、定义函数的规则
我们自定义函数时,需要满足一些规则,否则编译器不会识别。
(1)函数代码块以def关键词开头,后接函数标识符名和圆括号()。
(2)任何传入实参和形参必须放在圆括号中。圆括号中写的是形参。
(3)函数的第一行语句可以选择性地使用文档字符串—-用于存放函数说明。
(4)函数内容以冒号起始,并且函数体要有缩进。
(5)return[expression]结束函数,选择性地返回一个值给调用者。不带表达式的return相当于返回None。
2、定义函数语法
语法:
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。
3、函数调用
函数被定义后,本身是不会自动执行的,只有在被调用后,才会被执行。
下面通过一个例子来讲解函数的调用。
调用上面的打印字符串函数
原函数在定义时,定义了一个形参str1,所以在调用函数时,也必须传入一个参数,否则会报错。
执行结果:
4、传参
先来看两个例子。
实例1:传递变量
执行结果:
实例2 :传序列list
执行结果:
从上面的结果可以看出,在函数中改变num变量的值,但是在函数调用之外num变量的值却没有改变。而在第二个实例中,在函数中像list1中增加一个元素’newStr’,在函数外查看原list1,发现也增加了一个元素’newStr’。也就是说在函数中改变list1,原list1也跟着改变。但是从这样我们就能说在Python中,实例1是传值,实例2是传引用吗?
其实非也,和其他语言不一样,在Python中,一切皆对象, Python参数传递采用的都是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值,相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象,相当于通过“传值’来传递对象,此时如果想改变这些变量的值,可以将这些变量申明为全局变量。
任何编程语言都提供了很多内嵌函数,同时还允许用户自己定义想要的函数。本节主要讲自定义函数。
1、定义函数的规则
我们自定义函数时,需要满足一些规则,否则编译器不会识别。
(1)函数代码块以def关键词开头,后接函数标识符名和圆括号()。
(2)任何传入实参和形参必须放在圆括号中。圆括号中写的是形参。
(3)函数的第一行语句可以选择性地使用文档字符串—-用于存放函数说明。
(4)函数内容以冒号起始,并且函数体要有缩进。
(5)return[expression]结束函数,选择性地返回一个值给调用者。不带表达式的return相当于返回None。
2、定义函数语法
语法:
def functionname( parameters ) : "函数文档字符串(即函数说明)" function_suite(函数体) return [expression]
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。
3、函数调用
函数被定义后,本身是不会自动执行的,只有在被调用后,才会被执行。
下面通过一个例子来讲解函数的调用。
def printStr(str1) : "打印任何传入的字符串" print str1
调用上面的打印字符串函数
原函数在定义时,定义了一个形参str1,所以在调用函数时,也必须传入一个参数,否则会报错。
printStr("调用字符串打印函数")
执行结果:
调用字符串打印函数
4、传参
先来看两个例子。
实例1:传递变量
#!/usr/bin/python #coding=utf-8 def changeNum(num) : num += 1 print "自定义函数中的num = ",num #定义变量num,赋初始值为10 num = 10 # changeNum(num) print "函数调用后num = ",num
执行结果:
自定义函数中的num = 11 函数调用后num = 10
实例2 :传序列list
#!/usr/bin/python # -*- coding: utf-8 -*- def changeList(list1) : list1.append('newStr') print "函数中的list :",list1 #定义变量num,赋初始值为10 list1 = [1,2,3] print "调用函数前的list: ",list1 changeList(list1) print "调用函数后的list:",list1
执行结果:
调用函数前的list: [1, 2, 3] 函数中的list : [1, 2, 3, 'newStr'] 调用函数后的list: [1, 2, 3, 'newStr']
从上面的结果可以看出,在函数中改变num变量的值,但是在函数调用之外num变量的值却没有改变。而在第二个实例中,在函数中像list1中增加一个元素’newStr’,在函数外查看原list1,发现也增加了一个元素’newStr’。也就是说在函数中改变list1,原list1也跟着改变。但是从这样我们就能说在Python中,实例1是传值,实例2是传引用吗?
其实非也,和其他语言不一样,在Python中,一切皆对象, Python参数传递采用的都是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值,相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象,相当于通过“传值’来传递对象,此时如果想改变这些变量的值,可以将这些变量申明为全局变量。
相关文章推荐
- Python找回MySQL密码
- Python之包管理工具
- Python中的编码问题
- 理解Python中的with…as…语法
- python 类和对象的属性
- python 有关super
- Python爬虫框架Scrapy教程(1)—入门
- Python - 带参数的方法
- Python爬虫框架Scrapy教程(1)—入门
- 2015/8/28 Python基础(2):对象
- 2015/8/26 Python基础(1):基本规则及赋值
- python - os模块中比较有用的部分
- Python使用os.listdir()函数来得目录内容的介绍
- python大法好!
- Python 守护进程 例子
- python zerorpc分布式框架
- python中range函数的使用
- 学习日志---python(列表解析、生成器、字典和集合)
- python学习资源
- python各进制相互转换