关闭

简明Python教程笔记(一)

标签: python
57人阅读 评论(0) 收藏 举报

此文为简明Python教程笔记。

第一部分

介绍

Python特点
简单、易学——伪代码本质
免费开源——FLOSS(自由/开放源码软件)
高层语言
可移植性强——支持多平台
解释性——更易移植
面向对象——既面向过程也面向对象
可扩展性
可嵌入性
丰富的库

最初的步骤

环境变量

如果是windows,使用前需要编辑path变量——c\python23

运行方式

命令行,交互式解释器,或者源文件。
交互式解释器作用是把python代码翻译成机器码
交互式解释器有哪些?
Python——命令行启动
IPython
JPython
CPython
ironPython
IDLE(集成开发环境Python GUI)——提示符: >>>是你键入python语句的提示符。退出python提示符:按Ctrl-z再按Enter。

注释

“#”符号右面的内容都是注释
“#!”后面跟着一个程序
组织行:

#!/usr/bin/python

这行告诉系统该运行哪个解释器
python文件第一行有这个才能直接运行。

编码解码

# -*- encoding:utf-8 -*-

文件首行有这行才能显示中文。
文件保存为utf-8格式的文件。

基本概念

常量

特点:
不能改变它的值
在赋值给变量之前不需要声明
访问一个未赋值的变量会产生一个异常

some_other_var  # Raises a name error

if 可以作为表达式来使用

"yahoo!" if 3 > 2 else 2 #=> "yahoo!"

包含整数,长整数,浮点数,复数。

字符串

字符串相关

引号:

单引号
双引号与单引号完全相同
三引号——指示多行字符串

转义符
自然字符串——前缀r或R
Unicode字符串——前缀u或U
字符串是不可变的
按字面意义级连接字符串

字符串处理

1.字符串连接:

##两种方法
+
" ".join[a,b]

2.转义符:

'What\'s your name?'
##行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行
\\ 反斜杠
\000 空
\’ 单引号
\” 双引号
\n 换行
\t Tab制表符
\40表示空格

3.使用dir(str)查看常见的字符串方法。
4.比较两个序列值是否相同

cmp(str1,str2)

5.字符串格式化输出
占位符:

%s  字符串(采用str()的显示)
%f 浮点数
%r 字符串(采用repr()的显示)
%c 单个字符
%b 二进制整数
%d 十进制整数
%e 指数

format函数:

##检测字符串里有没有大括号{},有的话ID替换掉
url.format(itemid)

变量

标识符

1.规则
第一个字符必须是字母表中的字母(大写或小写)或者一个下划线,名称的其他部分可以由字母(大写或小写)、下划线(‘ _ ’)或数字(0-9)组成。
2.变量
使用规则:变量要先赋值,后使用
相关方法:id(a),可以查看a变量在python解释器中定义的位置
3.函数
4.类

数据类型

数据类型有哪些

None——null
str——字符串类型,ASCII,以8位的ASCII码储存,比如:‘abc’,’中国’
unicode——Unicode字符串类型,16位的Unicode字符,比如:u’Hello world’
float——双精度(64)浮点数
bool——布尔类型,Ture或者False(大写)

表示Ture:
1
“****”——字符串不为空
[123]——列表不为空
{“a”:"aaa"}
只要不是空的
表示False0
“”——字符串为空
[]——列表为空
{}——字典为空

int——有符号整数,最大值由平台决定
long——任意精度的有符号整数,int类型数字一旦超过最大值,会自动转换为long

整数,长整数,浮点数,复数complex。

如何判断一个变量的类型

type函数可以用于得到某个对象的类型
isinstance 函数用于判断某个对象类型是否属于指定的类型中的一种

类型转换函数

str字符串调用decode方法转为unicode(解码)。
unicode字符串调用encode方法转为str字符串。
工厂函数:

int  将其他对象转成整数类型  
float()
bool()
str()
long()

对象

任何东西

逻辑行与物理行

物理行是你在编写程序时所 看见的。逻辑行是Python 看见 的单个语句。
想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号(;)
反斜杠的使用,有时候有一种暗示的假设,可以不需要使用反斜杠

缩进

同一层次的语句合起来称为一个块

None

不要使用相等符号 == 来把对象和 None 进行比较

"etc" is None

None、0 以及空字符串和空列表都等于 False,除此以外的所有值都等于 True

0 == False  #=> True
"" == False #=> True

运算符与表达式

运算符

1.注意优先级
2.计算顺序——圆括号改变
3.结合规律:
具有相同优先级的运算符从左到右顺序:

2+3+4的等同于(2+3)+4

赋值运算符是自右向左:

a=b=c等同于a=(b=c)

