c语言程序设计和python,c程序设计和python程序设计
c程序员的python开发总结-常高伟-博客花园
c程序员的python开发总结之前发表过一篇文章《如何学习一门新的语言》。之后开始学习python,具体原因不是很清楚。先从python的简明教程开始,写了两个笔记《python初体验1》 《python初体验2》,感觉不多。因为后面有个小项目,想试试python。在这个过程中,我体验到了python的简单高效,有一种飞翔的感觉。也许我是一个C语言程序员。
事实再次证明,学习一门新语言最好的方法就是在实际开发中使用。我旁边没有人有python经验,所以学习过程有些波折。好在很多问题都可以通过网络解决。另外,我在学习期间发现了一本非常好的书《python参考手册》,有时间一定要通读一遍。
学习语言最大的障碍不是语法,也不是库的使用,而是之前语言的思维模式。3354思维定势会让人倾向于用一种新的语言来模拟自己熟悉的语言,而这是最大的障碍。你将无法体会这种语言的优势。所以要学会用新的思维方式解决问题。让我们回顾一下这个非常有意义的比喻:
就好像你只有一把锤子,有人给了你一把螺丝刀,你说:“嘿,这不是一把好锤子,但我应该可以把螺丝刀倒着拿,用它砸东西。”你得到一把坏锤子,但事实上它是一把非常好的螺丝刀。所以你应该对一切保持开放积极的态度。"
在这方面,赖永浩翻译了一篇文章《pythonic到底是什么玩意》,应该也是这个意思。赖永浩用python写的文章很好。
好了,言归正传:下面是我的总结,对pythonic来说可能还不够。如果你有更好的计划,指出来。
套接字编程:1。功能和c基本类似,唯一不同的是出错时不是通过返回值来通知,而是通过触发异常来通知。因此,udp中的bind、recvfrom和send to必须捕获异常。
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。替换( ,)
同样的功能还有另一种方法:翻译。它最初的功能是用另一个字符替换字符串中的一个字符。注意,它不是一个字符串。它的第一个参数是一个转换表。第二个参数是要删除的字符串。我们可以用第二个参数del来实现这个功能。同时,第一个参数设置为None。
翻译可能更有效率。此外,它的第二个参数可以使一个字符串包含多个字符,这将删除多个字符。
2.strip方法:去掉字符串两边的空格,返回一个新的字符串。这个功能非常有用。
3.endswitch:检查字符串是否以字符串结尾。
4.partition:它根据指定的字符串将字符串分成三部分,并返回一个元组。第一个是指定字符串之前的内容,第二个是指定字符串,第三个是指定字符串之后的内容。对于字符串解析非常有用。
5.split:根据指定的字符串将一个字符串拆分成多个子字符串,并返回一个拆分列表。
6.join:连接一个字符串列表中的所有字符串,并在中间插入指定的字符串。
功能的使用:1。函数的作用域:变量在函数中定义。如果与全局变量同名,全局变量名称会被覆盖,也就是说,在这里改变这个变量不会改变全局变量。但是,如果直接使用,将使用全局变量。同时,如果要修改全局变量,需要使全局变量:GlobalA。
词典的使用:
1.删除字典:直接使用del dict[k]可能会导致异常;首先,判断K是否存在有些低效;使用异常会使程序结构看起来很糟糕。好的方法是pop(k,默认v)。这将删除一个k项并返回。如果没有,返回缺省值v,如果没有添加缺省值,将抛出异常。
2.直接使用字典下标获取字典值可能会导致字段。如果使用get方法,则不会。如果不存在,将返回none。此外,您可以设置一个不存在的默认值。
3.通过字典格式化字符串:print "值是% (key) s"% kvdict
4.方法返回一个列表。列表中的元素是一个元组,第一个是键,第二个是值。更好的使用方法。
列表的使用:
1.删除列表:遍历过程中不能删除链表,会产生不可预知的后果。您可以使用列表过滤来获取新列表。
2.过滤列表:
DefilterFun (node): #这个函数做两件事。
node . cycle count=node . cycle count-1
返回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.元素执行xml的根节点。
3.elem.find(path):查找根节点下有path的子节点。
4.elem.findall(path):相同的子节点可能不止一个,这里会返回一个列表。
5.elem.findtext(path):获取指定路径的子节点的内容。我们会经常用到这个。
6、elem.get(键);获取属性的值。
7.如果以上都没用,则一个都不返回。
8.elem.append:从节点添加。
9.elem.tag:返回标记值,即名称。
10.elem.text:返回内容。
1.返回属性字典。
12.子元素:生成一个节点,并自动将其添加为父节点的子节点。
13.tostring:转换为xml文本字符串。但是不包括xml报头。如果编码方式是UTF-8或者GB2312,gb2312会生成xml头;如果是utf-8,就不会生成xml头。
14.fromstring:从字符串转换为ElementTree对象。与XML功能相同。
15、elem . set();设置属性值
时间的使用:1。time.sleep()函数具有C下sleep函数的功能,单位为秒,但可以接受浮点数。这可以表示毫秒。
2.ti=datetime.datetime.now()可以显示当前时间,包括当前的微秒。两者之差可以表示时间间隔:微秒长=time long . seconds * 1000000 time long .微秒,差的成员是秒和微秒。
3、
OO: 1的使用。如果不希望成员变量或方法在外部使用(即私有特性),可以用_ _双下划线将其打开。
2.Python也可以实现抽象基类,即接口:
3.__str__属性可以将对象转换成字符串,即调用print(object)是一个将要打印的字符串。
4.__call__可以看到要作为函数调用的对象。给个参考就好。
5.可以删除对象实例吗?
6.好好看看Python参考手册。
模块的使用:1。如果不希望模块的某些函数和变量被其他模块使用,可以用单下划线开头。没有像这样的import *,而是使用importmode,然后是mode。_fun还是可以叫的。
2、
日志的使用:1。log的标准模块基本可以满足我的工作。
2.设置日志的初始化:
logging.basicConfig(
文件名=test.log ,
format=[%(ASC time)s-%(level name)s]%(message)s[%(filename)s,%(lineno)d],
级别=记录。信息,
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())
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。