函数(二)

 全局与局部变量

  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)

 内置函数

 

posted @ 2019-01-02 16:29  joneylulu  阅读(163)  评论(0编辑  收藏  举报