表达式

1.数学运算表达式
其中,关于除法

除法,有一个是小数,结果是小数。
整数相除,默认得到商。
from__future__import division让两整数相除得到浮点数结果

2.逻辑运算表达式——or,and
3.比较运算表达式——1>2
4.python中表达式都有值,其值就是表达式运算后的结果

第二部分

控制流

选择结构(判断语句)

if语句
用来检验一个条件, 如果 条件为真,我们运行一块语句

if-elif-else
##逻辑行结尾处有一个冒号,else可选
##冒号后跟着语句块

循环结构

while语句

1.循环次数未知
2.只要在一个条件为真的情况下,while语句允许你重复执行一块语句
3.else可选

for循环(迭代历遍语句)

1.迭代字符串
2.for..in——for i in range(1, 5):
3.在一序列的对象上 递归 即逐一使用队列中的每个项目
4.else可选
5.range(数字):
- 返回从零到给定的数字的数字列表
- range(0,1001,2)
- 包头不包尾,默认是0
- 迭代器,先把要迭代的数全部生成好存在内存,再一个个操作
- 必须整数
- 3.5版本默认就是生成器
6.xrange——生成器,一次生成一个(性能的提升),3.5版本没有
7.循环次数已知

break语句

如果你从for或while循环中 终止 ,任何对应的循环else块将不执行
if s == ‘quit’: break
跳出循环

continue语句

用来告诉Python跳过当前循环块中的剩余语句,然后 继续 进行下一轮循环。
略过循环。

if len(s) < 3:  continue
##如果长度小于3,我们将使用continue语句,忽略块中的剩余的语句。否则,这个循环中的剩余语句将被执行

函数

组成

定义

1.函数是重用的程序段
2.通过def关键字定义

def sayHello():

3.

if__name__=='__main__':pass
##python文件在被调用的时候,__name__值为模块名
##当python文件被运行之后,__name__值为‘__main__’
##上面只定义函数、常用属性,下面写主逻辑。

参数

1.参数名称为 形参
2.函数调用的值称为实参
3.默认参数值

##只有在形参表末尾的那些参数可以有默认参数值
def func(a, b=5)是有效的

4.关键参数

##使用名字(关键字)而不是位置来给函数指定实参
"{name} wants to eat {food}".format(name="Bob", food="lasagna")

5.可变数量参数

##也可以定义一个函数,并让它接受可变数量的关键字参数
def keyword_args(**kwargs):
keyword_args(big="foot", loch="ness") #=> {"big": "foot", "loch": "ness"}
##你可以定义一个函数,并让它接受可变数量的定位参数
def varargs(*args)
varargs(1, 2, 3) #=> (1,2,3)
##还可以同时使用这两类参数
def all_the_args(*args, **kwargs):
##使用 * 来展开元组,使用 ** 来展开关键字参数

局部变量

所有变量的作用域是它们被定义的块
global语句

global x, y, z
##声明是全局变量

语句与文档字符串

return语句

从一个函数 返回 即跳出函数
没有返回值的return语句等价于return None

文档字符串(DocStrings)

1.标准格式
文档字符串以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。

'''    '''

2.调用方法
doc(注意双下划线)调用printMax函数的文档字符串属性
3.也适用模块和类

匿名函数

(lambda x: x > 2)(3) #=> True

dir()函数

查看该模块的函数列表
dir + help的使用

内置的常用数学函数

divmod 返回两个数相除的商和余数
round 四舍五入

Math模块常用的函数

pow 幂运算
sqrt 开方运算
floor/ceil
fabs
fmod

高阶函数

map:

map(lambda x:x*2+1,data)
map(add_10, [1,2,3]) #=> [11, 12, 13]

reduce:

##求10的阶乘
num=[1,2,3,4,5,6,7,8,9,10]
reduce(lambda x,y:x*y,num)

使用列表推导式来模拟 map 和 filter

[add_10(i) for i in [1, 2, 3]]  #=> [11, 12, 13]
[x for x in [3, 4, 5, 6, 7] if x > 5] #=> [6, 7]

filter

##1000以内的偶数
res=filter(lambda x: x%2==0,a)
filter(lambda x: x > 5, [3, 4, 5, 6, 7]) #=> [6, 7]
##过滤判断好的

模块

导入方法

绝对导入

import sys语句

sys.argv

相对导入

from..import语句

from sys import argv
from sys import *    ##你可以从一个模块中导入所有函数
##不建议使用这种方式,import 更易读

字节编译的.pyc文件

安装其他人的模块

1.Anaconda2\Scripts

所有python的工具都在这个文件夹
conda.exe

2.模块的安装
pip命令(python自带):

