码迷,mamicode.com
首页 > 编程语言 > 详细

Python语言学习笔记

时间:2015-05-24 00:01:43      阅读:562      评论:0      收藏:0      [点我收藏+]

标签:

获得人生中的成功需要的专注与坚持不懈多过天才与机会。  ——C.W. Wendte

Python将很快成为你最喜欢的编程语言!

Qt库?  PyQt  Perl-Qt

 

简单易学,功能强大,高效率的高层数据结构,简单而有效地实现面向对象编程。

Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。

注重的是如何解决问题而不是编程语言的语法和结构。

wxPython,Twisted,Boa Constructor

 

 

特色:

简单、易学

免费、开源:Python是FLOSS(自由/开放源码软件)之一。

高层语言:不必纠结管理程序使用内存等底层的东西

可移植性:

如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在下述任何平台上面运行。

Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC!这是因为作为解释器的python有各种系统所对应的版本。

解释性:一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。

而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于你不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。由于你只需要把你的Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得你的Python程序更加易于移植。

只要运行程序的计算机上装有Python及程序所用的相关的库,那么就可运行。因为它是解释型语言,将大部分工作都交由工具环境来解决,所以程序本身移植性很强。

面向对象:Python支持面向过程的编程也支持面向对象的编程。

面向过程:程序是由过程或可重用代码的函数构建起来的。面向对象:程序是由数据和功能组合而成的对象构建而成的。

 

可扩展性:如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,可以把你的部分程序用C或C++编写,然后在你的Python中使用。

可嵌入性:可以把Python嵌入C/C++程序,从而向你的程序用户提供脚本功能。

脚本功能?

丰富的库:Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。记住,只要安装了Python,所有这些功能都是可用的。这被称作Python的“功能齐全”理念。

除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。

 

关于Perl

Perl是另外一种极其流行的开源解释性编程语言。Perl编写大型程序时显示出其不方便。

Perl唯一也是十分重要的优势是它庞大的CPAN库——综合Perl存档网络。就如同这个名字所指的意思一样,这是一个巨大的Perl模块集,它大得让人难以置信——你几乎用这些模块在计算机上做任何事情。

新的Parrot虚拟机按设计可以运行完全重新设计的Perl 6也可以运行Python和其他解释性语言如Ruby、PHP和Tcl等等。这意味着你将来或许可以在Python上使用所有Perl的模块。这将成为两全其美的事——强大的CPAN库与强大的Python语言结合在一起。

其他解释性语言如Ruby、PHP和Tcl等等。

OpenSource.org和UserLinux项目

 

Linux、BSD下安装Python,Windows下安装Python。

shell程序?什么是shell、cmd等等

在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。它类似于DOS下的command和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。

 

网上的Python安装包,指的是什么?

该软件包含编程所需要的模组和编译调试所需要的基本工具。

 

IDLE程序

IDLE是开发python程序的基本IDE(集成开发环境),具备基本的IDE的功能,是非商业Python开发的不错的选择。当安装好python以后,IDLE就自动安装好了,不需要另外去找。是用python+tkinter写的。该环境当然支持编辑功能,网上很多人将IDEL简单地认为是编辑器。

C:\Python27\Lib\idlelib 可找到IDLE运行。

python的编译器就是pythonw.exe,解释器就是python.exe(交互式shell)

python.exe和pythonw.exe区别?

在Windows命令行中使用Python?

从CMD命令行中启动python解释器,需要在windows中设置环境变量,如果安装的是python(x,y),那么应会自动写进了环境变量。

如何退出?window下Ctrl-z,Linux下Ctrl-d

 

window命令行指什么?如何使用?   环境变量?

Linux的包管理软件

 

编辑器:基本要求有语法高亮,文本缩进?

Notepad 即记事本,没有自动文本缩进功能

可用IDLE环境的编辑器   VIM,Emacs(Linux)代码编辑器

Python编辑器列表 支持Python的IDE列表

一旦开始编写大型Python程序,IDE确实很有用

 

 

Hello World,它是编程之神的传统咒语,可以帮助你更好的学习语言。

cmd和系统命令行?

CMD常用命令

