1.函数的定义及使用2.参数传递2.1参数类型3.return返回值4.变量作用域5.python匿名函数练习5.1filter函数5.2map函数5.3reduce函数6.函数扩
1.函数的定义及使用 2.参数传递 3.return返回值 4.变量作用域 5.python匿名函数 练习5.1 filter函数 5.2 map函数 5.3 reduce函数 6. 函数扩展 7. 函数对象 8. 函数闭包 9. 装饰器 练习
函数知识点思维导图
1.函数的定义及使用 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
def 函数名(args,*args,**args) : 函数内容return something
创建和调用函数
def funB(a):a=3return a a=2 print('调用前',id(a)) print(id(funB(a))) print('调用后',id(a))def funcB(mylist):mylist.append(100)print('修改后的mylist:',mylist)return mylist=[10,20,30] print('调用前mylist:',mylist) funcB(mylist) print('调用后mylist:',mylist)
2.参数传递 python中对一个函数可以传递参数, 但是如何分辨是值传递还是引用传递,不是程序员手动控制的,而是Python根据你传入的数据对象,自动识别的. 如果传入的参数是可变对象:列表,字典,这时候为引用传递
python中对一个函数可以传递参数,但是如何分辨是值传递还是引用传递,不是程序员手动控制的,而是python根据你传入的数据对象,自动识别的。 如果你传入的参数对象是可变对象:列表,字典,这个时候就是引用传递,如果参数在函数体内被修改,那么源对象也会被修改。 如果你传入的参数对象是不可变的对象:数字,元组,字符串,这个时候就是值传递。那么源对象是不会改变的
2.1参数类型 必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。调用funcA() 函数,你必须传入一个参数,不然会出现语法错误
def funcA (str) : print(str)return funcA('bxfg' )
def funcA (name,age) : print(name)print(age)return funcA(age=30 ,name='python' )
def funcA (name,age=421.3 ) : print(name)print(age)return funcA(age=30 ,name='python' )funcA(name='python' )
def funcB (x,*args) : print(x)print(args)return funcB(2 ,3 ,4 ,'python' ,'java' ,None )args为元组类型def funcB (x,y,z,*args,**kwargs) : print(x,y,z)print(args)print(kwargs)return funcB(1 ,2 ,3 ,4 ,5 ,c=6 ,a='hello' ,b=10 )
3.return返回值 return语句表示退出函数,在函数中可存在可不存在,当存在时向调用方返回一个表达式的值
def add (a,b) : total = a + breturn totalprint(add(10 ,20 ))def ass (a,b) : total=a+bprint(total)return ass(10 ,20 )
4.变量作用域 作用域分为全局变量及局部变量。定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。
5.python匿名函数 lambda [arg1 [,arg2,…,argn]]:expression
例:
a=lambda : 'rongda' print(a())a=lambda x: x**2 print(a(10))b=lambda x:[i for i in x if i%2==0] print(b([1,2,3,4,5,6]))sum1=lambda arg1,arg2:arg1+arg2 print(sum1(10,20))
练习 输出索引为奇数位的并加入新的列表 def choose (lt) : lt1=[]for i in range(len(lt)):if i%2 ==1 :lt1.append(lt[i])print(lt1)return lt=[25 ,15 ,231 ,256 ,2541 ,21 ]choose(lt)
冒泡法函数表示 def pao (lt) :for i in range(len(lt)-1 ):for j in range(len(lt)-1 -i):if lt[j]>lt[j+1 ]:lt[j],lt[j+1 ]=lt[j+1 ],lt[j]print(lt)return pao([12 ,453 ,43 ,123 ,153 ])
定义一个函数,传入列表并判断其长度,如果大于2,那么仅仅保留前两个长度的内容,并将新内容返回给调用者 def length (lt) :if len(lt)>2 :lt=lt[0 :2 ]return ltlt=[3 ,12 ,43 ,45 ,23 ]print(length(lt))
定义函数,传入列表或元组对象,并判断所有奇数位索引对应的元素,并将其作为新的列表返回给调用者 def choose (lt) : lt1=[]for i in range(len(lt)):if i%2 ==1 :lt1.append(lt[i])print(lt1)return lt=[25 ,15 ,231 ,256 ,2541 ,21 ]choose(lt)
定义函数,传入字典判断的每一个value的长度,如果大于2,那么仅仅保留前两个长度的内容,并将新内容返回给调用者 def funcdict (**dict1) :for i,j in dict1.items():if len(dict1[i])>2 :dict1[i]=dict1[i][0 :2 ]print(dict1)return funcdict(k1="python" ,k2=[11 ,22 ,33 ,44 ,55 ])
5.1 filter函数 filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。 该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判, 然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
filter(function , iterable) list1=[1 ,2 ,3 ,4 ,5 ,6 ]def my_filter (n) :return n%2 ==1 list2=(filter(my_filter,list1)) print(list(list2)) print(list(filter(lambda x:x%2 ==1 ,list1)))
5.2 map函数 map的作用是以参数序列中的每一个元素调用 function函数,返回包含每次function函数返回值的list
def add (x,y) :return x + y list1=map(add, [1 ,3 ,5 ,7 ,9 ],[2 ,4 ,6 ,8 ,10 ]) print(next(list1)) print(next(list1)) print(next(list1)) print(next(list1)) print(next(list1))
5.3 reduce函数 reduce函数会对参数序列中元素进行总体计算。
from functools import reducedef add (x,y) :return x+y list1=reduce(add, [1 ,2 ,3 ,4 ,5 ]) print(list1)
6. 函数扩展 s='i love you so' print(s.ljust(30 ,'*' )) print(s.rjust(30 ,'*' )) print(s.center(30 ,"*" )) print(s.zfill(22 )) print(s.replace('love' ,'like' ,1 )) print(s.replace('o' ,'O' ,3 )) print(s.split('y' )) print(s.capitalize()) print(s.title()) print(s.swapcase()) print(s.count('love' )) print(s.startswith('i' )) print(s.endswith('o' )) print(s.isalnum()) print(s.isalpha()) print(s.islower()) print(s.isupper()) print(s.istitle()) lt = [1 ,125 ,3 ] print(lt.index(2 )) lt.reverse() print(lt) lt[::-1 ] print(lt) lt.sort() print(lt) d={'name' :'abc' ,'age' :123 } print(d.keys()) print(d.values())
7. 函数对象 def funcF (x,y,z) : print(x,y,z) funcF(1 ,2 ,3 ) funcF.b='hello python' print(funcF.b)
8. 函数闭包 1、概念: 在一个外函数中定义了一个内函数
内函数里运用了外函数的临时变量
并且外函数的返回值是内函数的引用
2、作用:保存函数的状态信息,使函数的局部变量信息依然可以保存下来
def outer (a) : b=10 def inner () : print(a+b)return inner demo=outer(5 ) demo() outer(5 )()
9. 装饰器 装饰器的作用是为已存在的函数添加新的功能,缓存,权限等方面运用
通过变量调用该函数
def hello () : print('我是最初的hello函数' ) f=hello f() print(hello.__name__)
函数对象有一个name 属性,可以获取函数的名字
print(hello.__name__)
假设增加hello()函数的功能,且完全不改变原来的代码,并完成功能的添加:用@语法,把装饰器至于函数的定义处
def outer (fune) :def inner (*args,**kwargs) : print('我是%s()函数' %fune.__name__)return fune(*args,**kwargs)return inner@outer#写在谁的前面即装饰哪个函数 def hello () : print('我是最初的helllo函数' ) hello()
练习 一.定义一个函数,需求:去除列表中重复的元素
def dele (ls) : lm=[]for i in ls:if i not in lm:lm.append(i)return lm ls=[2 ,13 ,2 ,45 ,13 ,2 ,45 ,13 ] print(dele(ls))
二.定义一个函数,需求:合并两个列表
def reunion (x,y) :for i in y:x.append(i)return x x=[1 ,2 ,34 ,56 ] y=[3 ,56 ,12 ,78 ] print(reunion(x,y))
三.定义一个函数, 需求:判断三个数中的最大值
def compare (ls) : ls.sort(reverse=True )return ls[0 ] ls=[12 ,58 ,25 ] print(compare(ls))
四.定义一个函数, 需求:实现斐波那契数列
def fei (n) : ls=[]a,b=0 ,1 while b return ls n=10000 print(fei(n))
五.lt = [{‘name’:’a’,’age’:20},{‘name’:’b’,’age’:50},{‘name’:’c’,’age’:12}], 请将lt 中元素的age 由大到小排序
lt = [{'name' :'a' ,'age' :20 },{'name' :'b' ,'age' :50 },{'name' :'c' ,'age' :12 }] lt.sort(key=lambda x:x['age' ], reverse=True ) print(lt)
六.将字符串:”k:1|k1:2|k2:3|k3:4”,处理成 python 字典:{‘k’:’1’, ‘k1’:’2’, ‘k2’:’3’,’k3’:’4’ }
s='k:1|k1:2|k2:3|k3:4' s_list = s.split('|' ) d={}for i in s_list:key, value = i.split(':' )d[key] = value print(d)