Python学习笔记--函数
2013-07-30 16:17
453 查看
函数基本知识:
Python中的函数通过def关键字定义,比如:(代码测试版本均为Python3.3)
如果想表示函数体为空,需要写pass,不能不写。
当然,函数也可以有自己的形参,返回值:
这里,max()是自己定义的函数,而input()与print()是系统自带函数。返回两个数字中较大的值。
global关键字:
Python中的函数与C不同的一点是在函数内部默认是不能对全局变量进行赋值的(情况比较复杂,下面一段代码会有解释),建议如果在函数中要使用全局变量,请添加global关键字(理论上,如果只在等号右边出现了全局变量,可以不用加global,不过这样对代码维护带来困难,因为未来的他人或自己可能没注意到这点,误以为已经使用过global,可以直接对全局变量进行修改,这种bug非常隐蔽,不易找到):
list1与x均为全局变量,以上代码未使用global,但均可以使用全局变量,因为未使用=定义一个与全局变量同名的变量,默认在函数内部找不到时候,去全局变量处寻找,此时与C语言功能相同。但如果使用=对一个与全局变量同名的变量赋值,则表示定义了一个local的变量,而把全局变量屏蔽了,此处与C语言不同,这是因为Python中,会在函数内部先寻找是否第一次出现这个变量(之前未出现过),如果是,则产生这个变量并赋初值,而不会在函数内部找不到时,先去全局空间查找。使用=定义过以后,对这一变量进行的任何操作都不会影响到全局变量,可以将test_list()函数中的list1=['a']的注释取消了,来进行测试。
另一个需要注意的是,当test_x中的x=y的注释取消时,会报错。而不能在第一行对x使用全局变量的值,而在第二行新定义一个局部变量x。原因应该是:Python不能像C等其他语言一样通过int x这样判断某句话是对某一变量的定义,应该是将函数整体作为一个基本单位,检测所有=左边的变量,出现过的均视为局部变量,而不会关心是在第几行出现的,这样就无法通过出现的先后顺序判断是否当前语句使用的是全局变量了。
默认参数:
像C++一样,Python中定义的函数也可以有默认参数,而且函数在定义的时候,默认参数需要写在所有非默认参数后面。在使用的时候,可以按顺序给各参数赋值,默认参数可以不赋值;也可以打乱顺序赋值,这时需要显式的写出变量的名字,一旦某一变量被显式的赋值了,调用时其后的所有变量均要显式赋值。默认参数在系统函数中就有很多应用:print()函数,除了基本输出功能外,可以在相邻的字符串之间自动加空格,在每个print结束之后自动换行,都是使用了默认参数这一功能,比如print("This is","a
string.", sep='', end='') 则不会自动加空格,不会自动换行(sep默认为空格,end默认为\n)
示例如下:
Python中的函数通过def关键字定义,比如:(代码测试版本均为Python3.3)
def func(): pass
如果想表示函数体为空,需要写pass,不能不写。
当然,函数也可以有自己的形参,返回值:
def max(a,b): if a>=b: return a else: return b input1=int(input("Please input 1st number:")) input2=int(input("Please input 2nd number:")) print("max is",max(input1,input2))
这里,max()是自己定义的函数,而input()与print()是系统自带函数。返回两个数字中较大的值。
global关键字:
Python中的函数与C不同的一点是在函数内部默认是不能对全局变量进行赋值的(情况比较复杂,下面一段代码会有解释),建议如果在函数中要使用全局变量,请添加global关键字(理论上,如果只在等号右边出现了全局变量,可以不用加global,不过这样对代码维护带来困难,因为未来的他人或自己可能没注意到这点,误以为已经使用过global,可以直接对全局变量进行修改,这种bug非常隐蔽,不易找到):
list1=[] x=10 def test_list(a): #global list1 #list1=['a'] list1.append(a) print('list1 in test_list() is',list1) def test_x(a): y=x+a # x=y print('in test_x(), x=',x,'y=',y) test_list('1') print('global list1 is',list1) test_x(12) print('global x is',x)
list1与x均为全局变量,以上代码未使用global,但均可以使用全局变量,因为未使用=定义一个与全局变量同名的变量,默认在函数内部找不到时候,去全局变量处寻找,此时与C语言功能相同。但如果使用=对一个与全局变量同名的变量赋值,则表示定义了一个local的变量,而把全局变量屏蔽了,此处与C语言不同,这是因为Python中,会在函数内部先寻找是否第一次出现这个变量(之前未出现过),如果是,则产生这个变量并赋初值,而不会在函数内部找不到时,先去全局空间查找。使用=定义过以后,对这一变量进行的任何操作都不会影响到全局变量,可以将test_list()函数中的list1=['a']的注释取消了,来进行测试。
另一个需要注意的是,当test_x中的x=y的注释取消时,会报错。而不能在第一行对x使用全局变量的值,而在第二行新定义一个局部变量x。原因应该是:Python不能像C等其他语言一样通过int x这样判断某句话是对某一变量的定义,应该是将函数整体作为一个基本单位,检测所有=左边的变量,出现过的均视为局部变量,而不会关心是在第几行出现的,这样就无法通过出现的先后顺序判断是否当前语句使用的是全局变量了。
默认参数:
像C++一样,Python中定义的函数也可以有默认参数,而且函数在定义的时候,默认参数需要写在所有非默认参数后面。在使用的时候,可以按顺序给各参数赋值,默认参数可以不赋值;也可以打乱顺序赋值,这时需要显式的写出变量的名字,一旦某一变量被显式的赋值了,调用时其后的所有变量均要显式赋值。默认参数在系统函数中就有很多应用:print()函数,除了基本输出功能外,可以在相邻的字符串之间自动加空格,在每个print结束之后自动换行,都是使用了默认参数这一功能,比如print("This is","a
string.", sep='', end='') 则不会自动加空格,不会自动换行(sep默认为空格,end默认为\n)
示例如下:
def func(a,b=5,c=10): print("a =",a,"b =",b,"c =",c) func(3,7) func(25,c=24,b=11) func(c=50,a=100) #error: func(25,b=11,24)
相关文章推荐
- Python学习笔记-函数篇
- 【python学习笔记】python中的模块,类,函数,对象,实例(与JAVA的比较)
- Python学习笔记5:函数参数详解
- Python学习笔记之open()函数打开文件路径报错问题
- 【Python】学习笔记——-3.2、定义函数
- Python学习笔记——函数定义、调用
- python 学习笔记 函数和类
- [Python学习笔记][第五章Python函数设计与使用]
- 谭子python学习笔记--函数的参数
- Python学习笔记11:Python函数和函数式编程
- Python3.3 学习笔记4 - 函数 - 内置和其他一些函数
- python的函数装饰器学习笔记
- Python学习笔记之函数作为返回值、闭包的解释
- Python学习笔记 函数
- Python学习笔记:open()函数打开文件路径报错问题
- python学习笔记-day03 第四部分(函数和文件操作)
- Python学习笔记-偏函数
- Python2.7 学习笔记 (二)—— 函数,模块,正则
- 如何用python把克转换成kg--学习笔记2-python函数
- python学习笔记-format()函数