Python-语法

这篇博客详细介绍了Python的基本语法,包括注释、基本类型、操作符、流程控制。深入讲解了函数定义、容器类型如列表、元组、集合和字典的操作,以及模块和包的使用。还涉及了输入输出、异常处理、类和迭代器、生成器的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python-语法

sf2gis@163.com

2015年1月1日

 

1 基本语法

单行多语句与多行单语句:单行多语句使用;分隔。多行单语句使用\换行。

标识符:与C相同(大小写敏感)。

不支持重载标识符。

语句层次通过缩进来体现。

获取帮助:help(函数名)。

入口函数:当.py文件被执行时,此模块的名称(__name__)将被设置为__main__,通过判断此名称,可以确保当前模块的执行状态。

参考:http://python.usyiyi.cn/python_278/tutorial/datastructures.html

1.1 注释:

独立注释:#

文档字符串注释:在函数、文件、模块的首行添加一行字符串,充当注释,可以用来自动生成文档。

1.2 基本类型

1.2.1bool

1/True 、0/False。

1.2.2字符串(ansi型):

字符列表组成。索引从0开始,负值索引表示从右向左。单字符表示字符串长度为1。

使用单引号或双引号(意义相同)。\为转义字符。

’’’三引号用于定义多行字符串(自动加入\n换行),其中可自由使用单行字符串’’/””。

续行字符:用于行尾的\。

使用print打印字符串。

r/R前缀可以取消转义字符为显示字符。

两个相邻的字符串字面值自动合并。支持+串联,*重复,\换行。支持列表操作【start,end】取部分列表(包括start,不包括end)(start默认值0,end默认值为全部长度)。

len()返回长度。

无法编辑,只能创建新值。注意:字符串值是只读的。

1.2.3Unicode字符串:

使用u/U前缀声明的字符串就是unicode编码的。encode():Unicode-》ansi,decode()相反。

1.2.4print

 打印字符串。如果添加后缀逗号,则不换行。

1.3 操作符

+-*%/(整除,如果两个int操作,则floor整除,如果有浮点数参与,则是浮点除,默认使用double型浮点数),

//(用于整除,无论何种类型都是floor整除)。

**:幂

=:赋值,变量要求先定义后使用。

_:只读型快捷变量,用于表示最近一次操作的结果,定义此变量将会屏蔽全局变量。

in:判断是否在容器中。

del:一切对象的删除功能。

not:否定前缀。

is:相同判断。

and:并。

or:或。

< > ==:比较运算符,可以连续比较。相当于and连接共享操作值。不同类型的比较,只比较类型名。

type():获取类型。

不运行++ --

1.4 流程控制

选择:if…elif…else。无switch…case。

循环:for it in list。whilecond。+else。continue。break。

范围函数:range(start,end,step):生成等差数组列表。

占位语句:pass。

2 函数定义

2.1.1声明

2.1.1.1  def 函数名(参数)

第一行为简介,之后与doxygen相同。默认返回None。可以定义默认值,但默认值只计算一次,如果默认值为容器,则可能会有添加多次。可以使用关键字参数。可以使用可变参数,*name表示一维容器。**name表示字典类型。

return 返回值。

2.1.1.2  lambda表达式: 返回一个匿名函数。

目标:单行函数的简洁写法,尽量不要使用。

方法:lambda表达式

格式:lambda 参数:方法。

参考:http://www.cnblogs.com/evening/archive/2012/03/29/2423554.html

示例:

g=lambda x:x+1

g(1)

>>>2

或者

lambda x:x+1(1)

>>>2

3 容器

参考:http://hi.baidu.com/xifanwu/item/349ea5e269e8aff12a09a4c7

3.1 列表list

可变数组。

使用【】或list()生成。

由【】包裹,逗号分隔声明。支持索引和切片。可读写。可以为切片赋值改变列表。支持+,append(),len()。

3.1.1方法

append,extend,insert,remove,pop,index,count,sort,reverse。

3.1.2应用

3.1.2.1  stack

append()+pop()

3.1.2.2  queue

使用collections.deque,append()+popleft。

3.1.2.3  函数式编程

内置函数:filter,map,reduce,sum(seq)

filter(f,seq):过滤,返回结果为true的输入容器。

map(f,seq):映射,返回所有输入序列的结果。

reduce(f,seq):递减,逐次输入,并返回最终结果。

3.1.2.4  列表解析:快速构建列表

