python入门笔记

这是我学习python的第一本书中的笔记。

这本书名叫《Python编程入门》,[加]Toby Donaldson 著,袁国忠 译


python适用于

脚本

网站开发 Django,Bottle,Zope   www.reddit.com

文本处理

科学计算

教育

整数算数

  加 +

减 -

乘 *

除 /

乘方 **

求余 %

整除 //

10^-6 e-06

复数 1j = -1的开根号

数学函数 math

导入模块

>>>import math

另一种导入模块的方式

>>>from math import *

log(25+5)


模块math中的一些函数

ceil(x) 大于或等于x的整数

cos(x) x的余弦

degrees(x) 将x弧度转换为度数

exp(x)  e的x次方

factorial(x)  n!

log(x)  以e为底的x的对数

log(x,b) 以b为底的x的对数

pow(x,y)  x的y次方

radians(x) 将x度转换为弧度数

sin(x) x的正弦

sqrt(x) x的平方根

tan(x) x的正切


标识字符串--单引号,双引号,三引号

字符串长度 len(s)

字符串拼接 'aa' + 'bb' = 'aabb'

10 * ‘he’

列出模块中的函数

>>>import math

>>>dir(math)

打印文档字符串

>>>print(math.tanh.__doc__)

>>>print(bin.__doc__)

float(3) = 3.0

float('3.2' ) = 3.2

str(85) = '85'

int(8.64) = 8

int('5') = 5


赋值

x = expr

多重赋值

x,y,z = 1,'two',3.0

变换变量的值

a , b = b , a


在IDLE中编程

windows中Notepad++


从建盘中读取数据

#name.py

name = input('what is your first name')

print('hello' + name.capitalize() + '!')


>>>print('I' , ‘love’ , 'you')

I love you

默认空格分离

>>>print(‘I’ , 'love' , 'you' , sep = '.')

I.love.you

默认print完后加\n.

#jack1.py

print('jack ate')

print('no fat')


#jack2.py

print('jack ate' , end = ' ')

print('no fat')

源代码注释 #


程序的组织

输入-->处理-->输出


布尔逻辑

布尔真 True

布尔假  False

逻辑相等 ==

逻辑与 and

逻辑或 or

逻辑非 not


布尔运算的优先级(按从高到低的顺序排列)

p==q

p != q

not p

p and q

p or q


短路求值

p or q --> 如果p为False,结果为q,否则结果为p

p and q -->  如果p为False,结果为p,否则结果为q

if/else语句

if 条件: ...

else : ...

条件表达式-->if语句的简写

food = input("Waht's your favorate food?")

reply = 'yuck' if food == 'lamb' else 'yum'


for循环

#count10.py

for i in range(10) : -->太极1---从0开始

print(i)

for i in range(5 , 10) : -->从5到9

print(i)

for i in range(10 , 0 , -1) :

print(i)

-1是步长


while循环

#while10.py

i = 0

while i < 10 :

print(i)

i = i + 1

跳出循环的语句块 break

continue也有,不适用

循环中的循环-->嵌套循环

for ...

for ...

...


定义函数

#area.py

def area(radius) :

return math.pi * radius ** 2

python中同样包含全局变量和局部变量。

默认值

#greeting.py

def greet(name , greeting = 'hello') :

print(greeting , name + '!')

模块是一系列相关的函数和变量。

#shapes.py

要使用模块,只需要导出他就行

>>>import shapes

>>>from shapes import *

字符串索引

>>>s = 'apple'

>>>s[0]

'a'

复数索引

>>>s = 'apple'

>>>s[-1]

'e'


ord('a') = 97 --> 'a'的ASCII码


一些常见的转义字符

字符 含义

\\ 反斜杠

\' 单引号

\" 双引号

\n 换行符

\r 回车

\t 水平制表符

>>>len('\\')

1

字符串切片

s[begin : end] 返回从索引begin到end-1的子串。

获取切片的捷径

>>>food = 'apple pie'

>>>food[:5]

'apple'

>>>food[6:]

'pie'

>>>food[:]

'apple pie'

下面是一个很有用的切片示例,这个函数返回文件中的扩展名:

#extension.py

def get_next(fname) :