c:\python27\scripts>pip.exe install pymysql
c:\python27\lib\site-packages   ##所有第三方库的文件夹

conda命令(anaconda环境特有):

conda.exe install scrapy
conda.exe list  ##把当前python环境里安装的所有第三方模块都返回

优先使用
好处:能够自动分析模块之间的依赖,如果安装A模块中,引用了B模块,可以自动安装好B模块
缺点:网络不好易下载失败,解决办法:尝试使用代理
whl文件的安装(google一下):
二进制文件
搜索需要的包,复制到scripts文件夹下,使用pip等安装,输入首字母按Tab自动补全。

sys.path

当前python文件的目录
site-packages

模块方法

1.模块的属性
模块的name
当一个模块被第一次输入的时候,这个模块的主块将被运行。假如我们只想在程序本身被使用的时候运行主块,而在它被别的模块输入的时候不运行主块,我们该怎么做呢?这可以通过模块的name属性完成。

if __name__ == '__main__':

2.join的方法

print"    ".join("1","2","3")

模块类别

常见模块

1.sys系统相关
2.datetime日期
3.re正则表达式
4.math数学运算模块
5.Numpy科学计算 Pandas结构化函数 Scipy数值积分 matplotlib绘制数据图表
6.request http访问库 scrapy网络爬虫工具库
7.学习方法
dir()函数:
列出模块定义的标识符。标识符有函数、类和变量。
当你为dir()提供一个模块名的时候,它返回模块定义的名称列表
如果不提供参数,它返回当前模块中定义的名称列表
help()函数:
详细定义
8.python标准库

制造你自己的模块

这个模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path所列目录之一
使用了点号来使用模块的成员
from mymodule import sayhi, version

库、包、模块之间的关系

包含关系:库-包-模块
一个包下面可以有很多模块
包的文件下面必须有init.py

数据结构

类与对象的概念

当你使用变量i并给它赋值的时候,你可以认为你创建了一个类(类型)int的对象(实例)i

列表list

属性

1.方括号

shoplist = ['apple', 'mango', 'carrot', 'banana']

2.比如赋整数5,你可以认为你创建了一个类(类型)int的对象(实例)i
3.用 in 来检查是否存在于某个列表中
4.索引indexing、分片slicing
5.获取列表长度

len(a)
a.__len__()

6.在print 语句的结尾使用一个逗号来消除每个语句自动打印的换行符,就是不回车了

print 'these items are:',

修改

1.添加

##在末尾添加
shoplist.append('rice')
##插入,在索引为1的位置插入
mylist.insert(1,3000)

2.排序
shoplist.sort()

shoplist.sort(reverse=ture)   ##表示从大到小
##这个方法影响列表本身,而不是返回一个修改后的列表
##与字符串工作的方法不同,因此我们说列表可变,字符串不可变

reverse——把列表的元素反过来
3.修改索引为1的元素

把列表的元素反过来

4.删除

##删除
del shoplist[0]
##移除最后一个元素,并且返回删除的值
li.pop()        #=> 3 and li is now [1, 2, 4]
#删除指定元素(有多个删除第一个,没有抛出异常)
remove

5.输出列表元素

print mylist(0:10:2)
##0-10隔一个取

6.列表求和

print sum(mylist)

表与表

1.列表相加

li + other_li
##结果[1, 2, 3, 4, 5, 6] - 请留意 li 和 other_li 并不会被修改

2.用 extend 来合并列表

li.extend(other_li)
现在 li[1, 2, 3, 4, 5, 6]

不定常列表

def funcw(*args):
##后面就可以将args作为列表使用
func2(1,2,2,2,3,4,5)

元组tuple

属性

1.圆括号

zoo = ('wolf', 'elephant', 'penguin')

2.不可变
3.来访问new_zoo元组的第三个项目的第三个项目

new_zoo[2][2]

4.含有单个元素的元组,在第一个项目后跟一个逗号,这样Python才能区分元组和表达式中一个带圆括号的对象

singleton = (2 , )

基本使用方法

1.元组最通常的用法是用在打印语句中

print '%s is %d years old'   % (name, age)
"{0} can be {1}".format("strings", "formatted")  ##format 方法

2.定制字符串
%s——表示字符串
%d——表示整数
3.也可以一个定制

print 'why is %s playing with that python?' % name

方法

1.元组拆包
你可以把元组(或列表)中的元素解包赋值给多个变量

a, b, c = (1, 2, 3)
##现在 a 是 1,b 是 2,c 是 3
##如果你省去了小括号,那么元组会被自动创建
d, e, f = 4, 5, 6

2.交换两个值

e, d = d, e
##现在 d 是 5 而 e 是 4

