函数
现在来学习一下函数,函数是什么,可以理解为是一个代码块,这个代码块构成了一个部件,类似arcgis的工具箱里面的工具,而我们只需要调用这个代码块,就可以为我们做重复的工作。在python中,函数的定义为
def 函数名():
逻辑语句
返回值(如果有,没有就不返回)
比如我们在做加法计算的时候,有很多组数据需要计算,那么我们就可以定义一个这样的代码块,来执行执行计算,只要传入数组a,b,然后执行a+b的操作,再返回即可。而我们如果需要对字符a、b拼接后然后执行打印操作,现在有很多这样的字符对,也是可以写代码块,即写函数。
def myAdd2(a,b=8):
return a+b
def keyMerge(strA,strB):
print strA+strB
函数调用
写完了函数之后,我们不能让函数放在那里,不起作用。那么现在我们就来调用函数了。函数的调用,可以理解为将一下重复的操作,放到函数中执行。函数的调用实施,只要传入参数即可,即我们数据。
def myAdd(a ,b):
return a+b
def keyMerge(strA,strB):
print strA+strB
print strB
print myAdd(3,4)
print myAdd(5,11)
keyMerge("this is strA","this is strB")
keyMerge("ArcGIS","MapGIS")
print "finished"
那么控制台就我们打印出了结果。如下所示。
函数参数
有时候我们想传入到函数的数据是固定的,这种固定可以理解为某个特定值,也可以理解为是空的。比如上面的keyMerge函数,有时候,我们只需要打印一个数据,那么函数中却有两个参数,怎么办呢。其实python是允许我们只输入某些参数,而另外某些参数可以不用输入。这时候默认参数就派上用场了。在python中,除了默认参数外,必选参数、可变参数、关键字参数。在arcpy中使用得比较多的就是关键参数和默认参数。我们这里将学习必选参数、默认参数。
必选参数,比如下面的a、b就是必选参数。必选传入相应的值,也就是说有几个参数就必须传如几个值。
def myAdd(a ,b):
return a+b
我们在调用的时候,假如如下面的方式。第一个myAdd里面传入的是两个数据,而第二个myAdd是一个数据。
he_1=myAdd(3,4)
print he_1
he_2=myAdd(3)
print he_2
我们来看一下执行结果。可以看得出,第一能够正确返回了结果,3+4等于7,而第二个我们只传入到的是一个参数,因此报错中,说只传入一个参数。
我们注意到上面传入到的参数是a=3,b=4,也就是说,在myAdd(3,4)函数里面默认,a=3,b=4。而我们如果写成myAdd(4,3)这样,a=4,b=3,说了这么多,想要表达的是,传入的数据有一定的顺序,如果传入的数据不按照顺序,那么就有可能报错,比如下面的代码。参数p是居住在房子里面的人数,而fzArea为房子的面积,现在我们这样调用dataClss(5,120),我们传入的第一参数是120,第二参数是5,那么说明我们的120是人数,而5就是面积,显然5平方米里面居住了120人,显然不太可能。也就是说我们在函数的调用时候要注意函数参数的顺序。
其实数据可以按照前面的dataClss(120,5)顺序来调用的,这时候就要注意一下函数的指定名称,写成这样就可以了dataClss(fzArea=120,p=5)即可。
#p的单位为一,表示人数,而fzArea单位为平方米,表示房子的面积
def dataClss(p,fzArea):
if (p>=0 and p<=4) and fzArea==100:
print "房子面积勉勉强强居住"
elif (p>=0 and p<=5) and fzArea==120:
print "房子面积适合"
elif (p >4 ) and fzArea == 100:
print "房子面积有点小了,有点挤"
else:
print "其他情况自行判断"
调用方式。
dataClss(fzArea=120,p=5)
print "finished"
运行结果如下所示。
默认参数
好了,现在我们来学习一下使用默认参数。该参数应该是常见的,特别是arcpy中。比如搜索游标,在返回记录时,如果不想设置条件sql语句,那么可以不用设置。
下面我们来定义一个有默认参数的函数。其中参数strB为一个默认值"stringB",接下来我们来一下应用。就是调用了。
def printStr(strA,strB="stringB"):
strT=strA+strB
print strT
printStr("ArcGIS","-->MapGIS")
printStr("python--")
最后来看一下输出结果。显然在第二次使用printStr时候,只用一个参数,这是时候就使用到了默认值。