函数基本知识:
Python中的函数通过def关键字定义,比如:(代码测试版本均为Python3.3)
def func(): 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))
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)
另一个需要注意的是,当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)