变量作用域
python对于变量作用域的处理,与我们常用的java,c都不同。
下面这份代码会输出5,而不是4
x=5
def f():
x=4
f()
print(x)
你可能觉着这很显然,因为这就相当于我在子函数里新建了一个同名局部变量嘛。
但下面这个代码会报错
x=5
def f():
if x==5:
print("right")
x=3
f()
你可能以为报错发生在x=3。其实发生在x==5这一行。
报错信息如下:
UnboundLocalError: local variable 'x' referenced before assignment
看到这可能就明白了。他竟然说我上面的x在定义之前使用。所以他认为这一行的x是下面定义的那个x,而非全局的x。
但是如果没有下面x=3这一行,这个代码就对了。
结论如下:
python中有3种作用域:
- 局部作用域:函数内部定义的变量作用域
- 闭包作用域:在函数嵌套中,外部函数定义的变量
- 全局作用域:作用与全局的变量
对于变量的访问修改规则如下:
- 访问变量时,首先检查局部作用域,如果局部作用域不存在对于该变量的定义,可以访问其上级的闭包作用域和全局作用域
- 对于闭包作用域的变量修改时,需要在函数中提前使用
nonlocal
对该变量进行声明 - 对于全局作用域的变量修改时,需要在函数中提前使用
global
对该变量进行声明。
这样就合理的解释了上面的代码出现的问题。
f函数
在python中,使用f函数可以在字符串中穿插变量,方便快捷。比如
print(f"{x}天之后,我就毕业了")
就会在{x}的位置,用其值替代输出。
逻辑运算符
小坑,小坑。在python里面没有||
和&&
。用or
and
网络请求
使用requests。
返回的json是个dict格式,取元素的方式跟js不太一样,要使用[]
运算符。
安装模块
python安装模块用的是pip,但是path中可能不放其所在的scripts路径。所以要自己找到python/scripts路径,然后在该路径下调用安装命令
pip install modname
标签:变量,python,那些,作用域,报错,我学,全局,函数
From: https://www.cnblogs.com/wxyww/p/16712754.html