• Python 函数(二)



    Python 3 函数(匿名函数、偏函数 and 变量作用域:全局变量、局部变量)

    一、匿名函数:没有名字,也不再使用 def 语句这样标准的形式定义的一个函数。

      1、python 3 使用 lambda 来创建匿名函数,;
      2、lambda 只是一个表达式,函数体比 def 简单;
      3、lambda的主体是一个表达式,而不是一个代码块,仅能封装有限的逻辑进去;
      4、lambda 函数拥有自己的命名空间,不能访问自己参数列表之外或全局命名空间里的参数;
      5、lambda 函数的语法只包含一个语句,如下:
            lambda [arg1 [,arg2,.....argn]]:expression

    例一:

    sum = lambda var1, var2: var1 + var2;
    print ("var1 + var2 的值为 : ", sum( 10, 20 ))
    print ("var1 + var2 的值为 : ", sum( 20, 20 ))
    Python 3 结果30
    Python 3 结果40

    例二:

    add = lambda x: x + 2
    print(add(10))
    Python 3 结果:12

    例三 (函数可以作为另外一个函数的参数):

    def calcute(a, b, func):
    v = func(a, b)
    return v
    v = calcute(9, 3, lambda x, y : x / y)
    print(v)
    Python 3 结果:3.0

    例四 (key 可以指定根据什么条件进行排序):

    l = [(3, 12), (6, 23), (4, 20)]
    l.sort(key=lambda x:x[1], reverse=True)
    print(l)
    Python 3 结果:[(6, 23), (4, 20), (3, 12)]

    例五(key 可以指定根据什么条件进行排序):

    l = [{'name':'To', 'age':10},
    {'name':'Je', 'age':9},
    {'name':'Ja', 'age':20},
    {'name':'Ro', 'age':19}]
    l.sort(key=lambda x:x['age'])
    print(l)
    Python 3 结果:[{'name': 'Je', 'age': 9}, {'name': 'To', 'age': 10},
    {'name': 'Ro', 'age': 19}, {'name': 'Ja', 'age': 20}]

    二、偏函数:相当于给函数设置默认参数

    注:对于有很多可调用对象,并且许多调用都反复使用相同参数的情况,使用偏函数比较合适。

    例一:

    import functools
    def add(a, b):
    return a + b
    func = functools.partial(add, b=3)
    print(func(10))
    Python 3 结果:13

    三、变量作用域:变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。

    1、Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
    2、Python的作用域一共有4种,分别是:
        L (Local) 局部作用域;
        E (Enclosing) 闭包函数外的函数中;
        G (Global) 全局作用域;
        B (Built-in) 内建作用域;
        以 L –> E –> G –>B 的规则查找;
        即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

    例一:

    total = 0; # 这是一个全局变量
    # 可写函数说明
    def sum( arg1, arg2 ):
        #返回2个参数的和."
        total = arg1 + arg2; # total在这里是局部变量.
        print ("函数内是局部变量 : ", total)
        return total;
    #调用sum函数
    sum( 10, 20 );
    print ("函数外是全局变量 : ", total)
    Python 3 结果:30
    Python 3 结果:0

    例二(在函数中可以直接访问全局变量):

    a = 10  #全局变量
    def test():
    global a    # 需要使用 global 关键字声明
    a = 20
    print(a)    #在函数中可以直接访问全局变量
    test()
    print(a)
    Python 3 结果:20
    Python 3 结果:20

    例三:

    def test1():
    a = 30  #局部变量,和全局变量的a不是同一个变量
    print(a)
    test1()
    print(a)
    Python 3 结果:30
    Python 3 结果:20

    例四:函数中的参数也相当于函数的局部变量

    x = 10
    y = 'a'
    def swap():
    global x
    global y
    temp = x
    x = y
    y = temp
    swap()
    print(x, y)
    Python 3 结果:a 10

    例五:在函数中,可以修改全局的可变对象的内容

    def test2(a, b):
    if a > b:
    x = 10
    print(x)
    test2(10, 2)
    Python 3 结果:10

    例六:

    l = [1, 2, 3, 4]
    def test3():
    l[0] = 10
    test3()
    print(l)
    Python 3 结果:[10, 2, 3, 4]

    例七:

    num = 1
    def fun1():
        global num  # 需要使用 global 关键字声明
        print(num)
        num = 123
        print(num)
    fun1()
    Python 3 结果:1
    Python 3 结果:123

    例八:

    def outer():
        num = 2
        def inner():
            nonlocal num   # nonlocal关键字声明
            num = 6
            print(num)
        inner()
        print(num)
    outer()
    Python 3 结果:6
    Python 3 结果:6
    例九:以下程序执行,会报错:UnboundLocalError: local variable 'a' referenced before assignment
    a = 10
    def test():
        a = a + 1
        print(a)
    test()


                   

    欢迎关注小婷儿的博客:https://blog.csdn.net/u010986753

    有问题请在博客下留言或加QQ群:483766429 或联系作者本人 QQ 87605025

    OCP培训说明连接:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA

    OCM培训说明连接:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA


    小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。

    小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。

    小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。

    重要的事说三遍。。。。。。



  • 相关阅读:
    【PAT甲级】1063 Set Similarity (25 分)
    【PAT甲级】1062 Talent and Virtue (25 分)
    【PAT甲级】1061 Dating (20 分)
    Codeforces Global Round 5E(构造,思维)
    Codeforces Round #592 (Div. 2)G(模拟)
    POJ 刷题进程.1
    登录页面 (带遮罩层的) ---2017-04--5
    回答: 2017-03-19的关于css+div布局的疑问 2017-04-05
    关于js高度和宽度的获取 ----2017-03-29
    如何用写js弹出层 ----2017-03-29
  • 原文地址:https://www.cnblogs.com/pythonbao/p/9037403.html
Copyright © 2020-2023  润新知