python note 09 初识函数
1、函数
def my_len(): #自定义函数(相当于len) i = 0 for k in s: i += 1 print(i) print(my_len()) #输出None,因为没有返回值
2、返回值
#返回值的3种情况 # 没有返回值 —— 返回None # 不写return # 只写return:结束一个函数的继续 # return None —— 不常用 # 返回1个值 # 可以返回任何数据类型 # 只要返回就可以接收到 # 如果在一个程序中有多个return,那么只执行第一个 # 返回多个值 # 用多个变量接收:有多少返回值就用多少变量接收 # 用一个变量接收: 得到的是一个元组
3、break与return的区别
#break会结束当前条件语句和循环语句返回上一层级
#return会结束函数返回此时的值,后面的不再执行
def func(): l = ['老大','老二'] for i in l: print(i) if i == '老大': return None print('='*10)#此处不打印 ret = func() print(ret) #输出 老大 # None
4、形参与实参
#站在实参的角度上:
#按照位置传参
#按照关键字传参
#混着用可以:但是 必须先按照位置传参,再按照关键字传参数
# 不能给同一个变量传多个值
#站在形参的角度上
#位置参数:必须传,且有几个参数就传几个值
#默认参数: 可以不传,如果不传就是用默认的参数,如果传了就用传的
def classmaste(name,sex='男'): print('%s:%s' %(name,sex)) classmaste('张三') classmaste('张三','女') #输出 #张三:男 #张三:女
5、
#只有调用函数的时候
#按照位置传 : 直接写参数的值
#按照关键字: 关键字 = 值
#定义函数的时候:
#位置参数 : 直接定义参数
#默认参数,关键字参数 :参数名 = '默认的值'
#动态参数 : 可以接受任意多个参数
#参数名之前加*,习惯参数名args,
#参数名之前加**,习惯参数名kwargs
#顺序:位置参数,*args,默认参数,**kwargs
def sum(*args): n = 0 for i in args: n+=i return n print(sum(1,2)) #输出3 print(sum(1,2,3))#输出6 print(sum(1,2,3,4)) #输出10
def func(**kwargs): print(kwargs) func(a = 1,b = 2,c =3) #输出{'b': 2, 'a': 1, 'c': 3} func(a = 1,b = 2) #输出{'b': 2, 'a': 1} func(a = 1) #输出{'a': 1}
# 动态参数有两种:可以接受任意个参数
#*args : 接收的是按照位置传参的值,组织成一个元组
#**kwargs: 接受的是按照关键字传参的值,组织成一个字典
#args必须在kwargs之前
def func(*args,default = 1,**kwargs): print(args,kwargs)
6、动态参数的另一种传参方式
#站在形参的角度上,给变量加上*,就是组合所有传来的值。
def func(*args): print(args) func(1,2,3,4,5)
#站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散
def func(*args): print(args) l = [1,2,3,4,5] func(*l)
7、相关练习
1、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
def func(l): return l[1::2] print(func([1,2,3,4,5,6,7,8]))
2、写函数,判断用户传入的值(字符串、列表、元组)长度是否大于5。
def func(x): if len(x) > 5: print("长度大于5") return len(x) print(func('abcd'))
3、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者
def func(l): if len(l) > 2: print(l[0:2]) return l[:2] func([2,3,4,5])
4、写函数,计算传入字符串中【数字】、【字母】、【空格】 以及 【其他】的个数,并返回结果。
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('+0-0skahe817jashf wet1'))
5、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。
def func(x): if type(x) is str and x: for i in x: if i == ' ': return True elif x and type(x) is list or type(x) is tuple: for i in x: if not i: return True elif not x: return True print(func([]))
6、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]} def func(dic): for k in dic: if len(dic[k]) > 2: dic[k] = dic[k][:2] return dic print(func(dic))
7、写函数,接收两个数字参数,返回比较大的那个数字。
def func(a,b): if a>b: return a else: return b print(func(1,5))