函数在编程语言中可以理解为 一个功能的整合。
函数的定义和调用 实现一个两个数字相加,并且放回对应的结果。
1 def sum2(num1,num2):2 return num1+num23 4 print(sum2(1,2))
函数的文档说明
1 def sum2(num1,num2):2 "用来计算两个 数的和 并返回"3 return num1+num24 5 使用help(sum2) 将输出函数文档说明的内容。
函数的嵌套
1 # 打印一条横线 2 def printOneLine(): 3 print("-"*30) 4 5 # 打印多条横线 6 def printNumLine(num): 7 i=0 8 9 # 因为printOneLine函数已经完成了打印横线的功能,10 # 只需要多次调用此函数即可11 while i
全局变量和局部变量
在函数外边定义的都是全局变量(global),而在函数内部定义的是局部变量(locals列表)
- 在函数外边定义的变量叫做
全局变量
- 全局变量能够在所有的函数中进行访问
- 如果在函数中修改全局变量,那么就需要使用
global
进行声明,否则出错 - 如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的,小技巧
强龙不压地头蛇
- 在函数中不使用global声明全局变量时不能修改全局变量的本质是不能修改全局变量的指向,即不能将全局变量指向新的数据。
- 对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量。
- 对于可变类型的全局变量来说,因其指向的数据可以修改,所以不使用global时也可修改全局变量。
函数返回值
1 >>> def divid(a, b): 2 ... shang = a//b 3 ... yushu = a%b 4 ... return shang, yushu 5 ... 6 >>> sh, yu = divid(5, 2) 7 >>> sh 8 5 9 >>> yu10 1
可以有多个返回值,这样返回的就是元祖类型(tuple)。
函数参数
1. 缺省参数
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。
1 def printinfo( name, age = 35 ):2 # 打印任何传入的字符串3 print "Name: ", name4 print "Age ", age5 6 # 调用printinfo函数7 printinfo(name="miki" )8 printinfo( age=9,name="miki" )
2. 不定长参数
有时可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数。
1 def add(a,b,*args,*kwargs):2 pass
*args 是一个列表 **kwargs是一个字典。
3. 引用参数
1 >>> def selfAdd(a): 2 ... """自增""" 3 ... a += a 4 ... 5 >>> a_int = 1 6 >>> a_int 7 1 8 >>> selfAdd(a_int) 9 >>> a_int10 111 >>> a_list = [1, 2]12 >>> a_list13 [1, 2]14 >>> selfAdd(a_list)15 >>> a_list16 [1, 2, 1, 2]
Python中函数参数是引用传递(注意不是值传递)。对于不可变类型,因变量不能修改,所以运算不会影响到变量自身;而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量。
1 >>> def selfAdd(a): 2 ... """自增""" 3 ... a = a + a # 我们更改了函数体的这句话 4 ... 5 >>> a_int = 1 6 >>> a_int 7 1 8 >>> selfAdd(a_int) 9 >>> a_int10 111 >>> a_list = [1, 2]12 >>> a_list13 [1, 2]14 >>> selfAdd(a_list)15 >>> a_list16 [1, 2] # 想一想为什么没有变呢?
对于可变类型 += 和 =+ 是不同的,+=是会改变可变类型的,=+不改变可变类型的值。
不可变数据类型有 数字、字符串、元祖