python_day5

一:函数

1.函数的定义和调用:(没有定义就调用会报错)

>>> def MyFirstFunction():
    print('这是我创建的第一个函数!')    
>>> MyFirstFunction()
这是我创建的第一个函数!


>>> def MySecondFunction(name):
    print(name+'I love you!')
>>> MySecondFunction('小甲鱼')
小甲鱼I love you!
View Code
>>> def addFuction(num1,num2):
    result=num1+num2
    print(result)

>>> addFuction(1,2)
3
View Code

2.函数文档的定义和查看

>>> def MyFirstFunction(name):
    '函数定义过程中的name叫形参'
    #这里是注释
    print('传递进来的'+name+'叫做实参,因为它是具体的参数值')
    
>>> MyFirstFunction('wwq')
传递进来的wwq叫做实参,因为它是具体的参数值
 
>>> MyFirstFunction.__doc__
'函数定义过程中的name叫形参'
View Code

3.关键字参数(当参数很多时是个防止出错的好办法)

>>> def saySome(name,words):
    print(name+'->'+words)

    
>>> saySome('小甲鱼','让编程改变世界!')
小甲鱼->让编程改变世界!
>>> saySome('让编程改变世界!','小甲鱼')
让编程改变世界!->小甲鱼
>>> saySome(words='让编程改变世界!',name='小甲鱼')
小甲鱼->让编程改变世界!
View Code

4.默认参数

>>> def saySome(name='小甲鱼',words='让编程改变世界!'):
    print(name+'->'+words)
    
>>> saySome()
小甲鱼->让编程改变世界!
>>> saySome('wwq')
wwq->让编程改变世界!
View Code

5.收集参数/可变参数(如果参数里面先有收集参数,后面还有参数,就要使用关键字参数指明或者使用默认参数,不然会认为所有参数都会属于收集参数)

>>> def test(*params):
    print('参数的长度是:',len(params))
    print('第二个参数是:'+params[1])

    
>>> test(1,'wwq',2,3,4,3.14,5)
参数的长度是: 7
第二个参数是:wwq
View Code
>>> 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
View Code

二:函数与过程:

1.函数返回值

python中,函数如果没有定义return返回值,函数也有自己默认的返回值

>>> def test():
    print('hello')

 
>>> test()
hello

>>> temp=test()
hello
>>> temp
>>> 
>>> print(temp)
None
 
>>> type(temp)
<class 'NoneType'>
View Code

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)#这句是错误的
View Code

三:内嵌函数与闭包

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
View Code

2.内嵌函数(内嵌函数的定义和调用都在外部函数里面)

>>> def func1():
    print('func1()正在被调用')
    def func2():
        print('func2()正在被调用')
    func2()

    
>>> func1()
func1()正在被调用
func2()正在被调用
View Code

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
View Code
>>> 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
View Code

四: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
View Code
>>> def add(x,y):
    return x+y

>>> add(3,4)
7

>>> g=lambda x,y:x+y
>>> g(3,4)
7
View Cod

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]
原文地址:https://www.cnblogs.com/wwq1204/p/10688542.html