python全栈 S3--15day--(2)

一、局部变量与全局变量

  全局变量:顶头写的,无缩进,在整个文件的任何地方都可以进行调用

  局部变量:在子程序中,有缩进,

  在子程序中,如果局部变量和全局变量重名,那么调用局部变量的时候,只调用局部变量不会调用全局变量,如果在子程序中也想要直接调用全局变量那么可以global +变量名,获取的值就是全局变量,可以对其进行修改,注意golbal的添加位置

name="jay"
def test():
    global name
    name="james"
    print(name)
test()
print(name)
name="jay"
def test():
    # name="james"这个局部变量不能在golbal的前面,否则会报错
    # global name声明调用全局变量
    # name="jake"修改全局变量
    print (name)
test()

如果不使用golbal关键字,那么只能调用全局变量不能给它重新赋值,如果重新赋值的话就会报错,就像下面的一样

name="james"
def test():
    print (name)
    name="jay"
    print (name)
test()

如果不使用golbal关键字,能调用全局变量不能给它重新赋值,但是可以对全局变量进行修改,前提是全局变量是一个列表

name=["jay","james",1,2,3,4,]
def test ():
    name.append("nelly")
    print (name)
test()

注:一般在使用的过程中全局变量写成大写的形式,局部变量写成小写的形式,这样避免引起冲突,方便调用,如果不是一个级别调用全局变量,那么不会受到影响

 

 

3、函数可以进行嵌套

name="james"
def test():
    name="jay"
    print(name)
    def jake():
        def aimee():
            def smile():
                print ("lixiao")
        print("jdkjf")
    print ("jay最帅")
    jake()
test()

4、nonlocal这个是寻找上一级的变量

name="jay"
def test():
    name="james"
    def jake():
        nonlocal name
        print (name)
    jake()
    print (name)
test()

5、前向引用

  三个例子,调用一个函数的时候会顺着调用另一个函数,下面这几个例子就叫前向引用也叫风湿理论

# 三个例子
# 1、会报错因为调用的函数根本不存在
# def test():
#     print ("jay")
#     jake()
# test()
#


# 不会报错
# def jake():
#     print ("james")
# def test():
#     print ("jay")
#     jake()
# test()


# 会报错
def test():
    print ("jay")
    jake()
test()
def jake():
    print ("james")

6、风湿理论:函数即变量

 

 

7、补充一点,如果全局变量别修改之后,再次进行调用的时候,调用之后的是别修改之后的变量

name="jay"
def test():
    name="james"
    def jake():
        global name
        name="nelly"
        print (name)
    jake()
test()
print (name)

8、函数递归:就是将所要的值一层一层的去寻找,返回的值再一层一层的返回来

  这个import time是引用别人写好的代码块,表示时间

  这是一个死循环,表示再进行下一次循环的时候先沉睡3秒钟,如果无限循环的话,会把内存称爆,所以会直接报错,所以必须有个结束条件

import time
def test(n):
    print (n)
    time.sleep(3)
    test(n)
test(10)

  举例一个简单的函数递归形式

def test(n):
    print (n)
    if int(n/2)==0:
        return n
    else:
        res=test(n/2)
    # return res
test(10)

 

posted @ 2019-03-19 15:55  听MM的话  阅读(61)  评论(0)    收藏  举报