zoukankan      html  css  js  c++  java
  • 函数(二)

     全局与局部变量

    1. 定义在函数外部一级代码的变量,叫全局变量,全局可用。
    2. 局部变量就是指定义在函数里的变量,只能在局部生效。
    3. 在函数内部,可以引用全局变量。
    4. 如果全局和局部都有一个变量叫name,函数查找变量的顺序是由内而外的。

    locals()对象的值不能修改,globals()对象的值可以修改。

     1 1 #test globals() and locals()
     2  2 
     3  3 z=0
     4  4 def f():    
     5  5     z = 1    
     6  6     print (locals())        
     7  7     locals()["z"] = 2    
     8  8     print (locals())      
     9  9 f() 
    10 10 globals()["z"] = 2
    11 11 print (z)
    可以得出,两个print (locals())的结果是一样的,说明没有修改成功。而print (z)的值是2,说明修改成功了
    

      

    作用域

    作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

    如何在函数里修改全局变量?

    name = "Alex Li"
    
    def change_name():
        global name
        name = "Alex 又名 金角大王,路飞学城讲师"
        print("after change", name)
    
    
    change_name()
    
    print("在外面看看name改了么?", name)

    global name的作用就是要在函数里声明全局变量name ,意味着最上面的name = "Alex Li"即使不写,程序最后面的print也可以打印name。

    结果:

    1. after change Alex 又名 金角大王,路飞学城讲师
    2. 在外面看看name改了么? Alex 又名 金角大王,路飞学城讲师

    嵌套函数

    name = "Alex"
    
    def change_name():
        name = "Alex2"
    
        def change_name2():
            name = "Alex3"
            print("第3层打印", name)
    
        change_name2()  # 调用内层函数
        print("第2层打印", name)
    
    
    change_name()
    print("最外层打印", name)
    View Code

    输出

    第3层打印 Alex3
    第2层打印 Alex2
    最外层打印 Alex

    匿名函数

    匿名函数就是不需要显示的指定函数名。主要和其他函数搭配使用。

    res = map(lambda x:x**2,[1,5,7,4,8])
    for i in res:
        print(i)

    输出

    1
    25
    49
    16
    64

    高阶函数

    变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数

    只需满足以下任意一个条件,即是高阶函数:

    • 接受一个或多个函数作为输入
    • return 返回另外一个函数

    递归

    在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数

    def calc(n):
        print(n)
        if int(n/2) ==0:
            return n
        return calc(int(n/2))
    
    calc(10)

     内置函数

  • 相关阅读:
    Windows7 如何添加excel,word到鼠标右键
    Java程序安装失败
    交换机
    Hbase
    Hive
    Hdoop
    PL/SQL连不上,报 ORA-12170:TNS 连接超时
    Error in invoking target 'mkldflags ntcontab.o nnfgt.o' of mkdefile '/u01/app/oracle/product/11.2.0
    用js 的for循环打印三角形,提取水仙花数,求本月多少天
    JS循环、数组与练习题
  • 原文地址:https://www.cnblogs.com/joneylulu/p/10209278.html
Copyright © 2011-2022 走看看