"""returns the extension of file fname."""

dot = fname.rfind('.')

if dot == -1 :

return ''

else :

return fname[dot+1:]


>>>get next(‘hello.text’)

'text'


字符串测试函数

函数名 什么情况下返回True

s.endswith(t)  s以字符串t结尾

s.startswith(t) s以字符串t打头

s.isalnum() s只包含字母或数字

s.isalpha() s只包含字母

s.isdecimal() s只包含表示十进制数的字母

s.isdigit() s只包含数字字符

s.isidentifier() s是合法的标识符

s.islower() s只包含小写字母

s.isnumeric() s只包含数字

s.isprintable() s只包含可打印字符

s.isspace() s只包含空白字符

s.istitle() s是一个大小写符合头衔要求(title-case)的字符串

s.isupper() s只包含大写字母

t in s s包含字符串t


字符串搜索函数

函数名 返回值

s.find(t) 如果没有找到子串t,则返回-1;否则返回t在s中的起始位置

s.rfind(t) 与find相同,但从右往左搜索

s.index(t) 与find相同,但如果在s中找不到t,则引发ValueError异常

s.rindex(t) 与index相同,但从右往左搜索


改变大小写的函数

函数名 返回的字符串

s.capitalize() 将s[0]改为大写

s.lower() 让s的所有字母都小写

s.upper() 让s的所有字母都大写

s.swapcase() 将小写字母改为大写,并将大写字母改为小写

s.title() 让s的大小写符合头衔的要求


设置字符串格式的函数

函数名 返回的字符串

s.center(n , ch) 包含n个字符串,其中s位于中央,两边用字符ch填充

s.ljust(n , ch) 包含n个字符的字符串,其中s位于左边,右边用字符ch填充

s.rjust(n , ch) 包含n个字符的字符串,其中s位于右边,左边用字符ch填充

s.format(vars) 见正文


字符串剥除函数

函数名 返回的字符串

s.strip(ch) 从s开头和末尾删除所有包含在字符串ch中的字符

s.lstrip(ch) 从s开头(左端)删除所有包含在字符串ch中的字符

s.rstrip(ch) 从s末尾(右端)删除所有包含在字符串ch中的字符


字符串拆分函数

函数名 返回的字符串

s.partition(t) 将s拆分成三个字符串(head、t和tail),其中head为t前面的子串,而tail为t后面的子串

s.rpartititon(t) 与partition相同,但从s的右端开始搜索t

s.split(t) 以t为分隔符,将s划分成一系列子串,并返回一个由这些子串组成的列表

s.rsplit(t) 与split相同,但返回一个由这些子串组成的列表

s.splitlines() 返回一个由s中的各行组成的列表


字符串替换列表

函数名 返回的字符串

s.replace(old , new) 将s中的每一个old替换为new

s.extendtabs(n) 将s中的制表符替换为n个空格


其他字符串函数

函数名 返回的函数

s.count(t) t在s中出现的次数

s.encode() 设置s的编码

s.join(seq) 使用s将seq中的字符串连接成一个字符串

s.maketrans(old , new) 创建一个转换表,用于将old中的字符转换为new中的字符;请注意,s是任意的字符串,他不影响返回的转换表

s.translate(table) 使用指定转换表(使用maketrans创建的)对s中的字符进行替换

s.zfill(width) 在s左边添加足够多的0,让字符串的长度为width


正则表达式 ---> import re #使用正则表达式

一些正则表达式运算符

运算符 描述的字符串

xy? x、xy

x|y x、y

x* '' 、x 、xx、xxx、xxxx等

x+ x、xx、xxx、xxxx等


type命令 --> 检查值或变量的数据类型

>>>type(s)

<class 'int'>


序列-->一组按顺序排列的值,包含:字符串、元组、列表

len(s) 计算长度

x in s 检查序列s中是否包含x

元组(tuple):一组不可变序列 ()

items = (-6 , 'cat' , (1,2))

其中items[-1][1] = 2


元组函数

函数名 返回值

x in tup 如果x是元组tup的一个元组,则返回True,否则返回False

len(tup) 元组tup包含的元素数

tup.count(x) 元素x在元组tup中出现的次数