字典

属性

1.字典是dict类的实例/对象
2.花括号

ab = { 'Swaroop' : 'swaroopch@byteofpython.info'}
d = {key1 : value1, key2 : value2 }

3.字典输出无序
4.映射mapping:
通过名称来引用值的数据结构
把键(名字)和值(详细情况)联系在一起
哈希映射或相联数组(重要)

基本使用方法

1.

print "Swaroop's address is %s" % ab['Swaroop']

2.用索引操作符来寻址一个键并为它赋值

ab['Guido'] = 'guido@python.org'

3.del语句来删除键/值对

del ab['Spammer']

4.使用in操作符检验一个键/值对是否存在
或者使用dict类的has_key方法

if 'Guido' in ab:

5.使用 in 来检查一个字典是否包含某个键名

"one" in filled_dict #=> True

方法

1.与键名有关
将字典的所有键名获取为一个列表

filled_dict.keys() #=> ["three", "two", "one"]
##请注意:无法保证字典键名的顺序如何排列

将字典的所有键值获取为一个列表

filled_dict.values() #=> [3, 2, 1]

2.与键值有关
使用 [] 来查询键值:

filled_dict["one"] #=> 1

get根据key获取value值,key不存在时返回None,查询一个不存在的键名会产生一个键名错误:

filled_dict["four"] # KeyError
##所以要使用 get 方法来避免键名错误
filled_dict.get("one") #=> 1
filled_dict.get("four") #=> None
##get 方法支持传入一个默认值参数,将在取不到值时返回
filled_dict.get("one", 4) #=> 1
filled_dict.get("four", 4) #=> 4

pop获取指定键的值,然后将该键值对从字典中移除。
setdefault根据key返回对应的value值,key不存在则返回默认值并相应更新字典。
3.都有关
items:

字典的items方法来使用字典中的每个键/值对,来使用字典中的每个键/值对。
将所有的项以列表的方式返回。
iteritems返回迭代器。

Setdefault 方法可以安全地把新的名值对添加到字典里:

filled_dict.setdefault("five", 5)
##filled_dict["five"] 被设置为 5
filled_dict.setdefault("five", 6)
##filled_dict["five"] 仍然为 5

copy、deepcopy复制(浅复制、深复制)。
popitem随机移除某个键值对。
clear清除字典中所有的项。
update使用一个字典去更新另一个字典:

字典重点键值对会添加到原来的字典中
有相同的key则更新对应的value

其他

person_info={uid[0]:{"name":name[0],"age":age[0],"sex":sex[0]}}
person_info["u1"]['name']
##取u1中name是什么

不定常字典:

def func3(**kwargs)
func3(host="localhost",port="3366")
连接数据库时方便使用

先创建空表,后逐步填充:

employee={}.fromkeys(("name","age","salary")."i,do not know")

集合

1.set 用于保存集合

empty_set = set()
some_set = set([1,2,2,3,4])
##some_set 现在是 set([1, 2, 3, 4])
##从 Python 2.7 开始,{} 可以用来声明一个集合
filled_set = {1, 2, 2, 3, 4}
##(译注:集合是种无序不重复的元素集,因此重复的 2 被滤除了。)
##(译注:{} 不会创建一个空集合,只会创建一个空字典。)

2.把更多的元素添加进一个集合

filled_set.add(5)
##filled_set 现在是 {1, 2, 3, 4, 5}

3.使用 & 来获取交集

other_set = {3, 4, 5, 6}
filled_set & other_set #=> {3, 4, 5}

4.使用 - 来获取补集

{1,2,3,4} - {2,3,5} #=> {1, 4}

序列

1.列表、元组和字符串都是序列
2.索引操作符

print 'Item 0 is', shoplist[0]

3.切片操作符

print 'Item 1 to -1 is', shoplist[1:-1]
##相当于数学中的左闭右开区间

4.使用 | 来获取并集

filled_set | other_set #=> {1, 2, 3, 4, 5, 6}

引用/参考

如果是想复制,使用切片操作,复制后复制副本不受原始对象变化影响。
如果只是使用另一个变量名,那么是只是参考同一个对象。

更多字符串的方法

1.startwith方法
测试字符串是否以给定字符串开始
2.in操作符
给定字符串是否是另一个字符串的一部分
3.find方法
找出位置,返回-1表示找不到
4.字符串join
返回一个生成的大字符串:

delimiter = '_*_'
print delimiter.join(mylist)
mylist = ['Brazil','Russia','India','China']
##结果:
Brazil_*_Russia_*_India_*_China

python推导式

for循环结合表达式
列表推导式
字典推导式
集合推导式

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1559次
    • 积分:234
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档