Python:函数的定义、参数传入与函数的调用

小白学视觉

共 4177字,需浏览 9分钟

 ·

2022-07-22 10:32

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

    作为计算机代码的一种抽象方式,函数在Python中扮演了极为重要的角色。本节介绍Python函数的定义、参数的传入以及调用方式。其中函数参数的传入方式为本节重点内容。Python函数的参数形式包括必选参数、默认参数、可变参数、命名关键字参数以及关键字参数。五类参数可单独传入也可组合传入。

>>>>

Python 函数的定义

    与R语言中定义函数的function(x)不同的是,Python中使用def语句来定义函数,然后依次写出函数名、括号、括号内的参数以及最后不能忘记的冒号,函数体需另起一行在缩进块中编写,最后返回值用return语句执行。看一例求绝对值的自编函数:

def f_abs(x):
   if x >=0:
       return x
   else:
       return -x

    当然,如果你已经通过pycharm将f_abs保存为abstest.py文件的话,可以通过cmd在当前文件目录下启动Python然后直接导入函数模块来调用f_abs函数:

C:\Users\Administrator>F:
F:\>cd pythoncode>python
>>> from abstest import f_abs
>>> f_abs(-1.0923)
-1.0923

    另外我们在编写函数时也可以对函数做参数个数和参数类型的检查,函数也可以返回多个值,但其本质是一个tuple。


>>>>

函数的参数传入

    函数参数传入的灵活性使得Python函数十分强大,函数参数除了必选参数之外,还包括默认参数、可变参数、命名关键字参数以及关键字参数。函数参数传递顺序为必选参数>默认参数>可变参数>命名关键字参数>关键字参数。

必选参数:

    先定义一个求平方的函数:

def power(x):
   return x*x  
power(-10)
100

    可见求平方函数定义起来很方便,但如果我们想求x的更高次幂的话,恐怕这个函数就得改改了,我们需要两个必选参数才能搞定:

def power(x,n):
  s = 1
  while n >0:
      n = n-1 
      s = s*x
   return s
power(10,3)
1000

默认参数:

    当我们重新定义power函数时,原先的只传入一个必选参数的函数就已经失效了,这时候我们就需要默认参数来帮忙了,将参数n的值定义为默认值2:

def power(x,n=2):
 s = 1
  while n >0:
      n = n-1
      s = s*x
   return s
>>> power(10)
100
>>> power(10,2)
100

    从上述例子我们可以看出,默认参数的使用可以简化函数的调用。必选参数在前,默认参数在后,当传入多个参数时,变化大的参数放前面,变化小的参数可作为默认参数放后面,最重要的一点是,默认参数必须指向不变对象!这是设置默认参数时需要注意的。

可变参数:

    我们对一组数的平方求和定义一个函数,即a2+b2+c2+...利用可变参数我们可以编写函数:

def jisuan(*numers):
   sum = 0
   for n in numbers:
       sum = sum + n * n
   return sum

    由上面的命令可见可变参数仅仅需要在参数前加上一个*号就可完成对其定义,参数numbers接受的数据类型为一个list或者tuple。当我们已有一个list或者tuple时,我们可以直接将其当作可变参数传入函数中去:


>>> nums = [2,3,5]
>>> jisuan(*nums)
38

关键字参数:

    与可变参数可以传入任意个参数不同的是,关键字参数可以传入任意个含参数名的参数,这样key-value格式显然是以dict的数据类型传入的。且看示例:

def player(name,team,**kw):
   print('name:',name,'team:',team,'other:',kw)
player('Harden','Rockets',city = 'Houston')
name: Harden team: Rockets other: {'city':'Houston'}

    显而易见的一点是,关键字参数增加了函数的灵活性,除去必选参数外,用户可通过关键字参数输入任何想要的参数。和可变参数类似的是,我们也可以先定义一个dict,然后将其作为关键字参数传入函数中去:

>>> info = {'city': 'Golden states'}
>>> player('Curry','Worriors',**info)
name: Curry team: Worriors other: {'city':'Golden states'}

命名关键字参数:

    通过关键字参数,我们可以传入任意不受限制的参数,但如果我们想要限制关键字参数的名字,可以使用命名关键字参数,例如只接受city和age作为关键字参数,定义方式如下:

def palyer(name,team,*,city,age):
   print(name,team,city,age)

    命名关键字参数需要一个*作为分隔,*后面的参数均为命名关键字参数,这与关键字参数的**大不相同。但如果在此之前函数已有可变参数的话,再定义命名关键字参数的话就不需要*作为分隔符了。示例如下:

def palyer(name,team,*tec,city,age):
   print(name,team,tec,city,age)

    需要注意的是,命名关键字参数必需连同参数名一起传入函数中,否则的话Python将会报错。

>>> player('Parker','Spurs',city = 'San Antonio',age = 32)
Parker Spurs San Antonio 32

    需要说明的一点是,各类参数可以组合传入函数当中,只是需要注意传入的顺序:必选参数>默认参数>可变参数>命名关键字参数>关键字参数。


>>>>

函数的调用

    当我们定义好函数后,相应的函数调用也就十分简单了,直接使用函数名即可完成调用。当然,并不是每个函数都需要我们去自定义,Python基础模块和各类库里面内置了大量函数,我们可直接调用,这一点和R也是类似的。看几个Python函数的例子:


>>> abs(-0.3)
0.3
>>> max(3,0,8,3)
8
>>> int(10.24)
10


好消息!

小白学视觉知识星球

开始面向外开放啦👇👇👇




下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


浏览 16
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报