tup.index(x) 元组tup中第一个元素x的索引;如果x未包含在元组tup中,将引发ValueError异常


与字符串一样,也可以使用+和*来拼接元组。

列表,可变的  []

numbers = [7 , -7 , 2 , 3 , 2]


列表函数

函数名 返回值

s.append(x) 在列表s末尾添加元素x

s.count(x) 返回元素x在列表s中出现的次数

s.extend(lst) 将lst的所有元素都添加到列表s末尾

s.index(x) 返回第一次x元素的索引

s.insert(i , x)  将元素x插入到索引为i的元素

s.remove(x) 删除s中的第一个x元素

s.reverse() 反转s中元素的排列顺序

s.sort() 将s的元素按升序排列


列表解析

>>>[ n*n for n in range(1 , 11)]

使用列表解析进行筛选

>>>nums = [-1 , 0 , 6 , -4 , -2 , 3]

>>>result = [n for n in nums if n > 0]

>>>result

[6 , 3]


下面的函数使用列表解析删除字符串中的所有原音:

#eatvowels.py
def eat_vowels(s) :
	return ''.join( [c for c in s if c.lower() not in 'aeiou'] )

字典-->散列 --> {}

>>>color = { 'red' :1 , 'blue' : 2 , ‘green’ : 3 }

>>>color

{'blue':2 , 'green':3 , 'red':1}

>>>color['green']

3

集合-->一系列不重复的元素 --> {}

>>>lst = [1 , 1, 6 , 8 , 1 , 5 , 5 , 6 , 8 , 1 , 5]

>>>s = set(lst)

>>>s

{8 , 1 , 5 , 6}


字符串插入

>>>x = 1/81

>>>print(x)

0.0123456790123

>>>print('value: %.5f' % x)

0.01235

一些转换说明符

说明符 含义

d 整数

o 八进制值

x 小写十六进制值

X 大写十六进制值

e 小写科学计数法表示的浮点数

E 大写科学计数法表示的浮点数

F 浮点数

s 字符串

% %字符


>>>a , b , c = 'cat' , 3.14 , 6

>>>s = 'There \' %d %ss older than %.2f years' % (c , a , b)

>>>s

"there's 6 cats older than 3.14 years"

如果要在字符串中包含字符%,必须使用“%%”

格式字符串

format(value , format_spec)

>>>'My {pet} has {prob}'.format(pet = 'dog' , prob = 'fleas')

'My dog has fleas'

命令替换:在格式字符串中,用大括号括起的内容都将被替换。

>>>'1/81 = {x:.3f}'.format(x = 1/81)

'1/81 = 0.012'

>>>'num = {x:{d}f}'.format(x=1/81 , d = 3)

'num = 0.012'

处理文本文件:打开文件-->处理文件-->关闭文件

逐行读取文本文件

#printfile.py
def print_file1(fname) :
	f = open(fanme , 'r')
	for line in f :
	print(line , end = '')
	f.close()		\#这行代码是可选的
Python文件打开模式

字符 含义

'r' 为读取而打开文件(默认模式)

'w' 为写入而打开文件

'a‘ 在文件末尾附件而打开文件

’b' 二进制模式

't' 文本模式(默认模式)

'+' 为读写而打开文件


将整个文件作为一个字符串进行读取

