Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1209736
  • 博文数量: 185
  • 博客积分: 495
  • 博客等级: 下士
  • 技术积分: 1418
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-02 15:12
个人简介

治肾虚不含糖,专注内核性能优化二十年。 https://github.com/KnightKu

文章分类

全部博文(185)

文章存档

2019年(1)

2018年(12)

2017年(5)

2016年(23)

2015年(1)

2014年(22)

2013年(82)

2012年(39)

分类: Python/Ruby

2013-02-25 11:20:57

原文地址:Python的8个关键要素 作者:scq2099yt

一、数据类型

        Python提供几种内置数据类型,在此主要介绍其中的两种:

1、整型int

        Python用int类型表示整数(正整数或负整数),其大小只受限于机器内存而非固定数量的字节数。

2、字符串str

        Python用str类型表示字符串(Unicode字符序列),其可以用双引号或单引号配对囊括,由于其用Unicode编码,因此字符串不局限于ASCII字符。

        Python使用方括号[]来存取字符串等序列中的某一项,索引位置从0开始,比如:

        >>>“Hello World!”[6]

        'W'

        方括号存取这种语法适用于任何能够构成序列的数据类型,比如:列表。

        在Python中,str类型与基本数值类型(比如:int)都是固定的,即一旦设定,其值就不能更改,比如:用户方括号可以获取指定索引位置的字符,但不能将其设为新字符(需要注意的是,在Python中,字符就是指长度为1的字符串)。

        如果需要将一个数据项从一种数据类型转换为另一种数据类型,那么用语法datatype(item)即可,例如:

        >>>int(" 45")

        45

        >>>str(912)

        '912'

        int()转换可以允许头尾有空格,但转换必须有意义。str()转换几乎适用于所有数据类型。


二、对象引用

        在Python中,使用“对象引用”来“模拟”C/C++中的变量来存储数据,例如:

        x="blue"

        x就是对象引用,而“blue”就是内存中的数据,当对象引用存x在时,就直接将x绑定到“blue”,以便于用x引用“blue”;如果对象引用不存在,则创建对象引用x,并做如前所示的绑定操作。

        Python使用动态类型机制,也就是说对象引用随所引用对象的类型变化而变化,例如:

        route=863

        print(route, type(route))    #prints: 863

        route="China"

        print(route, type(route))    #prints: China


三、组合数据类型

        Python提供了几种组合数据类型,包括关联数组与集合等类型,在此主要介绍其中的两种:

        元组与列表可以用于存储任意数量和任意类型的数据项。

1、元组

        元组是固定的,创建之后就不能改变。元组使用逗号创建,在输出元组时使用圆括号将其囊括在一起,例如:

        >>>"one", "two", "three"

        ('one', 'two', 'three') 

2、列表

        列表时可变的,在需要的时候,可以插入或移除数据项。列表使用方括号[]创建,例如:

        >>>[1, 2, 'hello']

        [1, 2, 'hello']

        实质上,元组和列表并不真正存储数据项,而是存放对象引用。

        组合数据类型也是对象,因此,可以将某种组合数据类型嵌套在其它组合数据类型中,比如:创建一个列表,其中的每个元素也是列表。


四、逻辑操作符

1、身份操作符

        由于所有Python变量实际上都是对象引用,因此,询问两个或更多的对象引用是否都指向相同的对象是有意义的。is操作符就是干这个的,其是一个二元操作符,如果其左端的对象引用与右端的对象引用指向的是同一个对象,则会返回true,例如:

        >>> a = ["hello", 2, 'world']

        >>> b = ["hello", 2, 'world']

        >>> a is b

        False

        >>> b = a

        >>> a is b

        True

        最常见的使用is的情况是将数据项与内置的空对象None进行比较,None通常用作位置标记值,只是未知或者不存在,例如:

        >>> a = "something"

        >>> b = None

        >>> a is not None, b is None

        (True, True)

        上面使用is not是对身份测试的反向测试。

        需要注意的是,如果需要比较对象值,则应该使用比较操作符。

2、比较操作符

        Python提供了二进制比较操作符的标准集合,每个操作符都带有期待中的语义:<表示小于,<=表示小于或等于,==表示等于,!=表示不等于,>=表示大于或等于,>表示大于。这些操作符对对象值进行比较,例如:

        >>> a = "the same as"

        >>> b = "the same as"

        >>> a is b

        False

        >>> a == b

        True

        从上面的实例可以看出,虽然a与b是不同的对象(有不同的身份),但是具有相同的值,因此,比较结果是相等的。

        Python比较操作符的一个特别好用的特性是可以进行结链比较,这便于数据范围的比较,例如:

        >>> a = 9

        >>> 0 <= a <= 10

        True

        需要注意的是,进行无意义的比较会导致异常(比如:str与int比较);Python可以自定义数据类型,但是不能与字符串或其它非数值类型进行比较。

3、成员操作符

        对序列或集合类数据类型(比如:字符串、列表或元组),可以使用操作符in来测试成员关系,用not in来测试非成员关系,例如:

        >>> p = "hello world"

        >>> h in p

        True

        >>> "xxx" not in p

        True

        >>> "wor" in p

        True

        从上面实例还能看出,对于字符串的模式匹配或者字串查找使用起来非常方便。

4、逻辑运算符

        Python提供了3个逻辑运算符:and、or与not。其中,and与or都是用short-circuit逻辑,并返回决定结果的操作数,而不是返回布尔值(除非实际上就是布尔操作数),但如果逻辑表达式本身出现在布尔上下文中(比如:if语句),那么结果为布尔值。not操作符总是返回布尔型结果,例如:

        >>> zero = 0

        >>> one = 1

        >>> two = 2

        >>> one and zero

        0

        >>> zero or one

        1

        >>> not two

        False


