python简介
python是一种动态的、面向对象的、解释性高级编程语言。由于内置的高级数据结构和对动态类型和动态绑定的支持,使用python进行快速应用程序开发是非常方便的。同时,作为一种脚本语言,它与现有的组件和服务兼容。python还支持模块和各种库的扩展,有助于实现模块化编程和提高代码重用性。
在这篇文章
刚刚接触过该语言的新来者可能无法适应python简单而灵活的语法,或者低估python的强大性能。鉴于此,本文列出了python开发人员经常犯的10个小错误。
这篇文章是供python高级开发人员参考的,python白可以参考下面的文章:
常见错误1:滥用表达式作为函数参数的默认值
python允许开发人员指定函数参数的默认值。这也是python的一个主要特性,但是当默认值是可变的时,它可能会给开发人员带来一些问题。例如,下面定义的函数:
>>> def foo(bar=[]): # bar is optional and defaults to [] if not specified... bar.append(baz)# but this line could be problematic, as we'll see...... return bar
你看到虫子了吗?也就是说,在每次调用之前不要为函数分配一个变量参数,并认为参数是默认值。例如,上面的代码,一个可能会多次调用foo()returns'baz'when,每个调用foo(),为[ ]的价值吧,那是一个空的列表。
但是让我们看看代码运行的结果:
>;>;>;foo()[“巴兹”] >;>;>;foo()[“巴兹”、“baz”] & gt;
嗯?你为什么要加上“巴兹”每次调用foo到现有列表(),而不是一个新的列表?答案是函数定义的默认值只在函数定义时执行一次。因此,当第一次定义富时,bar被初始化为默认值(空列表)。此后,每次调用富()函数时,参数栏就是第一次初始化时生成的列表。
常见的解决方案:
>>> def foo(bar=none):... if bar is none: # or if not bar:... bar = []... bar.append(baz)... return bar...>>> foo()[baz]>>> foo()[baz]>>>foo()[baz]
常见错误2:类变量的错误使用
代码示例:
>;>;>;类(对象):…x=1…>;>;>;b(a):通…
结果没有问题。
>;>;>;b.x = 2 >;>;>;打印a.x,b.x,c.x121
结果也是正确的。
>;>;>;内= 3 >;>;>;打印a.x,b.x,c.x323
到底是什么?我们只改变了a.x.,c.x为什么要改变呢?
在python中,类变量是以字典的形式在内部处理的,其次是解析的方法(方法解析顺序,mro)。因此,在上面的代码中,因为在类c中找不到属性x,所以它从父类中查找x的值。虽然python支持多重继承,上述代码,换句话说,只有一个父类a,c没有自己的x是独立的类,那么,c.x实际上指的是a.x.如果处理得当,它会使python的错误。
如果您想深入了解python的类特性,请盖章:
调用atexit.register()函数可以解决以上python高阶编程问题。atexit.register()函数调用后,当你的代码运行时,它将运行解释器关闭之前。
利用上述方法,修改后的mod.py文件如下:
进...