标签:注意 不可 插入 error 应该 传统 机器学习 image 数据类型
你练习了很久,逐渐觉得编程变得得心应手,或许会觉得“这很简单嘛”,千万别大意,请牢记:编程其实很难。
图源:unsplash
在自己解决问题的时候,不合适的选择会使编程问题变得更加困难,如果没人指导你甚至都意识不到自己编程的方式是错误的。你或许曾为不能及时完成代码和重构而感到内疚,幸运的是,只要你愿意,纠正这些错误可以让你成为一个更好的程序员。
成为一个伟大程序员的最好方法就是克服错误和问题,问题总会有更优解,需要你不断挑战自我。习惯于做某一件事情是很容易的,但是有时候需要一点改变才能真正成为一个伟大的工程师。
虽然“未实现”错误可能是本文中最不常见的错误之一,但我必须给大家提个醒。在Python中触发“未实现”不会引发 “未实现”错误,而会引发类型(Type)错误。下面这个函数能够说明这点:
def implementtest(num):
if num == 5:
raise(NotImplemented)
我们试图运行这个函数,其中“num”等于5,看看会发生什么:
解决这种非正常情况需要触发“未实现错误”,而不是“未实现”本身。为此,我修改了函数:
def implementtest(num):
if num == 5:
raise(NotImplemented)
if num == 10:
raise(NotImplementedError( Thisis the right way! ))
运行它能够给我们合适的结果:
在对象主导的程序设计语言中,全局变量应该保持在最小值。但同时须注意,解释全局变量是十分必要的,并且在某些情况下是相当正确的。
图源:unsplash
数据科学就是一个很好的例子,该领域中数量有限的对象导向编程在进行中,Python的使用更倾向于功能指导,和传统做法有些不同。
当多个函数调用并依赖相同的值时,全局变量可能会导致命名和隐私方面的问题。全局变量能避免这种情况的一个例子是类似于文件路径的东西,特别是与Python文件一起打包的那种。即使是编写Gtk类,或者移动图形用户界面构建器,也应该局部完成,而不是全局完成。
Python中的默认参数只计算一次,在执行函数定义时进行。已知这些参数只计算一次,那么每个入站元素都会在每次调用中使用到,这意味着变量中包含的数据在每次函数访问时都是可变的。
def add(item, items=[]):
items.append(item)
与之相反,我们应该将参数的值设置为零,并添加一个条件来修改列表,如果这个列表并不存在的话。
def add(item, items=None):
if items is None:
items = []
items.append(item)
虽然这主要适用于Python用户的统计、数据科学、机器学习用途,但根据具体情况,拥有不可变数据才是王道。
客观上,使用拷贝比普通赋值更好。普通的赋值操作只是将新变量指向现有对象,而不是创建新对象。
d = 5
h = d
可以使用Python的拷贝模块执行两种主要类型的拷贝,即浅拷贝和深拷贝。
它们的差异在于你希望通过函数传递变量的类型。当使用深度拷贝在单个字节数据变量上时,比如整数、浮点数、布尔值或字符串,浅度拷贝和深度拷贝之间的差别就很难察觉。但是,在处理列表、元组和术语时,我建议始终使用深度拷贝。
图源:unsplash
浅拷贝构造一个新的复合对象,然后尽可能把原始对象中对象的引用插入其中。深度拷贝也构造一个新的复合对象,然后递归地将原始对象中对象的副本插入其中。根据这些定义,很容易看出为什么要对给定的数据类型进行区分。
import copy
l = [10,15,20]
h = 5
hcopy = copy.copy(h)
z = copy.deepcopy(l)
为了测试结果,我们可以简单地检查它们的变量id是否与一个条件语句相同:
print id(h) == id(hcopy)
False
图源:unsplash
变得更优秀的过程必定是不断改进的过程,挑战自我走出舒适区或许是痛苦的,但也一定是有益的。编程之路道阻且长,请不要放任自己野蛮生长。
编译组:刘鉴楠、王品一
相关链接:
https://towardsdatascience.com/avoid-these-rookie-python-mistakes-9cc17cccd051
如转载,请后台留言,遵守转载规范
ACL2018论文集50篇解读
EMNLP2017论文集28篇论文解读
2018年AI三大顶会中国学术成果全链接
ACL2017论文集:34篇解读干货全在这里
10篇AAAI2017经典论文回顾
标签:注意 不可 插入 error 应该 传统 机器学习 image 数据类型
原文地址:https://blog.51cto.com/15057819/2565667