python基础:函数进阶

1.匿名函数 ---- lambda  ------ 针对简单函数
    lambda 参数:代码表达式逻辑
# filter:过滤器
def func(x):
    return x>5
list1 = [i for i in range(1,10)]
demo = filter(func,list1)
print(demo)#<filter object at 0x0000022E2382B4C8> 生成过滤器对象
demo1 = list(demo)
print(demo1)#[6, 7, 8, 9]

demo2 = list(filter(lambda x : x>5,list1))
print(demo2)#[6, 7, 8, 9]

2.函数作用域
--------------- a.函数外部不能直接访问函数内部的变量
--------------- b.函数内部能够访问函数外部的变量
--------------- c.函数内部不能修改函数外部变量,可变类型特殊
--------------- d.函数内部和函数外部,变量名相同, 但是id不同
def func():
    a = 'songsang'
# print(a)#NameError: name 'a' is not defined a是函数内部的变量,在外面不能调用,会报错
# func()#没有返回值也会报错,如果要运用函数内部的变量,函数内部要用return返回,函数外部要用变量接收

b = 'yesyes'
def func1():
    print(b)
func1()#yesyes 一般通过参数传入在函数内部调用


d = 2
e = [1,2,3]
def func2():
    d = 1
    e.append(4)
func2()
print(d)#2
print(e)#[1, 2, 3, 4] 可变类型改变的是原数据


f = '123'
print(id(f))#2129962547952
def func3():
    f = '345'
    print(id(f))
func3()#2129962757616
3.全局变量与局部变量 针对函数作用域
------- 全局变量 --- global
------- 局部变量 --- nonlocal  -- 嵌套函数
x = 123
def func():
    global x#声明全局变量就可以直接改变它而不用一个新的变量接收改变后的值
    x = x+1
    print(x)
func()#124
print(x)#124

# a = 1
# def func2():
#     nonlocal a
#     a = 2
# func2()
# print(a)#SyntaxError: no binding for nonlocal 'a' found
# #局部变量使用在嵌套函数中

def func1():
    b = 1
    print('这是func1函数')

    def func3():
        print('这是func3函数')
        b = 2
        print(b)

    func3()
    print(b)

func1()
# 这是func1函数
# 这是func3函数
# 2
# 1

def func1():
    b = 1
    print('这是func1函数')

    def func3():
        nonlocal b
        print('这是func3函数')
        b = 2
        print(b)

    func3()
    print(b)

func1()
# 这是func1函数
# 这是func3函数
# 2
# 2

------ 函数的特殊调用手段(方式)-------
6.闭包: 函数外部调用函数内部的函数
#-------内嵌函数---------
def demo1():
    print('demo函数')

    def demo2():      #内嵌函数只能在里面调用
        print('demo2函数')

    demo2()

demo1()
# demo函数
# demo2函数

print('-----'*25)

def demo1():
    print('demo函数')

    def demo2():
        print('demo2函数')

    return demo2


a = demo1()
print(a)
# demo函数
# <function demo1.<locals>.demo2 at 0x0000028C04C56B88> 将函数返回出来
a()#demo2函数  调用函数

print('-----'*25)

def demo1():
    print('demo函数')

    def demo2():
        print('demo2函数')

    def demo3():
        print('demo3函数')

    def demo4():
        print('demo4函数')

    return demo2,demo3,demo4


a = demo1()
print(a)
#(<function demo1.<locals>.demo2 at 0x00000221C787E438>,
# <function demo1.<locals>.demo3 at 0x00000221C7A97678>,
# <function demo1.<locals>.demo4 at 0x00000221C7A97708>)
#返回一个列表
a[1]()
#demo3函数

print('-----'*25)

def demo1():
    print('demo函数')

    def demo2():
        print('demo2函数')

    def demo3():
        print('demo3函数')

    def demo4():
        print('demo4函数')

    return demo2,demo3,demo4


f1,f2,f3 = demo1()
f1()
f2()
f3()
# demo函数
# demo2函数
# demo3函数
# demo4函数

def demo():
    print('demo函数')

    def func1():
        print('func1函数')

    def func2():
        print('func2函数')

    def func3():
        print('func3函数')

    return func1, func2, func3


f1, *f = demo()
print('*'*100)
f1()
print(f)#f并不是函数,剩余的都放在了f中
#func1函数
#[<function demo.<locals>.func2 at 0x000001D68779A168>, 
# <function demo.<locals>.func3 at 0x000001D6877CFEE8>]
7.递归函数:自己调用自己

 

def func1(n):
    if n == 1:  #一定要设置一个结束条件
        return 1
    return n*func1(n-1)

a = func1(5)
print(a)#120
8.回调函数:在一个函数中调用另外一个函数
def func1(n):
    if n == 1:
        print('song')
    else:
        print('yes')

def func2(j):
    print('func2函数')
    j(1)

func2(func1)
# func2函数
# song

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值