Python学习笔记

2016-05-03

近几日看了一本关于python基础的书—算法与程序设计基础 (python版),摘录其中的基础知识和比较好的编程方法,供大家学习,同时方便以后回忆。

1、基本语法

在python中基本类型有整型int、浮点float、布尔bool、字符串str,元组tuple()、列表list[ ]、集合set{ }、字典类型dict{ }等 。其中python还支持复数类型complex, real + imag(J/j后缀) 。

a = 3
float = 5.4
>>>type (True)
>>><class ‘bool’>
>>>aComplex = 4.23 + 8.5j
>>> aComplex
>>>(4.23000000000004 + 8.5j)

对浮点数据进行相等关系运算时,不能直接用等于==操作,浮点类型能够表示巨大的数,能够进行高精度的计算,但是由于浮点数在计算机内是用固定长度的二进制表示的,有些数可能没有办法进行精确的计算,计算会引起误差。

>>>2.1 – 2.0
>>>0.1000000000000009

这个例子中得到的结果比正常的略大,可以看出不能用==来判断是否相等,而是要检查两个浮点数的差值是否足够小,则认为是相等的。

数值对象运算表

运算符

描述

x+y, x-y

加、减

x*y,x/y, x//y, x%y, x**y

相乘,相除, 整除, 求余,求乘方

<, <=, >, >=, ==, !=

比较运算

or, and, not

逻辑运算符

=,+=, -=, *=, /=, **=

赋值,复合运算

另外,在python是允许级联比较的:

>>>a, b, c = 10, 20, 30
>>>a <=b <= c
>>>True

文本数据的操作

正则表达式在字符匹配、查找使用的比较多。

新建一个字符串变量直接s = “hello”,还可以切片及索引,直接用字符串*数字表示重复字符串(这个很好用(* ̄︶ ̄)y)

>>>”hi”* 3
>>>’hihihi ’
>>>”student”[5]
>>>’n’
>>>s = “school”
>>>s[1:4] 
>>>’cho’#切片,很实用啊

关于字符串的索引及切片:

h

e

l

l

o

 

p

y

t

h

0

1

2

3

4

5

6

7

8

9

-10

-9

-8

-7

-6

-5

-4

-3

-2

-1


批量数据表示与操作:元组tuple, 列表list, 集合set和字典dict

元组

>>>t1 = 1, 2, 3
>>>t2 = “sound ”, “easy ”, “western ”, “north ”
>>>t3 = t1, t2
>>>t3
>>>((1, 2, 3), (‘sound ‘, ‘easy ‘, ‘western ‘, ‘north ‘))
>>>t4 = tuple(“python”)
>>>t4
>>>(‘p’, ’y’, ’t’, ’h’, ’o’, ’n’)

列表

>>>L1 = list(“python”)
>>>L1
>>>[‘p’, ‘y’, ‘t’, ‘h’, ‘o’, ‘n’ ]
>>>L2 = list((“hello”, “well”, “python”))
>>>L2
>>>[‘hello’, ‘well’ , ‘python’]

元组和列表都可以通过下标索引元素

>>>L2[1][1]
>>>’e’

通常会用到list和字符串之间的转换,读取文件,分析输入的字符串等,split()函数可以将字符串转换为list数据类型,in语法在字符串查找和遍历中常用到,跟for循环一起使用。

集合和字典

集合具有去重功能,比较适合求交集并集等,可以很方便的比较两个集合的相同元素和不同元素, 有许多方法:union(), difference(), intersection(), add(), remove()等, 新建集合 s1 = {1, 55, 6, 90, 34}……

字典采用通过键值来查找信息, 键值和索引值之间反应了一种数据之间的关联,跟java里的map有点像,是一种映射数据类型,和set一样,无序存储,不能索引。字典的创建,d1 = {1: “Mon”, 2: “Tue”, 3: “Wed”,……},用构造器dict,monthdays = dict(Jan = 31, Feb = 28, ……)

>>>d1 = {(3,1):3, (3,2):6, (3,5):15, ……}
>>>d1[(3, 1)]
>>>3

2、控制结构

if 条件1:

     条件1成立。。。

elif 条件2:

     条件2成立。。。

else :

     否则。。。

Python中没有switch语句,只能用if 。。。elif。。。elif。。。else。。。

for 迭代变量 in 字符串、序列或者迭代器:

     循环体

else:

     表达式

在循环中正常退出,会执行else块(但是好像不太常用)

