1 # -*- coding:utf-8 -*- 2 3 # 函数 4 # python中定义函数的规则如下:以def开头,接函数名称和(),传入的参数和变量放在圆括号中间,函数以:起始,并且缩进,return选择性的返回一个值给调用方,不带返回值的return相当于返回NONE 5 print "********************1***********************" 6 def printsmt(str): 7 print str 8 return 9 10 printsmt("1234567") 11 12 # 前面说过可变对象和不可变对象,所以在参数传递时,对于不可变类型,传递的值,而对于参数本身没有影响,所以函数内部的更改不会对其产生影响;但是对于可变类型,则是将参数真正的传递过去,更改后外部的值也会收到影响 13 14 # 传递不可变对象 15 print "********************2***********************" 16 def changeStr(a): 17 a="54321" 18 print "Method:",a 19 20 b="12345" 21 changeStr(b) # 输出Method:543s21 22 print b # 输出12345 23 24 # 传递可变对象 25 print "********************3***********************" 26 def changeList(list): 27 list.append(["mango"]); 28 print "Method:",list 29 fruits=[‘apple‘,‘orange‘,‘bananas‘] 30 changeList(fruits) 31 print fruits 32 33 # 参数:必备参数、关键字参数、默认参数、不定长参数 34 35 # 必备参数:必须以正确的顺序传入,调用数量和声明一致 36 print "********************4***********************" 37 try: 38 changeStr() #这里会直接返回错误 takes exactly 1 argument. 39 except Exception as err: 40 print(err); 41 42 # 关键字参数:和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值,如: 43 print "********************5***********************" 44 def printKey(name,age): 45 print name,age 46 47 printKey("zhangsan",18) # 按传入输出 48 printKey(age=19,name=‘lisi‘) # 即便输入的顺序不对,但通过调用键字输入,解释器一样可以匹配。 49 50 # 缺省参数 缺省参数的值如果没有传就会被认为默认值。 51 print "********************6***********************" 52 def printDefault(name,age=35): 53 print name,age 54 55 printDefault(age=50,name="lisi") #输出 lisi 50 56 printDefault("zhangsan") # 输出 zhangsan 35 57 58 # 不定长参数 有时候传入参数的长度不确定,这时候就会定义不定长参数,如: 59 print "********************7***********************" 60 def printarg(arg1,*args): 61 print arg1 62 for arg in args: 63 print arg 64 65 printarg(1) 66 printarg(1,2,3,4,5) 67 68 # 匿名函数 使用lambda来创建匿名函数,lambda只是一个表达式,函数体比def简单的多 69 print "********************8***********************" 70 sum=lambda arg1,arg2:arg1+arg2 71 print sum(10,20) 72 73 # 全局变量和局部变量,变量存在作用域,定义在函数内部的变量有一个局部作用域,只能在函数内部生效,定义在函数外部的拥有全局作用域。