首页 >  Python开发 >  学习python,你必须要知道这些!

学习python,你必须要知道这些!

发布时间:2019-6-12 11:14阅读量:16
摘要: 今天给大家总结一些学习python易犯的小错误,对于初学者,了解完这些会对后续系统学习python很有帮助,例如:python实战中避免很多小坑。

今天给大家总结一些学习python易犯的小错误,对于初学者,了解完这些会对后续系统学习python很有帮助,例如:python实战中避免很多小坑。


1. 缩进,符号和空格不正确

写代码时大家会使用缩进、对齐、空格等,其目的是为了提高代码的可读性。


但在python语言中,许多功能都依赖于缩进。


比如在创建一个新类时,该类中的所有内容都在声明下缩进,决策、循环还有其它结构语句也会出现类似的情况,


如果你在代码执行时发现问题,可以查看一下是否使用了正确的缩进。


来看看下面的例子,在使用IF语句时,请确保使用正确且合适的冒号和缩进,因为它们会导致语法和缩进错误。


val = 500
if val > 100
print("value is grater then 100")

File "<ipython-input-1-a271e37c300f>"line 2
   if val > 100
               ^
SyntaxError: invalid syntax


在上面的代码当中,出现了两处错误:if语句后面的:缺失;下一行没有进行正确的缩进,执行代码出错。


val = 500
if val > 100:
print("value is grater then 100")

value is grater then 100


当你更正上述代码中的两个问题后,你会发现整段代码能够很好的运行。


2. 错误使用类变量

class A(object):x = 1
class B(A):pass
class C(A):pass
print( A.x, B.x, C.x)
1 1 1


这里输出的值都是1,然后我们试着来改变一下A.x和B.x的值看看有什么变化。


B.x = 2
print (A.x, B.x, C.x)
A.x = 3
print (A.x, B.x, C.x)
1 2 1
3 2 3


我们只改变了A.x,为什么C.x改变呢?


这里需要简单了解一下python的命名空间。

python中,命名空间是名字到对象映射的结合,不同命名空间中的名字是没有关联的,这种映射的实现有点类似于python中的字典。

当你名字访问一个对象的属性时,先从对象的命名空间寻找。如果找到了这个属性,就返回这个属性的值;如果没有找到的话,则从类的命名空间中寻找,找到了就返回这个属性的值,找不到则抛出异常。


在Python中,类变量在内部作为字典处理,并遵循通常称为方法解析顺序(MRO)的方法。


MRO:Method Resolution Order 方法解析顺序,Python支持多继承,该方法用于解决父类存在同名函数的时存在的二义性问题。


因此在上面的代码中,由于x在对象的命名空间中找不到该属性C,因此将在类中查找它。换句话说,C没有自己的x属性,独立于A。因此,引用C.x实际上是指A.x。


3. 误解python范围规则

如果你不了解python的范围规则,那么你很容易犯错误,这是因为Python使用一种独有的范围规则来确定变量范围。

python范围解析是基于LEGB规则,以下是Python范围规则的概述:

·L -代表Local。它包含在函数内指定的(标识符/变量)名称(使用def或lambda),而不是使用global关键字声明。

·E -代表Enclosing function locals。它包含来自任何/所有封闭函数的本地范围的名称(例如,使用def或lambda)。

·G -指全球实体。它包括在模块文件的顶层运行或使用global关键字定义的名称。

·B -指内置插件。它跨越预先指定为内置名称的名称,如打印,输入,打开等。

LEGB规则指定名称空间的以下顺序,用于搜索名称:

Local - > Enclosed - > Global - > Built-in

考虑以下的例子:


学习python  


鲜花

握手

雷人

路过

鸡蛋
最新图文推荐
  • 2
  • 3
发表评论

最新评论