局部变量:就是在函数内部定义的变量,
全局变量:既能在一个函数中使用,也能在其他的函数中使用
如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错
如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的-----强龙不压地头蛇
在函数中不使用global声明全局变量时不能修改全局变量的本质是不能修改全局变量的指向,即不能将全局变量指向新的数据。
对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量。
对于可变类型的全局变量来说,因其指向的数据可以修改,所以不使用global时也可修改全局变量。
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。带有默认值的参数一定要位于参数列表的最后面。
def printinfo( name, age = 35 ):
# 打印任何传入的字符串
print "Name: ", name
print "Age ", age
printinfo(name="miki" )
printinfo( age=9,name="miki" )
不定长参数:
def function([formal_args,] *args, **kwargs):
function_suite
return [expression]
加了(*)的变量args会存放所有未命名的变量参数,args为元组;而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典。拆包语法
匿名函数:用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。Lambda函数能接收任何数量的参数但只能返回一个表达式的值。匿名函数不能直接调用print,因为lambda需要一个表达式。匿名函数可以作为参数传递。
lambda [arg1 [,arg2,.....argn]]:expression
sum = lambda a, b, c: a + b + c
print(sum(3, 2, 1))
def sum(a,b,c):
return a+b+c
print(sum(3,2,1))
带有默认值的参数一定要位于参数列表的最后面。
Python中函数参数是引用传递(注意不是值传递)。对于不可变类型,因变量不能修改,所以运算不会影响到变量自身;而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量。
当需要判断的情况很多的时候,用if、elif、else效率比全部用if更高一些,不用全部判断。
函数调用自身的编程技巧称为递归。
特点:
1.函数内部的代码是相同的,只是针对参数不同,处理的结果不同。
2.当参数满足一个条件时,函数不在执行。
break结束整个循环,continue结束当次循环
函数可以return多个值,本质是利用了元组return temp,wetness
在函数内部,针对参数使用赋值语句,不会影响到调用函数时传递的实参变量,不管实参变量是可变类型还是不可变类型。
如果传递的参数是可变类型的,在函数内部使用了方法修改了数据的内容,会影响到外部的数据。
定义函数时,可以给某个参数指定一个默认值,具有默认值的参数就是缺省参数。所有带有默认值的缺省参数在参数列表末尾。在调用函数时,如果有多个缺省参数,需要指定参数名,这样解释器才能够知道参数的对应关系。
break:在双重循环的时候是退出当前的循环,外层的循环继续进行
return:退出所有的循环,当前的函数执行完毕,只有在函数内才能用
continue:本次不执行,循环继续
身份运算符:
is :判断两个标识符是不是引用一个对象
x is y ,类似 id(x)==in(y)
is not :判断两个标识符是不是引用不同的对象 x is not y ,类似 id(x)!=in(y)