计算规则为由左向右依次深入。可以进行各种复杂的组合。

3.2 元组tuple

只读型常量列表。用()表示,可以混合类型。

使用()或tuple()创建。

只有一个值的元组,用(value,)表示。

3.2.1序列拆分

将元素中值依序列拆分后赋予变量列表。

3.3 集合set

不重复无序集合。是dict只有key的情况。

支持并|,交&,差-,异或^。

支持列表解析。

使用set()或{}创建,空集只能用set()创建。set()需要列表作为参数。

set(['a', 'r', 'b', 'c', 'd'])
{xfor x in'abracadabra'if x notin'abc'}

3.4 forzenset

set的常量型,不可变。

3.5 字典dict

键值对。使用dict()创建。{}可以创建空集合。

支持列表解析,append,extend,keys()。sorted(),in。

{key:value,key:value}

迭代器:iteritems()。只用于遍历字典。返回单个key-value。

示例:

dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])

{'sape': 4139, 'jack': 4098, 'guido': 4127}

{x: x**2for x in (2,4,6)}
dict(sape=4139, guido=4127, jack=4098)//注意,此时key,value都是字符型

3.6 操作

详细参见:python-库.docx

3.6.1遍历:enumerate(枚举)

返回index,value。

示例:

>>> a=['a','b','c']

>>> b=enumerate(a)

>>> b.next()

(0, 'a')

>>> b.next()

(1, 'b')

3.6.2结合运算:zip()

返回几个容器中相同index的值的成组操作。

zip(col1,col2):将集合1,2合并。使用*zip可以分解。

3.6.3反向:reversed()。

只能用于遍历之中。

3.6.4排序:sorted()。

循环内部修改:使用副本循环,修改原始版本。

>>> words= ['cat','window','defenestrate']
>>> for w in words[:]:  # Loop over a slice copy of the entire list.
...     iflen(w)>6:
...         words.insert(0, w)

切片:slice(),生成部分集合,为【】的内部调用

和:sum()

个数:len()。

3.6.5迭代器:iter(0,sentinel)

返回一个迭代器。如果sentinel不存在,则返回一个o的迭代器。如果sentinel存在,则每个调用o的next()函数,如果与sentinel相同,则结束。

3.6.6操作迭代器:next()

进入下一个。

3.6.7函数式编程:reduce(fun,iterator,initializer)

使用fun调用迭代器中的两个元素值进行计算,并将结果后延续。

 

参考:http://blog.youkuaiyun.com/ithomer/article/details/13021275

4 模块-功能脚本文件

全局变量:global name

4.1 定义

模块以文件为单位组织,模块名就是文件名。

模块中包含可执行语句和函数、变量定义。可执行语句只在首次导入或运行时才会运行。

_表示模块内私有数据,不能*方式导入。

4.2 使用

模块可以作为命名空间使用,使用import导入模块(只需导入模块名,不需要.py,整个程序只导入一次)(只能导入模块,不能导入其中函数、类或者变量),reload(模块)将重新导入模块。

使用时,需要模块名.变量名/函数名,简化方式是定义为本地变量来简化书写,from 模块名 import 变量名/函数名将自动定义变量名/函数名的本地名称。使用from 模块名 import *,将自动定义所有变量名/函数名的本地名称(私有数据除外)。

使用__name__可以获取模块名,被导入时,模块名为文件名,当作为脚本运行时,模块名为”__main__”。 ”__main__”名称的模块会进行main()参数解析,可以使用sys模块的argv列表获取。

4.3 搜索路径

模块搜索路径:导入时:内置库-》sys.path()目录。sys.path()目录为一个目录列表,当前目录为首元素,pythonpath为第二元素,其它目录可以依次添加。

4.4 编译pyc/pyo

已编译的模块文件pyc:用于快速启动,忽略解释器的编译过程。pyc中包含源文件py的时间信息,如果不符,则忽略pyc,重新编译。每次py编译成功后,会自动更新pyc。

pyc或pyo文件都不能加快运行速度,只能加快加载速度。直接执行的py文件不会生成pyc或pyo文件,因此,为了加快启动速度,可以使用简短的引导程序作为执行py,然后在其中使用pyc或pyo文件。

pyc/pro文件可以直接运行,不依赖于同名py文件。可以用于发布编译后文件,免于直接公布代码(pyc反向工程比较容易)。

4.5 标准库