其中,在for循环中经常用到range()函数,range(start, end, step = 1),其中的列表元素k,start <=k <end(在python中的索引都是如此,半开半闭)。

while 循环条件:

     循环体

跟java中差不多,还有break, continue,pass语句,在判断和循环中也经常用到。


数据的输入和输出

在windows系统中文件目录使用反斜杠‘ \’,而在linux中‘ / ’,关于目录方面我也有一些问题没理清,需要继续学习。

终端输入输出,input(‘提示文本字符串’)和print(value,…,sep = ‘’, end = ‘\n’, file = sys.stdout, flush = False ),其中…表示可以输出多个对象,用‘, ’分隔,sep表示多个输出对象显示时的分隔符, 默认值为一个空格,end表示print语句的结束符号,默认值为换行符,也就是说print默认输出后换行。

插一个小曲:在练习时遇到了repr(),str()和eval()函数的问题,到网上搜了许多, python真神奇 щ(ʘ╻ʘ)щ 。

格式控制符号

格式符号

表示类型

格式符号

表示类型

%f%F

浮点数

%o

八进制整数

%d%i

十进制整数

%x%X

十六进制整数

%s

字符串

%e%E

科学技术

%u

十进制整数

%%

输出%

输入输出重定向< , >

文件的操作:

open(file,mode = “r”, …)

f.read(size)返回一个字符串, f.readline()读取一行并返回字符串, f.readlines()返回一个列表,列表元素为每行字符串

数据写入时用write()函数,<文件对象>.write(string)

f.read()之后,文件指针达到文件末尾,如果再来一次,读取的将会是空内容,如果想再次都去,需要用到seek()函数,f.seek(offset, from_what), 具体的用法在实践中学习吧。

<文件对象>.close()

异常处理try: 。。。except: 。。。else:。。。, 手动抛出异常raise语句,继承Exception类

3、面向对象的构建程序

系统一般提供一些函数供用户直接调用,以增强系统的运算处理能力,方便用户使用,这些函数成为系统函数,系统函数又分为内建函数和标准函数库,内建函数是语言的一部分,可以直接使用,比如abs(),此外系统也可以导入外部函数。

定义函数;

def 函数名(参数表):

     函数语句块

     [return 返回值]

注意:

  • 函数名应该是Python的合法标识符,函数名后紧跟的圆括号中是参数
  • 参数可有可无,多个时用 “, ”分隔,默认值放在最后
  • 定义函数后面需要跟“: ”,下行缩进
  • 在函数中,通过return语句返回函数的值,也可不用return语句,这样,函数会返回None—python中的空值(相当于java中的NULL)

在程序中的函数可以多次调用,调用函数的形式为:函数名(实际参数表),在一个模块中,定义函数要在可执行程序之前,关于局部变量和全局变量,如果函数中定义的局部变量与全局变量同名,则局部变量屏蔽全局变量,通过global关键字可以在函数中调用全局变量,在python中不需要初始化就可以使用变量,这个我不太习惯,但是也有它的好处。

调用函数时所提供的实际参数仅仅是向函数提供值,函数内的改变并不会对原数值造成影响,但是列表除外,如果将列表对象作为函数的参数,则向函数中传递的是列表的引用地址。

一个文件就是一个模块,模块里可以有类、函数、变量等,类中也可以有,将多个文件放在一个文件夹下是一个包(只是自己的理解,不知道对不对)

从外部导入库使用import 包名.模块名, 访问函数时 包名.模块名.函数()

还有算法之类的就不多说了,数据结构、复杂度分析、查找排序问题等等,递归也是很重要的哦(* ̄︶ ̄)y

Python和java有很多思想上的相同点,以后继续探讨吧,今天就到这儿了,拜拜(⌒▽⌒)

4、总结

还有很多标准库,比如time、calendar等,需要继续学习,总体感觉python很方便、很强大,很轻松就可以实现一个功能,当然图形界面我还没有学到,相信会有很多惊喜。

由于是初学者,所以文中不免出现错误,请指正、见谅,文中的许多摘录都是这本书里的(不会侵犯知识产权之类吧。。。。。。),第一次写,不太好,相信以后会越来越好的,(⌒▽⌒)

计算机的知识真的是一门无底洞,作为一名门外汉,只能且学且珍惜了。。。。。。

 

posted on 2016-05-03 19:42  NAVERON  阅读(273)  评论(0编辑  收藏  举报

导航