十分钟学习Python的进阶语法

(0)目录

VMware 下安装Ubuntu的吐血经历

零基础学习Shell编程

Linux下的makefile的妙用

Linux调试神器 — gdb

十分钟学会Python的基本类型

分布式版本管理神器–GIT

GIT文件的三种状态 & Git SSH秘钥问题

十分钟学习Python的进阶语法

配置SSH无密码访问及Linux热键、重启、kill进程

Java的不定长参数和Python的不定长参数对比

一:起因

(1)作为胶水语言的Python,可谓无处不在,快速开发原型网站;大数据处理等领域应用甚广

(2)学过c/c++ 或者 Java的ITers 很容易学习Python,特别是对于上手入门级的Python语法

(3)刚刚开始学习Python,练习Python时,可能感觉特别别扭 —— 完全没有方法{} ,近几年靠:和严格的缩进来进行代码段,程序段的分隔

(4)一些Python源代码的分享,请下载

二:Python 进阶语言

(1)python中%r和%s的区别 ——%r用rper()方法处理对象 —— %s用str()方法处理对象

有些情况下,两者处理的结果是一样的,比如说处理int型对象:

text = "I am %d years old." % 22 print "I said: %s." % text print "I said: %r." % text I said: I am 22 years old.. I said: 'I am 22 years old.'. // %r 给字符串加了单引号(2)Python中if __name__ == ‘__main__’:作用#hello.pydef sayHello():str="hello"print(str);if __name__ == "__main__":print ('This is main of module "hello.py"')sayHello()python作为一种脚本语言,用python写的各个module都可以包含以上那么一个类似c中的main函数,只不过python中的这种__main__与c中有一些区别,主要体现在:

1)当单独执行该module时,比如单独执行以上hello.py: python hello.py,则输出This is main of module "hello.py"hello可以理解为"if __name__=="__main__":" 这一句与c中的main()函数所表述的是一致的,即作为入口;

2)当该module被其它module 引入使用时,其中的"if __name__=="__main__":"所表示的Block不会被执行,这是因为此时module被其它module引用时,其__name__的值将发生变化,__name__的值将会是module的名字。比如在python shell中import hello后,查看hello.__name__:>>> import hello>>> hello.__name__’hello’>>>

3)因此,在python中,当一个module作为整体被执行时,moduel.__name__的值将是"__main__";而当一个module被其它module引用时,module.__name__将是module自己的名字,当然一个module被其它module引用时,其本身并不需要一个可执行的入口main了

if __name__ == '__main__':print 'This program is being run by itself'else:print 'I am being imported from another module'

(3)我自己的疑问:我能明白面向对象编程的概念,感觉python用模块就能解决,为啥还要有class之类的东西?

1)先回答__:由于python的类成员都是公有、公开的被存取public,缺少像正统面向对象语言的私有private属性,于是就用__来将就一下,模拟私有属性。这些__属性往往是内部使用,通常情况下不用改写。也不用读取。加上2个下划线的目的,一是不和普通公有属性重名冲突,二是不让对象的使用者(非开发者)随意使用。

2)面向对象是一种方法学的提高,不用对象用模块的确能行,就像C语言也用类似的、没有对象的方式提供模块,也能开发任何东西。但用了对象能提高代码复用、提高开发效率,减轻开发者的劳动。简单说,面向对象就类似于工厂做一个石膏雕塑:

class类就相当于模具,object对象相当于模具倒出来的雕塑,雕塑可以大量被复制。要修改雕塑,是去修改模具,而不是改雕塑成品。

从数据的角度,一个雕塑可能由多个基础部件组成,手、脚、头,这些是数据,当然对象也有动作,对象所有的函数都是它的动作,比如跑、吃、叫。

最常见的,学生类,规定一些数据,姓名、电话、年龄、这些是数据,学生会“答题” “吃饭”,“消费”,“联系”“动手”这些是传递消息的动作。

这种把数据和动作结合就是一个对象,类拿来规范这些数据和动作。再次使用这同一类的对象,就不需要重复开发。

(4)Python中__init__(初始化操作) 和 __del__(结束操作,如文件的关闭和数据库的关闭等)的作用:

1)Python中没有专用的构造和析构函数,但是一般可以在__init__和__del__分别完成初始化和删除操作,可用这个替代构造和析构。还有一个__new__用来定制类的创建过程,不过需要一定的配置,此处不做讨论。

2)类的成员函数默认都相当于是public的,但是默认开头为__的为私有变量,虽然是私有,但是我们还可以通过一定的手段访问到,即Python不存在真正的私有变量。如:由于Python的特殊性,全局成员变量是共享的,所以类的实例不会为它专门分配内容空间,类似于static,具体使用参看下面的例子。

测试1:# encoding:utf8class NewClass(object):num_count = 0 # 所有的实例都共享此变量,即不单独为每个实例分配def __init__(self,name):self.name = nameNewClass.num_count += 1print name,NewClass.num_countdef __del__(self):NewClass.num_count -= 1print "Del",self.name,NewClass.num_countdef test():print "aa"aa = NewClass("Hello")bb = NewClass("World")cc = NewClass("aaaa")print "Over"Hello 1World 2aaaa 3OverDeException l Hello 2AttributeError: "'NoneType' object has no attribute 'num_count'" in <bound method NewClass.__del__ of <__main__.NewClass object at 0x01AF18D0>> ignoredException AttributeError: "'NoneType' object has no attribute 'num_count'" in <bound method NewClass.__del__ of <__main__.NewClass object at 0x01AF1970>> ignored我们发现,num_count 是全局的,当每创建一个实例,__init__()被调用,num_count 的值增一,当程序结束后,所有的实例会被析构,即调用__del__() 但是此时引发了异常。查看异常为 “NoneType” 即 析构时NewClass 已经被垃圾回收,所以会产生这样的异常。如果说人生啊,尝过一回痛快淋漓的风景,

十分钟学习Python的进阶语法

相关文章:

你感兴趣的文章:

标签云: