爱笑的男孩运气有点差
别让标题带偏了,我们藉此来聊下函数的参数化而已。
还是以“找宝藏”这个小程序为例,isLucky是我们封装的一个函数,实现了”判断是否好运“。假设isLucky的算法需要判断性别来达成不同的逻辑,这怎么办?
那就给函数传入参数。
代码:
#!/usr/bin/python
#-*-coding:UTF-8-*-
importrandom
#实现“判断是不是比神兽弱
defisWeakerThanBeast():
iRan=random.randint(1,10)
ifiRan=9:
returnTrue
else:
returnFalse
#实现”判断是否好运“
defisLucky(bIsBoy):
#根据性别,男生1/10概率运气好,女生1/2概率运气好
ifbIsBoy:
iMax=10
else:
iMax=2
iRan=random.randint(1,iMax)
ifiRan=1:
returnTrue
else:
returnFalse
#实现“找宝藏”
deffindTreasure():
bBoy=True
iCount=0
whileTrue:
iCount=iCount+1
#判断是不是比神兽弱
ifisWeakerThanBeast():
continue
#判断是否好运
ifisLucky(bBoy):
break
print(str(iCount)+次找到宝藏)
#执行“找宝藏”需求
findTreasure()
以上,isLucky函数定义多了一个“bIsBoy”,而isLucky函数使用传入一个”bBoy“,这就是参数化的体现。一般,我们称”bIsBoy“为形参,”bBoy“为实参。有些小萌新可能有点懵,bIsBoy和bBoy对不上号呢?
我们这样来梳理一下,bBoy大家都知道,之前也讲过,这就是一个普通变量而已;再来看下bIsBoy,暂时忘记它和bBoy的关联,你会发现其实它也只是函数内一个普通变量而已。
小萌新可以这样理解,bIsBoy只是bBoy的一个别名,实质上在Python世界里,他们代表的是同个变量。
再举个例子,隔壁村的阿牛,在村里大家都叫他阿牛,后来他进城打工,来到一间大发廊做发型师,发廊的同事和顾客都叫他Tony老师。
Tony老师就是阿牛的一个华丽的别名。
再来看bIsBoy和bBoy的关联,在这个例子里,bIsBoy是形参(形式上的参数),bBoy是实参(实质上的参数),在Python世界里,形参相当于实参在函数内的别名。
假设isLucky的算法不但需要判断性别,也需要判断是否爱笑,这怎么办?
那就给函数传多一个参数,传两个参数。
代码:
#!/usr/bin/python
#-*-coding:UTF-8-*-
importrandom
#实现“判断是不是比神兽弱
defisWeakerThanBeast():
iRan=random.randint(1,10)
ifiRan=9:
returnTrue
else:
returnFalse
#实现”判断是否好运“
defisLucky(bIsBoy,bLoveSmile):
#爱笑男孩运气好的概率是1/,不爱笑男孩运气好的概率是1/10
#爱笑女孩运气好的概率是百分百,不爱笑女孩运气好的概率是1/2
ifbIsBoy:
ifbLoveSmile:
iMax=
else:
iMax=10
else:
ifbLoveSmile:
iMax=1
else:
iMax=2
iRan=random.randint(1,iMax)
ifiRan=1:
returnTrue
else:
returnFalse
#实现“找宝藏”
deffindTreasure():
bBoy=True
bSmile=True
iCount=0
whileTrue:
iCount=iCount+1
#判断是不是比神兽弱
ifisWeakerThanBeast():
continue
#判断是否好运
ifisLucky(bBoy,bSmile):
break
print(str(iCount)+次找到宝藏)
#执行“找宝藏”需求
findTreasure()
可以看到爱笑的女孩运气果然是好,而爱笑的男孩运气就有点差了。
需要更多参数,也同此理。
函数还有很多琐碎的细节,但对于小萌新而已,大部分都可暂时不去理会。目前各位掌握的函数知识已经可以应对八成的情景,重要的是理解本质,掌握常规使用,而不需囿于细节。