lnk 文件是用于指向其他文件(如,程序)的一种文件。这些文件通常称为快捷方式文件。通常它以快捷方式放在桌面上。以方便使用者快速的调用,其扩展名为.lnk。

Python是大小写敏感的

注释 ——任何在#符号右面的内容都是注释

#!/usr/bin/python   这是条特殊的注释后面跟着一个程序。这行告诉你的Linux/Unix系统当执行你的程序的时候,它应该运行哪个解释器。(python解释器有几种?)

对于Python来说,程序、脚本或者软件都是指同一个东西。

 

PATH变量?

如果你希望你的程序能够从各个位置运行呢?那样的话,你可以把你的程序保存在PATH环境变量中的目录之一。每当你运行任何程序,系统会查找列在PATH环境变量中的各个目录。然后运行那个程序。你只要简单地把这个源文件复制到PATH所列目录之一就可以使你的程序在任何位置都可用了。

这里指的运行是指在命令行直接输入程序名运行。(如果遇到重名可怎么办) 

help() 括号中填对象 按q可退出帮助

 

在Python中有4种类型的数

整数、长整数、浮点数、复数    2、3.23E-4、2.3+5j

变量不必要进行声明。

 

字符串  单引号、双引号(在其中可自由使用单引号)  

啥区别?

三引号:指示多行的字符串,在其中可自由使用单双引号

转义符:\’   \’’  \\ 

行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行。

自然字符串  r"Newlines are indicated by \n"  字符串为字面本身,转义字符失效

一定要用自然字符串处理正则表达式

 

Unicode字符串:Unicode是书写国际文本的标准方法。如果你想要用你的母语如北印度语或阿拉伯语写文本,那么你需要有一个支持Unicode的编辑器。类似地,Python允许你处理Unicode文本——你只需要在字符串前加上前缀u或U。例如,u"This is a Unicode string."。

如果你把两个字符串按字面意义相邻放着,他们会被Python自动级连。

语句如下  print “what is your ” “name”

在Python中没有专门的char数据类型。

 

标示符规则,字母下划线数字组成,数字不可开头

使用变量时只需要给它们赋一个值。不需要声明或定义数据类型。(会根据输入自动区分是哪种类型的数据,这点确实比C要好玩,与Matlab语句一样)

在一个物理行中写多个逻辑行:用分号;实现

多个物理行写一个逻辑行:即语句分行 用’’’或者\实现或者圆括号、方括号、波形括号

强烈建议坚持在每个物理行只写一句逻辑行,少用分号

有时候,有一种暗示的假设,可以使你不需要使用反斜杠。这种情况出现在逻辑行中使用了圆括号、方括号或波形括号的时候。这被称为暗示的行连接。

print ‘the value is’,i

 

空白在Python中是重要的。事实上行首的空白是重要的。它称为缩进。在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。

这意味着同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。

如何缩进

不要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。我强烈建议你在每个缩进层次使用单个制表符或两个或四个空格 。

选择这三种缩进风格之一。更加重要的是,选择一种风格,然后一贯地使用它,即只使用这一种风格。

 

就每一个东西包括数、字符串甚至函数都是对象这一点来说,Python是极其完全地面向对象的。

运算符

**  幂 返回x的y次幂

//  取整除

<< 位左移  >> 位右移   注意,此处不是循环移位

& 按位与  |按位或  ^ 按位异或 ~ 按位翻转      如 3&3=3

逻辑运算符   两个布尔常量  True(1)  Fasle

<  >  <=  >=  !=  ==  not 布尔非 and布尔与  or布尔或

运算符的优先级  有个表格!

‘la‘ * 3得到‘lalala‘  ‘a‘ + ‘b‘得到‘ab‘

4/3得到1(整数的除法得到整数结果)。4.0/3或4/3.0得到1.3333333333333333

4 // 3.0得到1.0

x的按位翻转是-(x+1) ~5得到-6     求反后再+1  得到的则是相反数

比较可以被任意连接:3 < 5 < 7返回True。

 

x = False; y = True; x and y,由于x是False,返回False。在这里,Python不会计算y,因为它知道这个表达式的值肯定是False(因为x是False)。这个现象称为短路计算。

 

