Python3.X中的函数

来源:互联网 发布:java replace '' 编辑:程序博客网 时间:2024/06/08 00:10

函数

当我们想要重复实现某一功能,又为了避免大量的copy相同代码段,就可以使用函数,将代码段进行封装,而后只需调用这个函数,就可以重复满足需求。Python已经提供了很多内置函数,例如:print()、max()等;但同时,我们也可以创建自己的函数。

如何定义函数

  • def 关键字、函数名、包括形式参数的圆括号
  • 缩进块中为函数体
  • 函数体的第一行语句可以是可选性的 docstring 文档字符串
  • return结束函数并返回值,不带表达式的 return 返回 None。

定义一个函数

def myPrint(n):    print(n)

定义一个函数,包含斐波那契数列的方法

def fibonacci(n):    r = []    a,b = 0,1    while b < n:        r.append(b)        a,b = b ,a+b    return r

函数的参数

定义的函数可以包括一下四种参数类型。

  • 必需参数
  • 默认参数
  • 可变参数
  • 关键字参数

1、必需参数

如果在定义函数的时候,定义了一个函数参数,在调用函数的时候,就必需传入一个参数,且传入的数量必须和定义时相同。传入的参数会按照位置顺序,依次索引。

def power(num,n):    x = num**n    return x

调用函数传入对应参数

print(power(102))#输出结果100

调用函数时不传入参数或缺少参数,会返回一个错误。

print(power())print(power(10))TypeError: power() missing 2 required positional arguments: 'num' and 'n'

2、默认参数
为一个或多个参数指定默认值。在调用函数时,如果没有为默认参数传入值,函数会使用默认参数的默认值。

def power(num,n=2):    x = num**n    return xprint(power(10))#输出结果100

可以是多个默认值

def power(num=10 ,n=2):    x = num**n    return xprint(power())#输出结果100

注意事项:

  • 设置默认参数时,默认参数要在必需参数后。
  • 当默认值是可变对象时,后续调用过程中会累积(前面)传给它的参数,例如:list列表、dict字典等。
def add (a,l =[] ):    l.append(a)    return lprint(add('zero'))print(add(1))print(add('c'))#输出结果['zero']['zero', 1]['zero', 1, 'c']

如果我们不希望默认值变化,只需将默认值设定为不可变对象

def add (a,l = None ):    if l is None:        l=[]    l.append(a)    return lprint(add('zero'))print(add(1))print(add('c'))#输出结果['zero'][1]['c']

3、可变参数

也可以叫不定长参数,指传入的参数个数是可变的,可以是 0 到任意个,这些参数会包装在一个元组中。

def sums(*num):    x = 0    for n in num:        x = x + n    return xprint(sums(1,1,2,3,5,8)))#输出结果20

如果已知一个list列表或元祖,想要传入函数中只需要变量名前加 * 即可

def l(*num):    sum = 0    for n in num:        sum = sum + n    return sumlist = (1,1,2,3,5,8)print(l(*list))#输出结果20

4、关键字参数
而关键字参数允许你传入0个到任意个含参数名的参数,这些关键字参数会包装成为一个dict。

def function(**keyword):    return keywordprint(function())#输出结果{}
def function(**keyword):    return keywordprint(function(zero=0,one=1,two=2,three=3))#输出结果{'zero': 0, 'one': 1, 'two': 2, 'three': 3}

跟可变参数一样,关键字参数也可以把 dict 字典转化后传入,只需要在变量前加 ** 即可。

def signUp(userName,passWord,**other):    print(userName,passWord,other)    return userName, passWord, otherinfm = {'email':'xxx@xxx.com','phone':'182xxxxxx71'}signUp('username','123456',**infm)

我们可以通过 if 判断关键字参数中是否存在某个 key 值。

def signUp(userName,passWord,**other):    if 'email' in other:        print('Contact me')    if 'age' in other:        pass    return userName, passWord,otherinfm = {'email' : 'xxx@xxx.com','phone': '182xxxxxx71'}print(signUp('username','123456',**infm))#输出结果Contact me('username', '123456', {'email': 'xxx@xxx.com', 'phone': '182xxxxxx71'})

*后面的参数,将被视为命名关键字参数,这里*仅作为分隔符。

def signUp(userName,passWord,*,email,phone):    print(userName,passWord,email,phone)    return userName, passWord, email, phonesignUp('username','123456',email = 'xxx@xxx.com',phone = '182xxxxxx71')#输出结果username 123456 xxx@xxx.com 182xxxxxx71

可变参数后面的参数也被认为是命名关键字参数。

def signUp(userName,passWord,*other,email,phone):    print(userName,passWord,other,email,phone)    return userName, passWord, other, email, phone

@注意:如果不使用*分隔符,Python将无法区分必需参数和命名关键字参数。

命名关键字参数也可以给定默认值,调用时将无需传入参数名。

def signUp(userName,passWord,*,email='xxx@xxx.com',phone):    print(userName,passWord,email,phone)    return userName, passWord, email, phonesignUp('username','123456',phone = '182xxxxxx71')#输出结果username 123456 xxx@xxx.com 182xxxxxx71

@注意:若命名关键字参数未指定默认值,调用时必须传入参数名,否则将报错。

小结

  • Python函数参数可以混合使用。
  • 参数定义顺序:必选参数、默认参数、可变参数、命名关键字参数和关键字参数
原创粉丝点击