AGS Python开发-Python基础入门


1.数据类型

整数(int):1,-100
浮点数(float):1.23
字符串(str):'abc',"xyz"
布尔值(bool):True、False
空值:None

2.变量和常量

变量定义格式:变量名=值,示例:checked=True
常量定义格式:常量名=值,示例:PI=3.14

3.字符串与编码

  1. 字符编码
    ASCII:一个字节编码
    Unicode:两个字节编码
    UTF-8:可变长编码

计算机内存统一使用Unicode编码,保存在磁盘一般使用UTF-8编码。所以磁盘数据读取到内存,内存数据写入到磁盘就涉及到unicode与UTF-8之间的转换。

  1. python中的字符串
    python中的字符串支持ASCII和Unicode编码,unicode编码的字符串使用u"字符串内容"表示。
    unicode转UTF-8:u"中文".encode("utf-8")
    UTF-8转unicode:"\xe4\xb8\xad\xe6\x96\x87".decode("utf-8")
  2. 注意事项
    [1] 文件头注明编码:# -*- coding: utf-8 -*-
    [2] 源码文件使用UTF-8 without BOM编码保存
    [3] 中文字符串赋值时使用unicode编码

4.复合数据类型

4.1.list和tuple

  1. 定义格式
    list列表:keywords = ["china","map","gis"]
    tuple元组:keywords = ("china","map","gis")
  2. list的基本操作
    访问:keywords[0]
    增加:keywords.append("service")
    插入:keywords.insert(1,"extent")
    删除:keywords.pop()keywords.pop(2)
    删除:keywords.remove("china")
    批量删除:del keywords[:2]
    取索引号:keywords.index("gis")
    排序:keywords.sort()
    倒排序:keywords.reverse()
    是否存在指定元素:"gis" in keywords
  3. list和tuple的区别
    list中元素可变。
    tuple中元素不可变。
  4. 切片操作
    用来替代循环语句。
    keywords[起始索引号:结束索引号:步长]

不含结束索引号的元素。

4.2.dict

字典是键值对集合

  1. 定义
    attrs = {"id":1,"type":"point"}
  2. 基本操作
    访问:atts["id"]或者atts.get("id")
    删除:atts.pop("id")
    删除:del atts["id"]
    所有key:atts.keys()

4.3.set

集合是一个无序不重复元素的集。

  1. 定义
    方式1:uValues = set("a","b","c")
    方式2:uValues ={"a", "b", "c"}
  2. 基本操作
    添加:uValues.add("d")
    删除:uValues.remove("b")
    删除重复元素:uValues = set([1,2,2,3,4])

5.数据类型转换

转整型:int(value)
转浮点型:float(value)
转字符串:str(value)
转unicode:unicode(value)
转bool:bool(value)

6.流程控制语句

  1. if语句
if <条件1>:
    print 1
elif <条件2>:
    print 2
else:
    print 3
  1. for语句
for x in 序列:
    print x
  1. while语句
while 条件:
    print 执行
  1. break和continue语句
  2. pass语句
    占位符

7.高级特性

7.1.迭代

  1. list和tuple类型的迭代
    迭代value:for … in
    迭代索引和value:for i, value in enumerate(list)
  2. dict类型的迭代
    迭代key:for key in dict
    迭代value:for value in dict.itervalues()
    迭代key和value:for key ,value in dict.iteritems()
  3. 判断对象是否可以迭代
from collections import Iterable
canIter = isinstance(obj, Iterable)

7.2.列表推导式

用于快速生成列表。

  1. 方式1:[x*x for x in range(0,20)]
  2. 方式2:[x*x for x in range(0,20) if x%2==0]

集合推导式:s = {x for x in "abracsdasd" if x not in "abc"}
字典推导式:d = {x: x**2 for x in (2,4,6)}

7.3.生成器

列表推导式生成的列表占用内存,生成器生成的列表在调用next时生成。

  1. 方式1
    将列表推导式中的[]更改为()即可。
a = (x*x for x in range(0,20))
a.next()
  1. yield关键字
    在需要返回函数的地方使用yield关键字。

8.函数

  1. 函数定义
def func_name(arg1):
    if arg1>10:
        return arg1:
    return 0
  1. 默认参数
def power(x, n=2):
    s =1
    while n>0:
        n = n-1
        s = s *x
    return s

默认参数需要使用不可变对象,否则会出现逻辑错误。

  1. 可变参数
def calc(*numbers):
    <函数体>

可变参数接收的是tuple类型。

  1. 函数参数
    函数式编程:允许将函数作为参数。
def add(x,y,f):
    return f(x)+f(y)

f是函数

  1. map()函数
    map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
    效果类似:map(f,[1,2,3]) = [f(1),f(2),f(3)]
  2. reduce()函数
    reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。
    效果类似:reduce(f,[1,2,3]) = f(f(1,2),3)
  3. filter()函数
    filter()函数接收两个参数,一个函数,一个序列,filter将传入的函数依次作用于序列的每个元素,并只保留结果中是True的。
  4. sorted()函数
    支持自定义的排序函数作为参数。
  5. lambda表达式
    定义格式:lambda a,b: a+b
  6. 其他常用函数
    dir():显示模块定义
    len():返回长度
    type():返回对象的类型
    isinstance():检验对象类型
    range():生成数字序列
    help():查询帮助