三种控制流语句

if语句

if  逻辑表达式:

   块语句

elif 逻辑表达式:

   块语句

else:

块语句

冒号表示后面跟一个语句块

guess=int(raw_input())函数取得用户猜测的数字。函数只是重用的程序段。

输入对于raw_input函数来说是一个字符串。我们通过int把这个字符串转换为整数,并把它存储在变量guess中。

事实上,int是一个类,不过你想在对它所需了解的只是它把一个字符串转换为一个整数(假设这个字符串含有一个有效的整数文本信息)。

在Python中没有switch语句。你可以使用if..elif..else语句来完成同样的工作(在某些场合,使用字典会更加快捷。)

 

while 循环

while 逻辑表达式:

     循环体

else:

     语句块

 

当循环跳出时会到else处,else其实是多余的,但若循环中有break语句,那么加与不加就有点区别了。

 

for循环

for i in range(1,5):

print i

else:

print ‘The for loop is over’

 

range(a,b,c)  用于产生a到b之间的序列,步进为c,默认为1。并且不包括b。

广义来说,我们可以使用任何种类的由任何对象组成的序列!

 

break语句

len(str)函数  获得字符串长度

如果你从for或while循环中终止,任何对应的循环else块将不执行

 

continue语句

函数即可重用的程序段。 用def关键字定义。

已经使用了许多内建的函数,比如lenrange

def sayhello():

   print ‘Hello World!’

def 函数名(形参列表):

语句块

 

局部变量:在一个块语句内定义,作用域和生命期都在该语句块内。在里面操作,外面的重名变量不受影响。

 

全局变量 global语句   global x,y,z

global语句被用来声明x是全局的——因此,当我们在函数内把值赋给x的时候,这个变化也反映在我们在主块中使用x的值的时候。

在函数内使用global,说明该变量是在函数外部定义的。

如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是全局的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。

默认参数值的设置

def say(message,times=1):

print message*times     #竟然还可以用这种手段

有默认参数值的形参必须放在后面  say(‘hello’)  才能判别参数是给第一个形参的

只有在形参表末尾的那些参数可以有默认参数值,即你不能在声明函数形参的时候,先声明有默认值的形参而后声明没有默认值的形参。这是因为赋给形参的值是根据位置而赋值的。

 

关键参数:我们使用名字(关键字)而不是位置(我们前面所一直使用的方法)来给函数指定实参。func(c=50,a=100)   #用这种方式来调用可以罔顾赋参顺序

更自由地赋参

def func(a, b=5, c=10):

    print ‘a is‘, a, ‘and b is‘, b, ‘and c is‘, c

func(3, 7)

func(25, c=24)

func(c=50, a=100)

 

return 语句 于函数中返回函数中内部的局部值

= =b Python里还真看不到分号啊

注意,没有返回值的return语句等价于return None。None是Python中表示没有任何东西的特殊类型。例如,如果一个变量的值为None,可以表示它没有值。

除非你提供你自己的return语句,每个函数都在结尾暗含有return None语句。

x=None

print x    #什么都没输出

pass语句在Python中表示一个空的语句块。

 

DocStrings 文档字符串

在函数中用

‘’’----------------------

--------空一行----------

-------------------------‘’’      来说明这个函数的使用方法

使程序更易读,且可在运行时,查看函数文档字符串属性。

print printMax._doc_       函数在Python中也被看做一个对象! . 操作符

 

强烈建议:对你所写的任何正式函数编写文档字符串

随你的Python发行版附带的pydoc命令,与help()类似地使用DocStrings。

 

为什么程序运行时要指定命令行参数? 如,main()函数的形参就有个命令行,是用于指定什么的?

 

Python标准库  标准库都有哪些?

模块是什么?模块基本上就是一个包含了所有你定义的函数和变量的文件。

模块的文件名必须.py为扩展名。

import sys    sys模块包含了与Python解释器和它的环境有关的函数。

sys模块的具体介绍?

当我们执行python using_sys.py we are arguments的时候,我们使用python命令运行using_sys.py模块,后面跟着的内容被作为参数传递给程序。Python为我们把它存储在sys.argv变量中。

