Day05—Python3.x中关于函数和模块的使用(定义函数、调用函数、函数的参数)

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。

函数

  • 定义函数

在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号 : ,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

即,一般格式如下:

def 函数名(参数列表):
    函数体

我们定义个hello函数来输出"Hello World!":

# 定义了一个hello函数
def hello() :
    print("Hello World!")
  • 调用函数

定义一个函数以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。

如下定义并调用了 hello() 函数:

# 定义了一个hello函数
def hello() :
    print("Hello World!")
    
#调用hello函数
hello()
  • 函数的参数

Python的函数定义非常简单,但灵活度却非常大。

除了正常定义的必需参数外,还可以使用默认参数可变参数关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。

  1. 必需参数:

必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
调用 printStr() 函数,你必须传入一个参数,不然会出现语法错误:

# 定义了一个printStr函数
def printStr(str) :
 	# 打印任何传入的字符串
    print(str)
    return
    
#正确调用printStr函数
# 调用函数
printStr("我要调用用户自定义函数!")
printStr("我是回忆哆啦没有A梦")

#调用 printme 函数,不加参数会报错
printStr() # 会报错

报错信息:

Traceback (most recent call last):
  File "demo.py", line 6, in <module>
    printStr()
TypeError: printStr() missing 1 required positional argument: 'str'    
  1. 关键字参数:

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

演示函数参数的使用不需要使用指定顺序:

#可写函数说明
def printStr( name, age ):
   "打印任何传入的字符串"
   print ("名字: ", name)
   print ("年龄: ", age)
   return
 
#调用printStr函数
printStr( age=26, name="哆啦" )
#---------------------------------
#上面代码,输出结果:
#名字:  哆啦
#年龄:  26
  1. 默认参数:

调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 age 参数,则使用默认值:

 
#可写函数说明
def printStr( name, age = 10 ):
   "打印任何传入的字符串"
   print ("名字: ", name)
   print ("年龄: ", age)
   return
 
#调用printStr函数
printStr( age=26, name="哆啦" )
print ("------------------------")
printinfo( name="哆啦" )

上面代码,输出结果:

名字:  哆啦
年龄:  26
------------------------
名字:  哆啦
年龄:  10

设置默认参数时,有几点要注意:

  • 一是必选参数在前,默认参数在后,否则Python的解释器会报错;
  • 二是如何设置默认参数。

当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。

使用默认参数有什么好处?最大的好处是能降低调用函数的难度

  1. 可变参数

在Python函数中,除了参数还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。

我们以数学题为例子,给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……。

要定义出这个函数,我们必须确定输入的参数。由于参数个数不确定,我们首先想到可以把a,b,c……作为一个list或tuple传进来,这样,函数可以定义如下:

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

但是调用的时候,需要先组装出一个listtuple

calc([1, 2, 3])
# 14
calc((1, 3, 5, 7))
# 84

如果利用可变参数,调用函数的方式可以简化成这样:

calc(1, 2, 3)
# 14
calc(1, 3, 5, 7)
# 84

所以,我们把函数的参数改为可变参数

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

定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数:

calc(1, 2)
# 5
calc()
# 0

如果已经有一个list或者tuple,要调用一个可变参数怎么办?可以这样做:

nums = [1, 2, 3]
calc(nums[0], nums[1], nums[2])
# 14

这种写法当然是可行的,问题是太繁琐,所以Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:

nums = [1, 2, 3]
calc(*nums)
# 14

*nums表示把nums这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

回忆哆啦没有A梦

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值