五、控制流语句

        .py文件从第一条语句开始顺序逐行地执行,但是也可以通过函数、方法调用或者控制结构使其控制流转向,有意外产生时也会转向,在此主要介绍if、while、loop等控制流语句。

        在Python中,预定义为常量False的布尔表达式、特殊对象None、空序列或集合、值为0的数值型数据项等的布尔结果为False,其余为True。自定义数据类型在布尔上下文中的返回值可以自定义。

        在Python中,一块代码成为suite,由于Python的某些语法要求存在一个suite,因此Python提供了关键字pass来表示空语句,用于需要suite而又不需要进行任何处理的地方。

1、if语句

        Python的常规if语句语法如下:

        if boolean_expression1:

            suite1

        elif boolean_expression2:

            suite2

        ...

        elif boolean_expressionN:

            suiteN

        else:

            else_suite

        与c++相比而言,主要差别是:

        (1)布尔表达式没有圆括号,布尔表达式后面需要一个冒号,实质上,任何后面要跟随suite的地方都需要使用冒号(后面介绍for的时候会应验);

        (2)使用缩排来表示代码块结构,Python指南建议每层缩排4个空格。

2、while语句

        while语句用于0次或多次执行某个suite,具体语法格式如下:

        while boolean_expression:

            suite

        Python也一如C++,支持break和continue语句,作用也一致

3、for ... in语句

        Python的for循环语句重用了关键字in(在其它上下文中,in是一个成员操作符),其语法如下:

        for variable in interable:

            suite

        for也支持break和continue,variable逐一引用iterable中的每个对象,iterable是可以迭代的任意数据类型,实例如下:

        >>> for country in ["China", "England", "Russia"]

                    prinf(country)    

        China

        England

        Russia

4、基本的异常处理

        异常处理的简单语法格式如下:

        try:

            try_suite

        except exception1 as variable1:

            exception_suite1

        ...

        exception exceptionN as variableN:

            exception_suiteN

        异常处理流程是:如果try块中的suite都正常执行,则except模块将被跳过;如果try块中的suite产生了异常,则控制流会立即转向第一个与该异常匹配的suite,这意味着跟随在产生异常的语句后面的suite中的语句将不再执行;如果发生了异常,并且给定了as variable部分(这部分是可选的,即我们可以只关心产生了某个异常而不关心具体的消息文本),则在异常处理suite内部,variable引用的是异常对象。

        如果异常发生在处理except块时,或者某个异常不能与任何一个except块匹配,Python就会在下一个封闭范围内搜索一个匹配的except块。对合适的异常处理模块的搜索是向外扩展的,并可以延展的调用栈内,直到发现一个匹配的异常处理模块,或者找不到匹配的模块,这种情况下,程序将终止,并留下一个未处理的异常,此时,Python会打印回溯信息以及异常的消息文本。


六、算术操作符

        Python提供了完整的算术运算符集(+、-、*、/等),大部分跟大多数程序设计语言一样,但有如下几点不一样:

1、除法/

        除法操作符会产生一个浮点值,而不是一个整数值,如果需要产生一个整数值结果,则需要使用int()进行转换或使用剥离操作符//,例如:

        >>> 12 / 3

        4.0

        >>> 3 / 2

        1.5

        >>> int(3/2)

        1

        >>> 3 // 2

        1

2、重载+与+=

        Python重载(对不同的数据类型进行重用)了操作符+与+=,将其分别用于字符串与列表,前者表示连接,后者表示追加字符串并扩展(追加另一个字符串)列表:

        >>> name = "shi"

        >>> name + "changquan"

        'shichangquan'

        >>> list = [1, 2, 3]

        >>> list += “hello”

        >>> list

        [1, 2, 3, 'h', 'e', 'l', 'l', 'o']


七、输入/输出      

        用print()输出到控制台,用input()接收用户输入。input()类似于c语言中scanf()。

        Python的I/O还可以使用shell重定向读取或者写入文件,例如:

        #./test.py > result.txt

        #./test.py < data.txt

        需要注意的是,在接收文件重定向输入时,如果文件以EOF(文件终止)字符结束时,input()函数会产生异常。


八、函数的创建与调用

        创建函数的通常语法格式如下:

        def functionName(arguments):

                suite

        这里,arguments是可选的,如果有多个参数,则必须使用逗号分隔开。每个Python函数有一个返回值,默认情况下为None。由于函数也是对象,因此可以存储在组合数据类型中,并作为参数传递给其它函数。

        Python模块实际上就是包含Python代码的.py文件,要使用某个模块内的函数功能,必须先导入该模块,例如:

        import sys

        要导入一个模块,必须使用import语句,其后跟随.py文件名,但是不需要写出该文件的扩展名。导入一个模块后,就可以访问其内部包含的任意函数、类以及变量。通常,使用模块中函数的语法格式为moduleName.functionName(arguments)。

        标准库中包含大量的模块,模块名都是小写字母,程序员自定义的模块可以使用首字母大写的名来予以区分。下面以random模块(在标准库的random.py文件中)为例来说明如何使用:

        import random

        x = random.randint(1, 6)

        y = random.choice(["apple", "banana", "cherry", "durian"])

        在这些语句执行之后,x将包含一个1~6之间(包含边界值)的一个整数,y将包含传递给random.choice()函数的列表之间的一个字符串。

        常规的做法是将所有import语句放在.py文件的起始处,在shebang行和模块文档之后。建议首先导入标准库模块,之后导入第三方库模块,最后才导入自己编写的模块,这点跟C/C++殊途同归

        雕虫小技:Python shell或者IDLE用ALT+P倒回上一个命令,用ALT+N顺回下一个命令,有点另类




阅读(2357) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~