Day14 - 1 函数

一、函数返回值注意点:

1. 函数如果没有返回值,会默认返回一个None

def demo1():
    pass

a  = demo1()
print(a)

2.如果返回多个值,会返回一个元组

def demo1():
    return 1,"asd",3

a  = demo1()
print(a)
二、函数的作用域:

规则:LEGB

Python中作用域有四种情况:

L:Local ,局部作用域,函数中定义的变量

E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的

G: global ,模块级别定义的全局变量

B: Build-in ,系统固定模块里的变量, 如int bytearray……

查找顺序是LEGB 和C没什么区别


函数中不能修改全局变量?存疑》

count = 10

def demo():
    print(count)
    count = 5

以下代码会爆出错误 local variable 'count' referenced before assignment

意思是局部变量count在赋值之前就被引用了

一种说法是第一句print执行后,count已经指示为全局变量count,第二句修改全局变量导致报错

还有一种说法是如报错所言是因为print执行时找到了count,但是赋值之前引用的

我个人倾向于第二种说法,暂且存疑,再看下面代码:

def demo():
    print(count)
    count = 5


代码中没有全局变量count,报错依然是 local variable 'count' referenced before assignment,算是证明第二种吧

也有可能是双重错误?

总之Python中若想修改全局变量,需要加上关键字,global

count = 10

def demo():
    global count
    print(count)
    count = 5


demo()
print(count)
还有类似的关键字nonlocal对应的enclosing和loacal

猜你喜欢

转载自blog.csdn.net/qq_36428237/article/details/80315291