之前发表过一篇文章《如何学习一门新的语言》。之后就开始学习python了,具体原因也不是很清楚了。我先是从python简明教程开始,写了两篇笔记《python初体验1》《python初体验2》,但是没有太多的感受。后面因为一个小的项目,我想尝试一下python,在这个过程中,体验了python的简洁和高效,有一种飞起来的感觉——也许我是一名c语言程序员。

事实也再次证明,学习一门新的语言最好的方法就是在实际开发中去使用它。我旁边没有人有python经验,所以学习过程有些曲折,还好很多问题都可以通过网络解决。另外,学习的过程中发现一本书《python参考手册》非常不错,有时间一定要通读一下。

学习一门语言最大的障碍不是语法,也不是库的使用,而是之前语言的思维方式——思维定势会让人倾向于用新的语言来模拟自己熟悉的语言,而这正是最大的障碍所在,你将无法体会到这门语言的优势。所以要学会用新的语言的思维方式来解决问题。还是让我们在来温习一下这个非常有寓意的比喻:

这就像你本来只有一个榔头,有人给了你一个螺丝刀,你说“哎,这不是一把好榔头,但是我应该可以倒着拿螺丝刀,用螺丝刀来砸东西。”你得到了一个很烂的榔头,但事实上它确实一把很不错的螺丝刀。所以你应该对所有的事物保持开放和积极的心态。”

这方面赖勇浩翻译过一篇文章《pythonic到底是什么玩意》,应该是同一个意思。python方面赖勇浩写的文章非常不错。

好了,进入正题了:下面是我的总结,可能不够pythonic,如果你有更好的方案,就指出了。

套接字编程:

1、  函数的功能基本和c类似,唯一不同的地方在于当发生错误时,它不是通过返回值来告知的,而是通过触发异常,所以udp中的bind, recvfrom, sendto必须要进行捕捉异常。

2、  套接字在垃圾收集的时候也会关闭。

3、  获取网卡的IP:

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

return socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0X8915, struct.pack('256s', ethname[:15]))[20:24])

字符串的使用:

1、  字符串中删除一个字串。没有直接提供这个方法,但是replace可以实现:

"abcdef".replace(" ", "")

同样的功能还有一个方法:translate。它的原有作用是将字符串中的某个字符替换为另外一个字符,注意,不是字符串。它的第一个参数是一个转换表。第二个参数是要删除的字符串。我们可以利用第二个参数del,实现这个功能。同时,第一个参数设置为None。

translate可能更高效一点。另外,它的第二个参数可以使一个字符串,含有多个字符,这样就会删除多个。

2、  strip方法:去除字符串两侧的空格,返回新的字符串。这个功能非常有用。

3、  endswitch:检查字符串是否已某字符串结尾。

4、 partition:它将字符串按指定的字符串分为三个部分,返回一个元组。第一个是指定字符串前面内容,第二个是指定字符串,第三个是指定字符串后面的内容。用于字符串解析非常好用。

5、 split:将字符串按照某指定字符串分割成多个子字符串,返回一个分割后的列表。

6、 join:将一个字符串列表中的各个字符串连接起来,中间插入指定的字符串。

函数的使用:

1、函数的作用域:函数中定义一个变量,如果和全局变量重名,则全局变量名称就会被覆盖,也就是,这里对这个变量的更改,不会更改全局变量。但是,如果直接使用的话,是会使用全局变量的。同时,如果想要修改全局变量,需要制定是全局变量:global a

字典的使用:

1、  字典的删除:直接使用del dict[k]可能会引发异常;首先判断k是否存在则效率有些低;使用异常使程序结构看起来不好。一个好的方法是pop(k, default v)。这个删除一个k项,并且返回。如果不存在返回默认的v。如果不加默认值,则会引发异常。

2、  直接使用字典下标获取字典的值可能会引发一场。使用get方法则不会,如果不存在会返回none。另外,还可以设置不存在的默认值。

3、  通过字典格式化字符串:print “value is %(key)s” % kvdict

4、  item方法返回一个列表,列表中的元素是一个元组,第一个是key,第二个是value。比较好用的方法。


列表的使用:

1、  列表的删除:不可以在遍历的过程中删除链表,这样会得到不可预知的后果。可以使用列表的过滤,来获得新的列表。

2、  列表的过滤:

def filterFun(node):#这个函数做了两个事情哎。

node.cycleCount = node.cycleCount -1

return node.cycleCount < 0

timeoutList = filter(filterFun, timerList)