sys.argv   sys.path

字节编译的.pyc文件  这种文件采用字节码了  输入这种模块 速度会比较快

from 模块名 import 某个变量   那么就不用 模块名.变量名来调用过来 直接使用变量就可以了  from ..import*  指吸纳所有变量名

一般说来,应该避免使用from..import而使用import语句,因为这样可以使你的程序更加易读,也可以避免名称的冲突。

 

模块的_name_

假如我们只想在程序本身被使用的时候运行主块,而在它被别的模块输入的时候不运行主块,我们该怎么做呢?

每个Python模块都有它的__name__,如果它是‘__main__‘,这说明这个模块被用户单独运行,我们可以进行相应的恰当操作。

if __name__ == ‘__main__‘:

    print ‘This program is being run by itself‘

else:

print ‘I am being imported from another module‘

 

模块的制作和调用    Python附带的标准库就是这样一组模块的例子

模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path所列目录之一。每安装完一个库,应该会自动写入sys.path中吧!我应该也可以手动增添路径。

 

dir()函数:使用内建的dir函数来列出模块定义的标识符。标识符有函数、类和变量。

当你为dir()提供一个模块名的时候,它返回该模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表。输入的模块同样是列表的一部分。

del a   删除变量/名称

 

 

数据结构

列表

列表中元素可以是任何种类的对象(不同类混杂) 包括数(也是对象)甚至其它列表

list=[,,,,,]   len(list)  for item in list: print i

list.append(‘’) 在末尾增加对象list.sort() 重排列表 索引对象 list[]

del list[] 删除某个对象   Python从0开始计数

>>> print range(5)

[0, 1, 2, 3, 4]

>>> print xrange(5)

xrange(5)  

range将返回一个普通列表,但是xrange将返回一个特殊目的对象,将显示为其自身的特殊方式。  使用xrange节省for循环内存开销,for i in xrange(5): 语句块

我们在print语句的结尾使用了一个逗号来消除每个print语句自动打印的换行符

元组  与列表相似,但又有区别 

元组和列表十分类似,只不过元组和字符串一样是不可变的即你不能修改元组。

元组通常用在使语句或用户定义的函数能够安全地采用一组值的时候,即被使用的元组的值不会改变。

你必须在第一个(唯一一个)项目后跟一个逗号,这样Python才能区分元组和表达式中一个带圆括号的对象。

即如果你想要的是一个包含项目2的元组的时候,你应该指明singleton = (2 , )。

zoo=(,,,,,)  len(zoo)  newzoo=(,,,zoo)   列表和元组中的对象不一定都必须是同一类的

元组之内的元组还是元组,被充当成元组中的一个对象。同样元组中的元组,或列表中的元组,或元组中的列表等等都是如此。

索引 zoo[]    zoo[2][]  如果第三个元素是元组或列表的话

zoo=()  zoo=(1,)  必须加逗号  为了区分 zoo=(1) 也可理解为 zoo=1

print ‘%s is %d years old‘ % (name, age)   使用元组print格式化输出

在大多数时候,你可以只使用%s定制,而让Python来提你处理剩余的事情。这种方法对数同样奏效。然而,你可能希望使用正确的定制,从而可以避免多一层的检验程序是否正确。

 

字典 索引靠的是自己指定的键

只能使用不可变的对象(比如字符串)来作为字典的键,但是你可以用不可变或可变的任何对象作为字典的值。

键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。

字典是dict类的实例/对象

ab = {       ‘Swaroop‘   : ‘swaroopch@byteofpython.info‘,

             ‘Larry‘     : ‘larry@wall.org‘,

             ‘Matsumoto‘ : ‘matz@ruby-lang.org‘,

             ‘Spammer‘   : ‘spammer@hotmail.com‘

     }

ab[‘Larry’]  按键索引 ab[‘Bravo’]=’jdfjj’  增加  del ab[‘bravo’]   len(ab)

for name,address in ab.items():

print ‘contact %s at %s ’ % (name,address)

if ‘Guido’ in ab:    # ab.has_key(‘Guido’)

  print …………

item方法:返回一个元组的列表,其中每个元组都包含一对项目——键与对应的值

