Python3基础之初识函数

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

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

def sum(a,b):
s = a+b
return s
print(sum(1,2))

上述就是一个简单的函数,且是有参函数,a,b为该函数的参数。

函数分为有参函数,无参函数。

函数参数

在python所有的类,函数,方法,表达式中,参数分为形参和实参。

而函数中的参数实则都是形参,如a,b没有具体的值,只是单纯变量,而在调用函数是,通过实参1,2映射到形参a,b的方式实现。

函数参数有位置参数,默认参数,可变参数,关键字参数。

位置参数

def func(a):
print(a)

此处的a就是位置参数,可以有多个,但调用函数时,实参的位置顺序和数量一定要跟位置参数保持一致。

 

默认参数

def func(a,n=2):
s = 1
while n:
s *= a
n -= 1
print(s)
func(3,n=2)  # 计算n次平方函数

python 函数限制参数类型 python3 函数 参数类型_python 函数限制参数类型

此处a是位置参数,而n=2就是默认参数,默认给点参数一个值为默认参数,默认参数在函数参数内必须放在

位置参数和可变参数之后。如果位置确定,在映射默认参数时,可直接填入实参,如下:

func(3,2)也可以实现函数调用。

 

可变参数/关键字参数

*args为可变参数,**kwargs为关键字参数。

def func(*args,**kwargs):
print("关键字参数:", args,kwargs)
func()

python 函数限制参数类型 python3 函数 参数类型_python 函数限制参数类型_02

实践出真知!看上去*args,**kwargs很高大上的样子,但打印出一看不就是tuple和dict吗?

上面我们说过,调用函数就是实参映射形参,当一个函数的形参数量是不确定的时候就会用到关键性参数,

func函数内放入参数值,func(1,2,3),那得到:

python 函数限制参数类型 python3 函数 参数类型_python 函数限制参数类型_03

分解逻辑就是args = (1,2,3),而args就是形参a,b,c的集合,即a,b,c = (1,2,3),进一步理解如下:

def func(*args):
for x in args:
print(x)
func(2,3,4,5,6)

python 函数限制参数类型 python3 函数 参数类型_调用函数_04

同理**kwargs是字典,所以函数传入的实参形式为func(a=1,b=2,c=3),这样a,b,c = {"a":1,"b":2,"c":3},

所以可以把可变参数和关键字参数*args,**kwargs理解为迭代器。

注: args和kwargs的字样不是固定的,但python默认使用这两者为代表,读者可以自已定义如:*nums,**dicts;前面的*一定要有!

 

函数返回值

函数不是直接显示输出的,相反,它会处理一些数据并返回一个或一组值。在函数中用return语句将值返回

到调用函数的代码行,返回值能将程序大部分繁重的工作移交到函数中去完成,从而简化主程序。

上述函数是为了让读者更好的验证函数的功能,正常在编写函数时,很少会通过print输出值,而是使用return返回函数值。

返回值可以是任一类型的值:字符串,列表,字典等其他复杂的数据结构。

return

语法:return [expression],可选的将一个表达式传给调用者

单纯的return后没有任何返回值跟return None是一个意思。

 

yield

函数使用yield返回的是一个生成器generator。

def func():
for i in range(5):
yield(i)
print(func())

python 函数限制参数类型 python3 函数 参数类型_python 函数限制参数类型_05

 

如果使用return

def func():
for i in range(5):
return i
print(func())

python 函数限制参数类型 python3 函数 参数类型_python 函数限制参数类型_06

如果返回次数只有一次,那return和yield没有区别,但如果调用函数多次呢?通过遍历来看下:

for x in func():
print(x)

使用return的报错了:

python 函数限制参数类型 python3 函数 参数类型_默认参数_07

而用yield的则输出:

python 函数限制参数类型 python3 函数 参数类型_默认参数_08

具体yield用法可以查看网上资料。