对timerList中的每个节点执行函数filterFun,根据filterFun返回的结果,为真的项组成一个新的列表。

3、  map: kvlist = map(lambda x:x.strip(), kvlist)

4、

XML的使用:

1、  处理xml消息包比较好用的模块是xml.etree.ElementTree。

2、  Element执行xml的根节点。

3、  elem.find(path):查找根节点下面路径为path的子节点。

4、  elem.findall(path):同样的子节点可能有多个,这里会返回一个列表。

5、  elem.findtext(path):获取指定路径子节点的内容,这个我们会经常使用。

6、  elem.get(key);获取属性的值。

7、  上面如果没用,则返回none

8、  elem.append:添加自节点。

9、  elem.tag:返回tag值,也就是name。

10、 elem.text:返回内容。

11、 elem.attrib:返回属性的字典。

12、 SubElement:生成一个节点,自动添加为父节点的子节点。

13、 tostring:转化为xml文本字符串。但是不包括xml头。如果编码方式为UTF-8或者GB2312,gb2312都会产生xml头;如果是utf-8,则不会产生xml头

14、 fromstring:从字符串转化为ElementTree对象。和XML同样的功能。

15、 elem.set();设置属性值

time的使用:

1、  time.sleep()函数函数具有c下sleep函数功能,单位为秒,但是可以接受浮点数。这样可以表示毫秒。

2、  ti = datetime.datetime.now()可以显示当前的时间,包括当前的微秒也可以显示出来。两个的差值可以表示时间的间隔:microsecondLong = timeLong.seconds *1000000 + timeLong.microseconds。差值的成员是seconds和microseconds

3、

OO的使用:

1、  如果不想让成员变量或者方法被外部使用(也就是private特性),可以以__双下划线开通。

2、  Python也可以实现抽象基类,也就是接口:

3、  __str__属性可以将对象转换为字符串,也就是调用print(object)是会打印的字符串。

4、  __call__可以见对象作为函数来调用。给它一个入参就可以。

5、  对象实例是否可以删除?

6、  Python参考手册要好好看一下。

模块的使用:

1、  如果不想将模块的某些函数和变量被别的模块使用,可以以单下划线开头。这样import *是没有的,但是使用importmode,然后mode._fun仍然可以调用。

2、

日志的使用:

1、  日志的标准模块logging基本可以满足我的工作。

2、  设置log的初始化工作:

logging.basicConfig(

filename = "test.log",

format = "[%(asctime)s-%(levelname)s] %(message)s[%(filename)s,%(lineno)d]",

level = logging.INFO,

datefmt = "%F %T")

3、  除此之外,一个比较强大的功能就是过滤功能:可以针对级别,文件,行号等等很多的东西进行过滤。

4、

自省的使用:

1、  type()可以查看对象的类型。这就是自省。也就是可以看看自己是什么类型。这个功能在动态语言中非常有用。

2、

配置文件读取的使用:

1、  使用模块ConfigParser。实例如下:

conf = ConfigParser()

conf.read("snmp_agent.ini")

print(conf.get("main""log_level"))

print(conf.getint("main""ne_agent_port"))

print(conf.get("main", "ne_agent_qip"))

异常的使用:

1、  尽量少用。它会使程序难以理解,而且还会发生不可预知的情况,比如异常的发生使程序的状态变为一个未知状态。

2、  可以寻找替代方案。

3、  程序非常重要,不可以停止,可以在主循环包装在异常处理中运行。

4、  打印出异常的信息,供后面的定位:log.error(traceback.format_exc())

转载于:https://www.cnblogs.com/chgaowei/archive/2011/10/24/2223063.html

