• 卡本
    2018-11-25
    请问老师,我把4个例子单独写出来后,为什么例子4的global var1没有影响前面例子中var1的值呢?不应该是所有var1=456么?感谢老师!
    以下为代码:
    #函数的变量作用域
    #1.当var1在函数内部没有被定义,var1取函数外部定义的变量的值
    var1=123
    def func():
        print(var1,'\n===')

    func()
    #2.当var1在函数内部与外部都被定义,var1取函数内部定义的变量的值
    var1=123
    def func():
        var1=456
        print(var1,'\n===')

    func()
    #3.当var1在函数内部与外部都被定义,函数内部变量赋值只影响函数内部
    # (缩进区域)的变量,不会对外部有影响
    var1=123
    def func():
        var1=456
        print(var1)

    func()
    print(var1,'\n===')
    # 4.要想函数内部变量赋值 影响函数外部的变量,用global
    var1=123
    def func():
        global var1#全局变量
        var1=456
        print(var1)

    func()
    print(var1,'\n===')

    以下为结果:
    C:\Users\ks\AppData\Local\Programs\Python\Python37\python.exe C:/Users/ks/PycharmProjects/Python_jksj/func_test.py
    123
    ===
    456
    ===
    456
    123
    ===
    456
    456
    ===

    Process finished with exit code 0
    展开

    作者回复: 因为global在最后的函数执行才生效啊,试试在输出增加print(id(var)),看看你能否区分开同名的var是否为相同的两个内容?

    
     1
  • 水母
    2018-07-29
    老师,你好。函数练习题第一题,我运行答案的代码出现了下面的错误提示:
    num1, *_, num2 = list(two_num)
              ^
    SyntaxError: invalid syntax

    请问这个怎么解决。另外我尝试打印list(two_number),如果输入 2空格4 ,会报错; 但输入 2,4 ,就能成功打印出结果[2, 4]。这是为什么?
    展开

    作者回复: 注意看报错信息是语法错误,是否使用了中文的全角“,”而不是英文的“,”

    
    
  • 水母
    2018-07-29
    老师,你好。函数练习题第一题,我运行答案的代码出现了下面的错误提示:
    num1, *_, num2 = list(two_num)
              ^
    SyntaxError: invalid syntax

    请问这个怎么解决。另外我尝试打印list(two_number),如果输入 2空格4 ,会报错; 但输入 2,4 ,就能成功打印出结果[2, 4]。这是为什么?
    展开
    
    
  • royshu
    2018-07-25
    def test(b, c):
    b[0] = 3
    c = 10

    a = [0, 1, 2, 3]
    d = 0
    test(a, d)
    print(a, d)
    老师,能否解释下列表为什么外面的变量跟着改变,这个在闭包的科也有用到,是否能这样理解:列表改变单一元素的值不影响整个列表的内存,而整形这一类相当于重新定义,反而受到函数作用域的影响不能传递到外部
    展开

    作者回复: 关于变量作用域的问题可以参考作用域、闭包的定义章节视频和下方精选留言,不再重复解答了。
    另一个问题是赋值语句的问题,在Python中赋值语句是引用对象的内存,而不是复制对象;
    例如: a = [0, 1, 2, 3] 要理解成为一个列表[0, 1, 2, 3]贴上了一个标签a;
    当使用 a = [4, 5, 6] 时,相当于把a标签贴给了[4, 5, 6],而列表[0, 1, 2, 3]所在的内存并没有发生变化
    因此无论在函数里面还是外面,修改了列表,就是直接对内存存储的信息做了改动,而整形变量要遵循变量作用域LEGB 原则。变量作用域涉及的知识点比较多,建议通过搜索引擎补充了解变量作用域、深拷贝、浅拷贝相关知识。

    
    
  • Zefantic
    2018-05-31
    😂😂😂没看过的视频也莫名其妙的从中间开始。🤪

    作者回复: 视频感受到了你想学Python的迫切希望,加油

    
    
我们在线,来聊聊吧