可以使用help(dict)来查看dict类的完整方法列表。

 

列表、元组和字符串都是序列,说它们是序列,因为序列的两个主要特点是索引操作符和切片操作符。他们都可如此操作。

list[N] 0开头  list[-N]  倒数第N个

list[A:B]  切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束。不包括最后一个。如果不指定第一个数,Python就从序列首开始。如果没有指定第二个数,则Python会停止在序列尾。注意,返回的序列从开始位置开始,刚好在结束位置之前结束。即开始位置是包含在序列切片中的,而结束位置被排斥在切片外。shoplist[:]返回整个序列的拷贝。

注意,列表,元组,字符串都可以使用[]来索引

序列的神奇之处在于你可以用相同的方法访问元组、列表和字符串。

参考  mylist = shoplist  此句表示  两者指向同一实体 一个改变另一个也改变 这个情况存在与列表和字典中,元组(不可改变)

mylist = shoplist[:]  如此才是正确的拷贝

如果想要复制一个列表或者类似的序列或者其他复杂的对象(不是如整数那样的简单 对象 ),那么你必须使用切片操作符来取得拷贝。

 

字符串的一些方法

str.startwith(‘’)     是否以某字符串开头 返回0或1

if ‘a’ in str:

if str.find(‘’)!=-1:        #寻找是否含有某字符串,返回-1或位置

delimiter.join(mylist)   mylist为列表,delimiter为要嵌入分隔的字符串

以上为Python内建的数据结构。

 

编写一个Python脚本

字符串可以相加  os time 模块

time.strftime(‘%Y%m%d%H%M%S‘)   这些定制与用于print语句的定制(%后跟一个元组)类似(但不完全相同)

zip_command = "zip -qr ‘%s‘ %s" % (target, ‘ ‘.join(source)) 

使用os.system函数运行命令,利用这个函数就好像在系统中运行命令一样。即在shell中运行命令——如果命令成功运行,它返回0,否则它返回错误号。

C:\Documents\......  在Linux下 目录分隔是/  所以 指代 目录的字符串 windows下 最好加上r,以区别于转义字符

 

not os.path.exists(today)  检查是否有这样的路径,not是求反

os.mkdir(today)  创建文件夹

注意os.sep变量的用法——这会根据你的操作系统给出目录分隔符,即在Linux、Unix下它是‘/‘,在Windows下它是‘\\‘,而在Mac OS下它是‘:‘。使用os.sep而非直接使用字符,会使我们的程序具有移植性,可以在上述这些系统下工作。

 

comment=raw_input(‘提示语句’)

comment.replace(‘某某,’某’)  将串中的某某用某替代

 

最理想的创建这些归档的方法是分别使用zipfile和tarfile。它们是Python标准库的一部分,可以供你使用。使用这些库就避免了使用os.system这个不推荐使用的函数,它容易引发严重的错误。

 

软件是长出来的,而不是建造的。软件的编写是逐步,渐进式的。

什么(分析)

如何(设计)

编写(实施)

测试(测试与调试)

使用(实施或开发)

维护(优化)

面向对象的编程

在Python中没有数据类型概念,所有都是类,都是对象。

在Python中即便是整数也被作为对象(属于int类)。这和C++、Java(1.5版之前)把整数纯粹作为类型是不同的。

属于一个对象或类的变量被称为域。域和方法可以合称为类的属性。

域有两种类型——属于每个实例/类的对象或属于类本身。它们分别被称为实例变量和类变量。

类方法的self参数。

类的方法都必须有第一个的self形参,self指代对象本身。  #相当于C++中的this

MyObject.method(arg1, arg2)= MyClass.method(MyObject, arg1, arg2)

即方法中的第一个形参位置已经是被占用的了,你只需要给它一个名字,使用方法时,就当它不存在。

pass    # An empty block

类名后跟一对圆括号可创建一个对象/实例   p=person()

_init_方法 对象一被建立,自动运行的方法 初始化   (类似构造函数)

class Person:

    def __init__(self, name):

        self.name = name

    def sayHi(self):

        print ‘Hello, my name is‘, self.name

p = Person(‘Swaroop‘)

