python全栈闯关--9-函数
作用
使用函数,可以提高代码的可复用性、可读性。避免重复的编写功能相同的代码。
定义
def 函数名()
函数体
def my_function(): pass def my_function(a, b, c): pass
调用
函数名()
f = 函数 名()
返回值
无返回值
无return 函数体执行完毕,自动返回
只写returen,结束一个函数
return None
无法返回值结束时,无论是否指定返回return,获取到的结束值都为None
一个返回值
return 返回值
可以返回任何数据类型
只要返回数据就可以接收
如果一个函数中有多个return,只执行一个return
多个返回值
return 返回值1,返回值2,返回值3
用多个变量接收:有多少返回值就有多少变量接收
用一个变量接收:得到一个元祖
函数体外,接收到的值为返回值组成的元祖,也可以跟返回值相同个数的变量接收
参数
实参
函数调用时的传的参数,为实参
位置参数,按照位置传递参数
关键字参数,按照关键字传递参数
位置参数和关键字参数,可以混合使用,必须先按照位置传,在按照关键字传
不能给一个变量传多个参数
形参
定义函数的使用,叫做形参
位置参数:必须传,有几个参数,传几个参数;
默认参数:关键字参数,参数名=‘默认的值‘
动态参数:
参数名前加*,习惯参数名*args
参数名前加**,习惯参数名**kwargs
顺序:位置参数,*args,默认参数,**kwargs
动态参数
站在形参的位置动态传递
*args: 可以接收按照位置参数传值,组成一个元祖
def func(*args): for i in args: print(i) func(1, 2, 3, 4, 5, 6)
**kwargs: 可以按照关键传递参数的值,组成一个字典
def func(**kwargs): for k in kwargs.items(): print(k) func(a=1, b=2, c=3)
站在实参的位置动态传递
在实参前面加*或者**,把列表或者字典打散按顺序传递
def func(*l): print(l) func(*(1, 2, 3, 4, 5))
# 相当于:func(1, 2, 3, 4, 5)
def func(**l): print(l) func(**{'a': 1, 'b': 2, 'c': 3})
# 相当于:func(a=1, b=2, c=3)
函数的注释
def func(): ''' 这个函数实现了什么功能 参数1: 参数2: :return:是字符串或列表的长度等 ''' pass
参数陷阱
def bee(l=[]): l.append(1) # 由于每次调用,使用的都是默认的列表,所以列表一致追加1 print(l) bee() # [1] bee() # [1, 1] bee() # [1, 1, 1] bee() # [1, 1, 1, 1]
默认值为可变变量时,会产生参数陷阱,不指定默认参数时,多次调用,会一直使用同一个列表或者字典
def bee(k, dic={}): dic[k] = 1 print(dic) bee('a') # {'a': 1} bee('b') # {'a': 1, 'b': 1} bee('c') # {'a': 1, 'b': 1, 'c': 1} bee('d') # {'a': 1, 'b': 1, 'c': 1, 'd': 1} bee('e') # {'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1}
作业
# 2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。 def func(l): return l[1::2] print(func([0, 1, 2, 3, 4, 5, 6]))
# 3、写函数,判断用户传入的值(字符串、列表、元组)长度是否大于5。 def func(l): return len(l) > 5 print(func([0, 1, 2, 3, 4, 5, 6]))
# 4、写函数,检查传入列表的长度,如果大于2, # 那么仅保留前两个长度的内容,并将新内容返回给调用者。 def func(l): return l[:2] print(func([0, 1, 2, 3, 4, 5, 6]))
# 5、写函数,计算传入字符串中【数字】、【字母】、【空格】 以及 【其他】的个数,并返回结果。 def func(s): dic = {'num': 0, 'alpha': 0, 'space': 0, 'other': 0} for i in s: if i.isdigit(): dic['num'] += 1 elif i.isalpha(): dic['alpha'] += 1 elif i.isspace(): dic['space'] += 1 else: dic['other'] += 1 return dic print(func('skghfoiw8qpe uqkd@!@'))
#7、写函数,检查传入字典的每一个value的长度,如果大于2, # 那么仅保留前两个长度的内容,并将新内容返回给调用者。 def func(s): for k in s: v = str(s[k]) if len(v) > 2: s[k] = v[:2] if s[k].isdigit(): s[k] = int(s[k]) return s print(func({'k1': 1234, 'k2': 'adfadsfasdf'}))