理论和应用并行,Python里不得不提的几个坑
自学的坏处非常多,很大的问题来源就是没法系统的学习知识。难免遇到许许多多的问题,有些问题在你学习过程中遇到的很明显,稍加练习就能发现,从而加以解决。但更多的问题需要在特定条件下才能被发现,等到你发现的时候,一拍脑袋,原来我一直都在错用的路上越走越远啊!有些小问题可能无伤大雅,但有些小问题很有可能成为你程序中的一个很大的BUG。
为了保持高产,也为了提醒自己,我整理了几个我遇到的非常二流子的问题,有可能对你有帮助,也有可能冒着被你取关的尴尬,分享出来,也希望大家相互学习、进步。
问题1:
Python的引用机制,有人也总结为python浅复制和深复制的问题。一个简单的例子,在Numpy中:
a=np.array([[1,2,3],[2,3,4],[3,4,5]])
b=a
b[2,2]=7
a
发现了吗,我没有操作a,但a变了。假如a是你的原始数据,当你没有发现这个问题之前,你就这样写了,但原始数据不知不觉中被更改了。。。最终结果将与预期大相径庭。。。至少我挠头了好一阵。
解决办法也不少
采用b=a.copy,这样你的a就不会再被引用了。
问题2:
os库中的listdir函数,用以获取指定文件夹下的文件。前提条件是,假如你的文件名跟我很像:
而且你的文件数量又和我一样多~
恭喜,你要跟我一样注意这个问题咯。
略过无聊的问题来源吧,问题其实是,listdir读取的数据并不会和windows的顺序一致,特别是在你的扩展名之前是一串数字的时候。我并不习惯于每次读取数据都去检查读取进来的文件或者名称是否全部正确(真不是我懒,是因为数据太多了),不过当我发现我的结果和预期相差甚多的时候,挠头的我就开始找原因了。
解决的办法是,
pmp='G:/fjsouthwestdatalist/pm/pm'
pmf=os.listdir(pmp)
pmf.sort(key=lambda x:int(x[:-4]))
我并没有发现os.listdir()中有解决问题的相关参数,所以在你读取文件名之后,重新进行排序,大概的意思是:扩展名之前的文件名重新排序,不过当你的扩展名长度跟我的不一样的话,4这个数字自然也要修改了。
这个问题给我的教训是,文件名的命名不能偷懒。
问题3:
这个问题我就不上具体代码了,主要想讲我遇到的理论问题。在空间插值问题中,有个挺好用的方法叫协变量插值。以克里金方法为例,称之为协同克里金。大家都知道,正常情况下,气温随着海拔的变化呈有规律的变化(主要指对流层中),每100m大约降低0.6°,是一个负相关的问题。而协同克里金可以通过协同高程数据,插值气温,大体上会有一个很不错的效果。为什么我要说大体上呢?因为在海拔接近0的附近,这个协同插值将产生极大的不稳定,特别是你的样本数据量少、插值范围小的时候,一定要注意。在我模型中的一部分内容中,我曾经尝试用协同方式替代普通克里金,在局部产生了极大的变异,总之慎用(这个部分我依然是用python实现的,所以我归纳到内容中了)!!!
问题4:
中文读写的编码问题,这个比较简单,但是我经常遇到。解决办法是,如果''UTF-8''依然产生乱码,就改用"GBK"吧!
问题5:
这是一个非常谜的问题,我用的编辑器是Anaconda 自带的Spyder,这个组合在我印象中不太稳定,偶尔会发生一些蜜汁问题,比如利用subprocess.call()调用一些cdm程序的时候,遇到一个问题,在运行python的时候问题反馈值为2,但是这个程序在cmd中运行正常,尝试许多次调试无果后。。。
所以最终怀疑是程序问题。解决办法也是window的大法,重启Anaconda。不得不说这个打法好,重启之后就正常运行。。。至今也不知道是什么bug
更新到这里吧~希望大家不要遇到这些糟心的问题。
欢迎关注公众号,作者不定期更新科研路上的磕磕绊绊。
微信号:一个有趣的灵魂W
关注我们,了解更多
- Nginx发布1.9.0版本,新增支持TCP代理和负载均衡的stream模块
- WordPress4.2升级修复补丁:解决大量404请求以及评论表情路径及尺寸异常问题
- Linux系统编译安装Redis以及主从复制配置小记
- Go-Maps
- 为WordPress开启Nginx缩略图功能,七牛从此陌路
- 为网站开启Nginx缓存加速,支持html伪静态页面
- 解决WordPress升级4.2后调用国外图片导致大量404请求的问题
- JS代码实现浏览器网页标题的动态切换,略微提高网站粘性
- Go-List
- 分享张戈博客自用的php网址在线转换二维码的API源码
- zabbix agentd客户端插件Shell一键自动安装脚本
- SendCloud邮件队列状态和已使用额度的Python监控脚本
- linux/scp命令报“bash: scp: command not found lost connection”错误的解决办法
- bat/cmd批处理连接SqlServer数据库查询脚本
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SSM整合:商城小项目001(配置SSM环境+查询所有操作+添加操作)
- 在MyBatis中参数的传递4种方式+代码示例
- MySQL篇:MySQL5.5和 MySQL5.7.x 版本安装和卸载《从入门到入狱,删库--->你值得拥有》
- 1016面试:quartz的核心组件+cron表达式语法+如何实现一个每天中午12点备份的数据库?写伪代码
- shiro篇:使用Shiro对一个SSM项目进行身份加密验证
- 由Spring创建dao和service
- “终于懂了” 系列:Android组件化,全面掌握!
- Requests库快速学习
- 简单易懂的springMVC中的测试类
- 花了一个星期,我终于把RPC框架整明白了!
- PageHelper分页插件
- Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException
- 分享一套仿英雄联盟大型多人联机实时对战游戏源码(包含完整服务器和客户端源码)
- 【Flutter 专题】101 何为 Flutter Elements ?
- 10.10面试:SpringMVC中目前学习过的注解及功能?+怎么接受前端传递到后台的数据?