#printfile.py
def print_file2(fname) :
	f = open(fname , 'r‘)
	print(f.read())
	f.close()
简化	
	print( open(fname, ’r').read() )
写入文本文件

#write.py
def make_story1() :
	f = open('story.txt' , 'w')
	f.write('XiaoYiSi is Xiao Yi Si,\n')
	f.write('xiaoyisi,haha.\n')
'w'是覆盖,原内容将不存在

如果不想覆盖story.txt,应先检查他是否存在

#write.py
import os
def make_story2() :
	if os.path.isfile('story.txt') :
		print('story.txt already exists')
	else :
		f = open('story.txt' , 'w')
		f.write('XiaoYiSi is Xiao Yi Si,\n')
		f.write('xiaoyisi,haha.\n')
添加到文件末尾

def add_to_story(line , fname = 'story.txt') :
	f = open(fname , 'a')
	f.write(line)
将字符串插入到文件的开头

将文件读取到一个字符串中,将新文本插入到该字符串,再将这个字符串写入原来的文件。

def insert_title(title , fname = 'story.txt') :
	f = open('story.txt' , 'r+')
	temp = f.read()
	temp = title + '\n\n' + temp
	f.seek(0)	\#让文件指针指向文件开头
	f.write(temp)
处理二进制文件

如果文件不是文本文件,他就被视为二进制文件

def is_gif(fname) :
	f = open(fname , 'br')
	first4 = tuple(f.read(4))
	return firsr4 == (0x47 , 0x49 , 0x46 , 0x38)


可以使用pickle.dump将数据结构存储到磁盘,以后再使用pickle.load从磁盘获取数据结构

异常发生时,有两种选择:

1.忽略异常

2.捕获异常 -->try/except块

def get_age() :
	while True :
		try :
			n = int( input('How old are you?') )
			return n
		except ValueError :
			print('Please enter an integer value.')
捕获各种异常

try :

...

except :

...

清理操作 --> finally代码块

def invert(x) :
	try :
		return 1/x
	except ZeroDivisionError :
		return 'error'
	finally :
		print('invert (%s) done' %x)
while语句-->确保不再需要的文件被尽早关闭

num = 1
with open(fname , 'r') as f :
	print('04d %s' %(num , line) , end = '')
	num = num + 1

面向对象编程OOP

编写表示一个人的简单类:

#person.py
class Person :
	def __init__(self) :
		self.name = ''
		self.age = 0
创建Person对象时,Python将自动调用__init__

显示对象

#person.py
class Person :
	def __init__(self) :
		self.name = ''
		self.age = 0
	def display(self) :
		print("Person('%s' , age)" % (self.name , self.age))
特殊方法__str__用于生成对象的字符串表示:

	def __str__(self) :
		print("Person('%s' , age)" % (self.name , self.age))
>>>p = Person()

>>>str(p)

"Person('',0)"

特殊方法__repr__,返回对象的“官方”表示

	def __repr__(self) :
		return str(self)
>>>p = Person()

>>>p

Person('' , 0)

>>>str(p)

"Person('' , 0)"

灵活的初始化

#person.py

class Person :
	def __init__(self , name = '' , age = 0) :
		self.name = name
		self.age = age

>>>p = Person('longlong' , 13)

设置函数和获取函数

def set_age(self , age) :
	if 0 < age <= 150 :
		self.age = age


特性装饰器

获取函数返回变量的值,使用@property装饰器来指出这一点:

@property
def ages(self) :
	"""returns this person's age"""
	return self._age

修改后的函数

#person.py
class Person:
	def __init(self , name = '' , age = 0) :
		self._name = name
		self._age = age

	@property
	def age(self) :
		return self._age

	def set_age(self , age) :
		if 0 < age <= 150 :
			self._age = age
	def display(self) :
		print(self)
	def __str__(self) :
		return "Person( '%s' , %s )" % (self.name , self.age)
	def __repr__(self) :
		return str(self)
为给age创建设置函数,我们将方法set_age重命名为age,并使用@age.setter进行装饰

@age.setter
def age(self , age) :
	if 0 < age <= 150 :
		self._age = age
完成修改后可以这样编写

>>>p = Person('Lia' , 33)

>>>p

Person('Lia' , 33)

>>>p.age = -4

>>>p.age

55

私有变量

依然可以直接访问self._age

>>>p._age = -44

>>>p

Person('Lia' , -44)

直接修改age可能导致对象不一致,因此,通常不希望直接修改的情况发生。

self._age -->私有变量,不应在Person类外直接访问他。

要直接访问self.__age,需要在前面加上_Person

>>>p._Person.__age = -44

>>>p

Person('Lia' , -44)

继承

class Player :

...

class Human(Player) :

pass


s.split() -->分成一个个单词

set(t.split()) -->去重

s.replace('!' , ' ') -->去除不想要的字母


yixiepython包

PIL:python图像处理库

Tkinter:Python GUI

Django:交互式网站

Bottle:交互式网站

Pygame:2D动画

SciPy:科学计算

Twisted:网络编程

PyPI:Python包索引



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值