栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python基础:函数进阶

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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)# 生成过滤器对象
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函数
# .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)
#(.demo2 at 0x00000221C787E438>,
# .demo3 at 0x00000221C7A97678>,
# .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函数
#[.func2 at 0x000001D68779A168>, 
# .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

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293659.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号