c程序员的python开发总结相关推荐

  1. 30岁自学python找工作-程序员自学Python开发,20到30岁几乎决定了你的未来!

    原标题:程序员自学Python开发,20到30岁几乎决定了你的未来! 之前程序员界流行一句话:人生苦短,请用Python. 随着Python成为网红语言之后,不少程序员想多学这一门语言好傍身. 甚至有 ...

  2. python面向对象实例王者荣耀_大牛程序员利用Python开发王者荣耀带妹神器,一路直奔上王者...

    王者荣耀 -很火的手游-简直老少通吃-令人发指-虽然操作简单-但为什么你还是会被虐, 其实 是有技巧的--本文Python大神带你研究王者荣耀各类英雄的出装小技巧,让你成为大神般的存在 前期准备 环境 ...

  3. python接私活王者_大牛程序员利用Python开发王者荣耀带妹神器,一路直奔上王者...

    王者荣耀 -很火的手游-简直老少通吃-令人发指-虽然操作简单-但为什么你还是会被虐, 其实 是有技巧的--本文Python大神带你研究王者荣耀各类英雄的出装小技巧,让你成为大神般的存在 前期准备 环境 ...

  4. 大牛程序员利用Python开发王者荣耀带妹神器,一路直奔上王者

    王者荣耀 -很火的手游-简直老少通吃-令人发指-虽然操作简单-但为什么你还是会被虐, 其实 是有技巧的--本文Python大神带你研究王者荣耀各类英雄的出装小技巧,让你成为大神般的存在 前期准备 环境 ...

  5. 学python用什么软件开发-5款Python程序员高频使用开发工具推荐

    很多Python学习者想必都会有如下感悟:最开始学习Python的时候,因为没有去探索好用的工具,吃了很多苦头.后来工作中深刻体会到,合理使用开发的工具的便利和高效.今天,我就把Python程序员使用 ...

  6. 最适合python程序员用的笔记本-5款Python程序员高频使用开发工具推荐

    很多Python学习者想必都会有如下感悟:最开始学习Python的时候,因为没有去探索好用的工具,吃了很多苦头.后来工作中深刻体会到,合理使用开发的工具的便利和高效.今天,我就把Python程序员使用 ...

  7. python怎么做软件程序_看 Python 超级程序员使用什么开发工具

    Python超级程序员使用的开发工具 我以个人的身份采访了几个顶尖的Python程序员,问了他们以下5个简单的问题: 当前你的主要开发任务是什么? 你在项目中使用的电脑是怎样的? 你使用什么IDE开发 ...

  8. python程序员一天写多少行代码-程序员写Python时的5个坏习惯,你有几条?

    很多文章都有介绍怎么写好 Python,我今天呢,相反,说说写代码时的几个坏习惯.有的习惯会让 Bug 变得隐蔽难以追踪,当然,也有的并没有错误,只是个人觉得不够优雅. 注意:示例代码在 Python ...

  9. Java程序员转Android开发必读经验

    小编最近几日偷偷的发现部分Java程序员想转安卓开发,故此加紧补充知识,为大家搜集资料,积极整理前人的经验,希望可以给正处于困惑中的你,带来些许的帮助. 啰哩啰嗦的说说Java和Android程序的区 ...

最新文章

  1. CentOS7.4下DNS服务器软件BIND安装及相关的配置(一)
  2. 数据结构Java04【树结构概述、创建、遍历、查找节点、删除节点】
  3. Activity动态增加Fragment
  4. 在mybatis中调oracle dblink存储过程
  5. Codeforces Round #698 (Div. 2) A-E解题报告与解法证明
  6. 让onclick响应Enter键
  7. 安装varnish-dashboard
  8. Ubuntu系统下允许Apache的mod_rewrite功能
  9. mysql日志监控 zabbix_zabbix日常监控项mysql(七)
  10. VS2019打包生成安装文件教程(详细实操版)
  11. android mapping文件作用,Android打包代码混淆后的Mapping文件路径
  12. 腾讯云播放器TcPlayer实现网络直播
  13. 打印机手动打印双面的防止顺序
  14. 服务器登录 微信提醒,微信提示非常用设备登陆解决办法
  15. SpringSecurity(安全)
  16. VMTools安装及使用
  17. 亿级流量电商详情页系统实战-1.小型电商网站的商品详情页的页面静态化架构以及其缺陷
  18. table 汽车之家 车型对比 简单实现 列变行
  19. java开源bs系统_WCP是一套BS架构的开源知识管理系统、知识库系统。它.PDF
  20. python + selenium多进程爬取淘宝搜索页数据

热门文章

  1. CVPR 2021 论文/代码分类汇总!持续更新中!
  2. Github Star 8.4K,超级好用的OCR数据合成与半自动标注工具,强烈推荐!
  3. 备受期待!机器学习“蜥蜴书”最新版来了!豆瓣评分9.9!
  4. 论文推荐|Mask TextSpotter:An End-to-End Trainable Neural Network
  5. ICCV 2019 | 华科提出对称性约束的校正网络ScRN,显著改进场景文本识别
  6. cnn卷积核参数如何确定_如何确定肉脯软塑包装的热封参数?
  7. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)
  8. html lineheight div,html – Chrome上的文本输入:line-height似乎有最小值
  9. enum java 比较_Kotlin与Java比较:枚举类
  10. php dm,DM_cp.php