python_day5
一:函数
1.函数的定义和调用:(没有定义就调用会报错)
>>> def MyFirstFunction(): print('这是我创建的第一个函数!') >>> MyFirstFunction() 这是我创建的第一个函数! >>> def MySecondFunction(name): print(name+'I love you!') >>> MySecondFunction('小甲鱼') 小甲鱼I love you!
>>> def addFuction(num1,num2): result=num1+num2 print(result) >>> addFuction(1,2) 3
2.函数文档的定义和查看
>>> def MyFirstFunction(name): '函数定义过程中的name叫形参' #这里是注释 print('传递进来的'+name+'叫做实参,因为它是具体的参数值') >>> MyFirstFunction('wwq') 传递进来的wwq叫做实参,因为它是具体的参数值 >>> MyFirstFunction.__doc__ '函数定义过程中的name叫形参'
3.关键字参数(当参数很多时是个防止出错的好办法)
>>> def saySome(name,words): print(name+'->'+words) >>> saySome('小甲鱼','让编程改变世界!') 小甲鱼->让编程改变世界! >>> saySome('让编程改变世界!','小甲鱼') 让编程改变世界!->小甲鱼 >>> saySome(words='让编程改变世界!',name='小甲鱼') 小甲鱼->让编程改变世界!
4.默认参数
>>> def saySome(name='小甲鱼',words='让编程改变世界!'): print(name+'->'+words) >>> saySome() 小甲鱼->让编程改变世界! >>> saySome('wwq') wwq->让编程改变世界!
5.收集参数/可变参数(如果参数里面先有收集参数,后面还有参数,就要使用关键字参数指明或者使用默认参数,不然会认为所有参数都会属于收集参数)
>>> def test(*params): print('参数的长度是:',len(params)) print('第二个参数是:'+params[1]) >>> test(1,'wwq',2,3,4,3.14,5) 参数的长度是: 7 第二个参数是:wwq
>>> def test(*params,exp): print(len(params),exp) >>> test(1,2,3,'wwq') Traceback (most recent call last): File "<pyshell#45>", line 1, in <module> test(1,2,3,'wwq') TypeError: test() missing 1 required keyword-only argument: 'exp' >>> test(1,2,3,exp='wwq') 3 wwq
二:函数与过程:
1.函数返回值
python中,函数如果没有定义return返回值,函数也有自己默认的返回值
>>> def test(): print('hello') >>> test() hello >>> temp=test() hello >>> temp >>> >>> print(temp) None >>> type(temp) <class 'NoneType'>
2.函数变量的作用域问题
def discounts(price,rate): final_price=price*rate return final_price ord_price=float(input('请输入原价:')) rate=float(input('请输入折扣率:')) new_price=discounts(ord_price,rate) print('打折后的价格是:',new_price) print('final_price=',final_price)#这句是错误的
三:内嵌函数与闭包
1.global关键字
>>> count=5 >>> def func(): count=10 print(count) >>> func() 10 >>> count 5 #下面使用global关键字 >>> def func(): global count count=9 print(count) >>> func() 9 >>> count 9
2.内嵌函数(内嵌函数的定义和调用都在外部函数里面)
>>> def func1(): print('func1()正在被调用') def func2(): print('func2()正在被调用') func2() >>> func1() func1()正在被调用 func2()正在被调用
3.闭包,nonlocal关键字
>>> def FunX(x): def FuncY(y): return x*y return FuncY >>> i=FunX(8) >>> i <function FunX.<locals>.FuncY at 0x03506C48> # i 的类型是函数 >>> i(5) 40 >>> FunX(4)(9) 36
>>> def fun1(): x=5 def fun2(): x*=x return x return fun2() >>> fun1() Traceback (most recent call last): File "<pyshell#102>", line 1, in <module> fun1() File "<pyshell#101>", line 6, in fun1 return fun2() File "<pyshell#101>", line 4, in fun2 x*=x UnboundLocalError: local variable 'x' referenced before assignment >>> def fun1(): x=5 def fun2(): nonlocal x x*=x return x return fun2() >>> fun1() 25
四:lambda表达式
1.匿名函数
>>> def ds(x): return x*2+1 >>> ds(5) 11 >>> lambda y:y*2+1 #冒号前面是原函数的参数,冒号后面是函数的返回值 <function <lambda> at 0x03506E40> >>> g=lambda y:y*2+1 >>> g(4) 9
>>> def add(x,y): return x+y >>> add(3,4) 7 >>> g=lambda x,y:x+y >>> g(3,4) 7
lambda表达式的作用:
1.1python写一些执行脚本时,使用lambda就可以省下定义函数过程,比如说我们只是需要写个简单的脚本管理服务器时间,不需要专门定义一个函数然后再调用,使用lambda函数可以使代码更加精简。
1.2.对于一些比较抽象并且整个程序执行下来只调用一两次的函数,使用lambda不需要考虑命名问题。
1.3.简化代码的可读性。
2.两个厉害的BIF函数
filter()
#把非true的过滤掉 >>> filter(None,[1,0,False,True]) <filter object at 0x00711410> >>> list(filter(None,[1,0,False,True])) [1, True]
>>> def odd(x): return x%2 >>> temp=range(10) >>> show=filter(odd,temp) >>> list(show) [1, 3, 5, 7, 9]
也可以用一句话来写:
>>> list(filter(lambda x:x%2,range(10)))
[1, 3, 5, 7, 9]
map()映射:
>>> list(map(lambda x:x*2,range(10))) [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]