Python有丰富的标准库,部分被内建于解释器。sys被内建于所有平台的解释器,sys.ps1,sys.ps2对应cmd主、次提示符。sys.path()是列表类型的搜索路径。

dir():内建函数,用于显示模块中定义的函数和变量、模块。返回已排序的字符串列表。默认显示当前模块中的函数、变量、模块。

__builtin__模块包含了所有的内建函数、变量、模块。

__builtins__:尚未定型用途,一般在main()中表示__builtin__模块,在其它中可以自定义。python3中已经更名,不推荐使用。

参考:

http://stackoverflow.com/questions/11181519/python-whats-the-difference-between-builtin-and-builtins

5 包

python使用包作为命名空间。

包是文件夹并具有__init__.py文件作为包的标识。

__init__.py中可以定义__all__列表,表示要导入的子模块列表。在from 包 import *时会导入此列表中的子模块,如果不定义,则不起作用。

可以使用绝对导入(隐式相对导入)或显示相对导入(.或..表示级别)。

包路径被设置为最先搜索路径。

*不能导入子包,只能导入包中模块。

6 输入输出

读取标准输入:raw_input()

6.1 字符串

任意类型转换为字符串:str():返回适合人类阅读的字符串。repr():返回解释器使用的字符串。除字符串和浮点数外,两者相同。

对齐:string.rjust(right adjust,右对齐,需要指定输出宽度),ljust,center。

填充0值位数:string.zfill(n):如果整数不足n位,向左侧填充0值。

format格式:使用{}为占位符,其中可以使用索引或key值。!s(默认,使用str()转化),!r(使用repr()转化)。详细说明参见帮助(与C类似)。

6.2 文件操作

打开文件:open(filename,mode)方法返回一个文件对象。使用with open() as f时,使用完成自动关闭。file()与open()相同。

关闭文件:f.close()。

读取文件:f.read(size),f.readline(),f.readlines(),list(f)。

写入文件:f.write(),只能写入字符串。

位置:f.tell(),f.seek(offset,startpos)

json:json模块运行json数据的序列化(json->string)和反序列化(string->json)。使用dumps,loads,load,dump。

7 语法错误和异常

7.1 语法错误

解释器无法正常解释语句时出现的错误提示,会有^标示出错误位置。标识为SyntaxError。

7.2 异常

运行时出现的错误称为异常。标识为*Error,表示各种异常。

捕获异常:

try 测试代码

except 异常处理

else 正常处理

finally 清理程序

抛出异常:raise

8 类

多继承。所有成员函数都是虚的。所有成员都是公开的。

多继承时,从左到右,深度优先。

不会自动调用基本的构造函数,需要手动调用。

8.1 定义

注意:对象是不变的,也就是传递时参数是按引用传递的。

类的全局变量是静态的,类的实例变量的是区分实例的。实例变量通过self.var定义。

声明成员函数时,第一个参数表示对象本身,调用时默认使用自身为第一个参数。

构造函数:__init__。

析构:__del__

函数对象和方法对象:函数对象接受参数列表,方法对象是第一个参数为对象本身的函数对象。

使用__name标识的成员都是私有的(其实只是将其改变为_classname__name的公开成员,为了避免基类与子类的命名冲突)。

模块的属性都是可写的。

可写的属性都可以使用del删除。

__class__表示对象所属的类。

8.2 继承

继承方法:class devide(base):…

子类调用基类方法:base.method(self,arg)

关系检测:isInstace(),issubclass()

8.3 迭代器

定义迭代器后可以使用for…in…循环。python使用__iter__()函数返回包含next()函数的对象(通常是自身)。next()判断当前的索引值,并返回当前值。

示例:

classReverse:
    """Iterator for looping over a sequence backwards."""
    def__init__(self, data):
        self.data= data
        self.index=len(data)
    def__iter__(self):
        returnself
    defnext(self):
        ifself.index==0:
            raiseStopIteration
        self.index=self.index-1
        returnself.data[self.index]

8.4 生成器

自动创建迭代器。生成器使用yield代替return来标记,具有此标记的函数被创建为生成器,自动创建__iter()和next()。使用时直接传入参数,返回值将具有上述两个函数。

在使用生成器作为参数的函数中,可以直接使用生成的实体函数作为表达式。

defreverse(data):
    for index inrange(len(data)-1,-1,-1):
        yield data[index]
for char in reverse('golf'):
    print char
输出:
f
l
o
g

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弗里曼的小伙伴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值