9.注释

#:单行注释
'''…''':多行注释
"""…""":doc注释,在函数名之后的注释。多行注释时,第二行应该空出来。

def funcname():
    """函数简介
 
    函数详情。
    """
    pass

10.模块和包

  1. 模块
    模块是一个单独的py文件,模块名即为文件名。
# fibo.py
def fib(n):
    pass
  1. 模块导入
    方式1:import语句
import fibo
#调用
fibo.fib(10)

方式2:from 模块 import 模块函数

from fibo import fib
#调用
fib(10)
  1. name
    模块执行:在模块中增加name判断。
if __name__ == "__main__":
    #调用模块定义的内容 
  1. 作用域
    私有函数约定使用__开头来命名函数。
  2. 第三方模块
    使用pip安装。
  3. 模块搜索路径
    模块搜索路径定义在sys.path中。可动态添加:sys.path.append("newpath"),或者定义环境变量PYTHONPATH。

  4. python使用文件夹定义包,文件夹中必须包含__init__.py,该文件内容可为空,或者定义__all__变量。
    __all__定义了可以导入的模块列表:
    __all__ = ["point","line"]

11.类

  1. 类定义与实例化
    类定义:
class Person(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
 
    def print_info(self):
        print "%s,%s" % (self.name,self.age)

类的实例化:lisa = Person("Lisa",25)

类中的方法第一个参数是self。

  1. 私有属性定义
    约定私有属性使用一个下划线_开头命名。
  2. @property定义属性get和set方法
class Student(object):
    @property
    def name(self):
        return self.__birth
 
    @name.setter
    def name(self, value):
        self.__name = value
  1. 可变类型的属性定义
class Mapping:
    def __init__(self,value):
        self.value = value
        self.items_list = []
  1. 多继承
class subClass(parent1,parent2):
    pass

12.异常处理

  1. try语句
try:
    <执行>
except ValueError as e:
    <异常处理>
finally:
    <执行完的处理>
  1. 自定义异常类
    直接或间接继承Exception类。
class MyError(Exception):
    #覆盖父类
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return repr(self.value)
  1. 错误记录与调试
    使用logging模块,记录日志信息。

13. 编码原则

  1. 使用4个空格缩进
  2. 使用文档注释
  3. 类名使用驼峰命名,函数和方法使用小写和下划线。类中的方法第一个参数使用self。

13.IO编程

13.1.文件操作

  1. 读取文件
    基本流程:打开-->读取-->关闭。
try:
    f = open("c:\\text.txt","r")
    print f.read()
except IOError,e:
    print e
finally:
    if f:
        f.close()

简写方式,由python自动调用close()方法:

with open("c:\\text.txt","r") as f:
    print f.read()
  1. 读取模式
    r(只读)、b(二进制)、w(写) 、a(追加)、r+(读写)
f = open("c:\img.jpg", "rb")
f.read()

windows平台上读取文本文件时,会在行尾自动添加行结束符,对JPEG之类文件的读取会破坏结构,建议一切以二进制打开。

  1. 字符编码
    读取GBK编码的文本文件:
f = open("c:\\gbktext.txt","rb")
u = f.read().decode("gbk")
print u

读取utf-8编码的文本文件:

f = open("c:\\uft8text.txt","rb")
u = f.read().decode("utf-8")
print u

写入utf-8编码的文本文件:

f = open("c:\\uft8text.txt","w")
f.write(u"新增加".encode("utf-8"))
f.close()

推荐方法,调用codecs模块:

import codecs
with codecs.open("c:\\gbktext.txt","r","gbk") as f:
    f.read()

一般原则:内部使用unicode编码,外部使用各自编码。

  1. 常用方法
    read():一次性读取到内存
    read(size):读取指定字节的内容
    readline():读取一行
    readlines():读取所有行
    write():写入

13.2.目录操作

  1. os模块
    读取所有环境变量:os.environ
    读取指定环境变量:os.getenv("PATH")
    读取当前目录的绝对路径:os.path.abspath(".")
    路径拼接:os.path.join("c:\\demo","text.txt")
    创建目录:os.mkdir("c:\\demo")
    删除目录:os.rmdir("c:\\demo")
    拆分路径和文件:os.path.split("c:\\demo\\text.txt")
    拆分扩展名:os.path.splitext("c:\\demo\\text.txt")
    文件重命名:os.rename("old.txt","new.txt")
    删除文件:os.remove("new.txt")
    目录判断:os.path.isdir(path)
    文件判断:os.path.isfile(path)

14.常用的Python标准库

  1. 操作系统接口:os和shutil
  2. 命令行参数:sys.argv
  3. 正则表达式:re
  4. 数学:math和random
  5. 日期和时间:datetime、time
  6. 数据压缩:zlib、gzip、bz2、zipfile、tarfile
  7. xml操作:xml.dom、xml.sax
  8. json操作:json
  9. 进程与线程:multiprocessing、Queue、Pipes、Threading
  10. 日志:logging

参考资料

[1] Python2.7教程
[2] Python入门指南
[3] Python2.7字符编码
[4] 官方文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,265评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,274评论 1 288
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,087评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,479评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,782评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,218评论 1 207
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,594评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,316评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,955评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,274评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,803评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,177评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,732评论 3 229
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,953评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,687评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,263评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,189评论 2 258

推荐阅读更多精彩内容