''' function 功能,函数 问题:一个由数字组成的列表,每次取其中两个判断大小,最后找出这个列表中最大的数 函数就是对代码进行一个封装。把实现,某一功能的相同代码,进行封装到一起。下次需要使用时,就不需要再进行代码编写,直接调用即可。 好处: 增加代码的复用性,增加代码可读性,减少代码的编写量,降低维护成本 函数可以看成,解决某类问题的 '工具' 定义方法: ''' def function_name(params): block return expression(表达式)/value ''' def 关键字表示定义一个函数 function_name 函数名,和变量名的命名要求相同,以字母和_开头,可以包含字母、数字和_ params 表示参数,可以是零个,一个 或者多个参数,函数参数不用指定参数类型 '''
例子
def fun(a): print('hello',a)
2.python中函数的参数详解
1.必备参数:参数没有默认值 2.默认参数:参数有默认值,调用函数是可以传参也可以不传参,不传参时,参数是默认值 3.不定长参数: 可在定义时定义,也可在传入时传入 定义方法: def function_name(*args,**kwargs): *args 将传入参数包装成元组 **kwargs将传入参数包装成字典
例子:
#不需传参数 def fun(): print('hello python') print('人生苦短,我用python') #必备参数 def fun2(a): print('必备参数:',a) #默认参数 def fun3(a=3): print('默认参数:',a) #可选参数 0个-多个 #*arg def fun4(*arg): #默认将我们的传入参数,包装成元组 print('arg:',arg) fun4(1,2,4,5,6,7) fun4(li,1,2,4,'ssss',{'a':2}) tu =(1,2,3,4) fun4(*tu) fun4(*li) fun4(*{'s':2}) #**kwarg def fun5(**kwarg): #默认将我们传入的参数,包装字典 print('kwarg',kwarg) #空集合 se = set() #空字典 {} di = dict(a=1) ## **kwarg 传值的时候,必须要满足字典的定义 fun5(a=1,b=3,c=4,d=5) fun5(**di) ###5种传参,混合用时,需要足以的事项 ''' 1.默认参数,必备参数 2.*arg ,默认参数,必备参数 3.*arg,**kwarg ''' #1 def fun6(b,m=2): #默认参数,必须放到,必备参数之后 print('必备参数',b) print('默认参数',m) fun6(1,3) fun6(m=10,b=5) #2 def fun7(b,m=2,*arg): print('必备参数',b) print('默认参数',m) print('arg',arg) def fun8(*arg,b,m=2): #当*arg 在最前时,后面参数,必须指定 print('必备参数',b) print('默认参数',m) print('arg',arg) #fun8(1,2,3,4,5,6,7) fun8(1,2,3,4,5,b=6,m=7) fun8(1,2,3,4,5,m=6,b=7) def fun9(*arg,m=2,b): #当*arg 在最前时,默认参数可以放到必备参数前面 print('必备参数',b) print('默认参数',m) print('arg',arg) fun9(1,2,3,4,5,b=6,m=7) #3 def fun10(*arg,**kwarg): # **kwarg,只能放到最后 print('arg',arg) print('kwarg',kwarg) fun10(1,2,3,4,5,6,7) # arg (1, 2, 3, 4, 5, 6, 7) # kwarg {} fun10(1,2,3,4,a=2,b=3)
return有两个作用:1.用来返回函数的运行结果,或者调用另外一个函数。比如max()函数 2.函数结束的标志。只要运行了return,就强制结束了函数。return后面的程序都不会被执行。 如果函数中没有写return,其实函数运行结束时,默认执行了 return None return语句的位置是可选的,不是固定出现再函数的最后,可以自定义在函数中的任何地方。
例子
#如果函数中没有写return 其实函数运行结束时,默认执行了 return None a =fun() print(a) def test_return(a,b): if a>b: return a elif a<b: return b else: return '一样大' print('比较结束*****') #不会打印 #return print 进行区别: #return:返回函数运行的结果 #print :打印输出,只是用来看的 def test_return2(a,b): return 'jianeng' if a>b: print( a) elif a<b: print( b) else: print( '一样大') print('比较结束*****')
4.lambda匿名函数
没有函数名的函数 g = lambda x:x+1 lambda简化了函数定义的书写形式。是代码更为简洁,但是使用函数的定义方式更为直观,易理解 lambda的应用场景: 1.有些函数如果只是临时一用,而且它的业务逻辑也很简单时,就没必要用def 来定义,这个时候就可以用lambda。 2.函数都支持函数作为参数,lambda 函数就可以应用
例子
#lambda x(参数) :x +1 (return x+1) (lambda x :x +1)(5) g = lambda x:x+1 g(1) #传入多个参数 add = lambda x,y:x+y #判断偶数? b =lambda x:x%2==0 def judge(x): if x %2==0: return True else: return False
5.作业
1 判断1 - 100 内能够被 3 和 5 整除的数,用while和for循环来做

#方法1 for循环 for i in range(1,101): if i % 3 == 0 and i % 5 ==0: #同时被3和5整除 print(i) #方法2 while循环 i=1 while i <= 100: if i % 3 == 0 and i % 5 ==0: print(i) i+=1
2.定义一个函数,必须包含4种参数形式,然后打印这4个参数,最后返回'OK'。

def test(a,b=1,*arg,**kwarg): print(a) print(b) print(*arg) print(**kwarg) return 'ok' ##test(1) # test(1,b=1) ##test(1,2) #test(1,b=2) ##test(1,b=2) ##test(b=2,1) #默认参数不能放到必备参数前面 def t1(*arg,a,b=1,**kwarg): print(arg) print(*arg) print(a) print(b) print(kwarg) return 'ok' ##t1(1,2,3,4,56) #缺a #t1(1,2,3,b=1,998) #t1(1,2,3,b=1,a=998) #当可变参数(*arg)在前面的时候,默认参数b是可以放到必备参数a前面的(必须带上参数名a=998) ##t1(1,2,3,b=1,a=998,**({'xx':1, 'yy':2})) #a=1 b=2 ##t1(*(1,2,3),b=1,a=998,**({'xx':1, 'yy':2}))
3.定义一个函数,能够输入字典和元组。将字典的值(value) 和 元组的值交换,交换结束后,打印并且返回 字典和元祖。

def exchange(*args,**kwargs): tu = list(args) dic = kwargs print(tu,dic) j=0 #元组的索引值 if len(dic) <= len(tu): # 字典len小于或者等于tu的情况下 for i in dic: # 遍历字典的key(键)--》i print(i,dic[i],tu[j]) dic[i],tu[j] = tu[j],dic[i] j+=1 else: #当字典元素多于元组时,执行以下代码 k=0 while k < len(tu): for i in dic: dic[i],tu[k] = tu[k],dic[i] k+=1 tu = tuple(tu) print(tu,dic)