p.sayHi()

 

在创建一个类的新实例的时候,把参数包括在圆括号内跟在类名后面,从而传递给__init__方法。__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的初始化。

 

类的变量(域):由一个类的所有对象(实例)共享使用。某一对象对它进行修改,则所有的对象都发生变化。

对象的变量:由类的每个对象/实例拥有。不共享

 

类定义中没self点缀的都是属于类变量。

只能使用self变量来参考同一个对象的变量和方法。

这被称为属性参考。 self.fangfa  self.duixiangbianliang

docstring对于类和方法同样有用。我们可以在运行时使用Person.__doc__和Person.sayHi.__doc__来分别访问类与方法的文档字符串。

在类语句块的开头或者方法的开头加上’’’ …….‘’’这个就是文档字符串了。

__del__方法,它在对象消逝的时候被调用。可使用del语句删除一个对象。

当对象不再被使用时,__del__方法运行,但是很难保证这个方法究竟在什么时候运行。如果你想要指明它的运行,你就得使用del语句,就如同我们在以前的例子中使用的那样。

注意:­­­­__为双下划线

如果你使用的数据成员名称以双下划线前缀比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。  (相当于private类型)

私有变量的特征?

 

SchoolMember类被称为基本类或超类。而Teacher和Student类被称为导出类或子类。

一个子类型在任何需要父类型的场合可以被替换成父类型,即对象可以被视作是父类的实例,这种现象被称为多态现象。

Python不会自动调用基本类的constructor,你得亲自专门调用它。

如果在继承元组中列了一个以上的类,那么它就被称作多重继承。

 

使用rjust方法来得到一个按一定宽度右对齐的字符串。str.rjust(10,’*’);

 

通过创建一个file类的对象来打开一个文件,分别使用file类的read、readline或write方法来恰当地读写文件。对文件的读写能力依赖于你在打开文件时指定的模式。模式大概有读模式(‘r‘)、写模式(‘w‘)或追加模式(‘a‘)。如果我们没有指定模式,读模式会作为默认的模式。最后,当你完成对文件的操作的时候,你调用close方法来告诉Python我们完成了对文件的使用。

 

Python提供一个标准的模块,称为pickle。使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来。这被称为持久地储存对象。

还有另一个模块称为cPickle,它的功能和pickle模块完全相同,只不过它是用C语言编写的,因此要快得多(比pickle快1000倍)。你可以使用它们中的任一个,而我们在这里将使用cPickle模块。记住,我们把这两个模块都简称为pickle模块。

 

只要是一些非法操作或者运行中出现的错误,程序就会中断并抛出异常。要有意识地去处理可能发生异常的代码块。

try:

         语句

except 异常符号/(异常符号元组):

         语句

except:     #所有情况

         语句

else:

         语句    #可选,没有异常时发生

 

raise 新定义的异常

 

可以使用raise语句引发异常。还得指明错误/异常的名称和伴随异常触发的异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。

except ShortInputException, x:   指定一个异常情况并跟随其异常对象

在except从句中,我们提供了错误类和用来表示错误/异常对象的变量。

 

try:

finally:

 

在程序运行的时候,可按Ctrl-c中断/取消程序。(产生异常)KeyboardInterrupt异常被触发,程序退出。

 

f=file(‘open.txt‘,‘w‘)  如果没加’w’的话,默认为’r’,那么如果此时文件夹中不存在open.tx

t,会抛出IOError

 

可以在Python附带安装的文档的“库参考”一节中了解Python标准库中所有模块的完整内容。

 

类中的特殊方法

__init__(self,…)  __del__(self)  __str__(self)  对对象使用 print或str()时调用

__lt__(self,other) 使用<运算符时调用

__getitem__(self,key) 使用x[key]索引时调用

__len__(self)  对对象使用len()时调用

 

列表综合

listone = [2, 3, 4]

listtwo = [2*i for i in listone if i > 2]

print listtwo

在很多时候,我们都是使用循环来处理列表中的每一个元素,而使用列表综合可以用一种更加精确、简洁、清楚的方法完成相同的工作。

 

