我学python踩过的那些坑

变量作用域

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
posted @ 2022-09-20 22:07  wxyww  阅读(48)  评论(4编辑  收藏  举报