当要使函数接收元组或字典形式的参数的时候,有一种特殊的方法,它分别使用*和**前缀。这种方法在函数需要获取可变数量的参数的时候特别有用。

def powersum(power, *args):

    ‘‘‘Return the sum of each argument raised to specified power.‘‘‘

   total = 0

     for i in args:

          total += pow(i, power)

     return total

由于在args变量前有*前缀,所有多余的函数参数都会作为一个元组存储在args中。如果使用的是**前缀,多余的参数则会被认为是一个字典的键/值对。

 

lambda:这是Python支持一种有趣的语法,它允许你快速定义单行的最小函数,类似与C语言中的宏,这些叫做lambda的函数,是从LISP借用来的,可以用在任何需要函数的地方:

>>> g = lambda x: x * 2

>>> g(3)

6

本质上,lambda需要一个参数,后面仅跟单个表达式作为函数体,而表达式的值被这个新建的函数返回。注意,即便是print语句也不能用在lambda形式中,只能使用表达式。

 

exec语句用来执行储存在字符串或文件中的Python语句。eval语句用来计算存储在字符串中的有效Python表达式。

exec “print ‘Hello World’”

eval ‘5+5’

 

 

assert语句用来声明某个条件是真的。

当assert语句失败的时候,会引发一个AssertionError。

assert 判断语句

 

repr()函数和` `用来获得对象的规范字符串表示。可以通过定义类的__repr__方法来控制你的对象在被repr()调用的时候返回的内容。

eval(repr(对象))==对象

 

有许多可供选择的使用Python的GUI:

PyQt 这是Qt工具包的Python绑定。Qt工具包是构建KDE的基石。

PyGTK 这是GTK+工具包的Python绑定。GTK+工具包是构建GNOME的基石。

wxPython 这是wxWidgets工具包的Python绑定。

TkInter 这是现存最老的GUI工具包之一。如果你使用过IDLE,它就是一个TkInter程序。TkInter是标准Python发行版的一部分。

Python标准库是一个丰富的库,在大多数时候,你可以在这个库中找到你所需的东西。

Python.org

 

Jython是用Java语言实现的Python解释器。这意味着你可以用Python语言编写程序而同时使用Java库!

IronPython是用C#语言实现的Python解释器,可以运行在.NET、Mono和DotGNU平台上。这意味着你可以用Python语言编写程序而使用.NET库以及其他由这三种平台提供的库!

使你的计算机自动地完成许多先前无法想象的工作或者编写你自己的游戏,以及更多别的什么东西。

 

 

关于字节流及其转换的问题?

Python中返回多个值的方法!  利用元组tuple    return (x,y,z)  写成返回元组的形式

在调用时,用元组去接收即可

关于切片运算符  很多需要再说明下

y[::-1]   就是倒序

 

序列,元组索引都跟C中的数组一样,a[0]即为第一个元素

a[0:N]  会显示 a[0]到a[N-1]个元素

a[0:-1]  -1指倒退 即a[0:N-1]  所以显示 a[0]到a[N-2]这些元素

序列,元组的特点    a[-1] 即是 a[N-1]

 

rfft、irfft与fft、ifft的区别和应用?

利用rfft对来做统计相关不太可行

fft(x)   x为是实信号,则第一点的虚部必为0,若x为偶数点,则第N/2+1个点虚部也为0

x.shape[axis]  首先,x是一个矩阵,shape返回一个元组,说明每个维度的元素个数。

如果是一维数组,返回的是一个(N,)的元组 

 

set() 去掉重复元素

sorted()  重排

对于序列list     list.index()用于返回序列中指定值的序号

 

#s.split([sep, [maxsplit]]) 以sep是分隔符,把s分割成一个list。sep默认为空格。maxsplit是分割的次数,默认是对整个s进行分割
#s.rsplit([sep, [maxsplit]]) 和split()的区别是它是从s的串尾往前进行分割

 

#s.splitlines([keepends]) 把s按照行分隔符分成一个list。如果keepends为True则list的每个元素保留行分割符,如果为False则不保留分隔符

#s.join(seq) 用s把seq序列串联起来

Python语言学习笔记

标签:

原文地址:http://www.cnblogs.com/boowin/p/4525143.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!