Python3入门–基础(合肥python3入门教程)

Python3入门之一

Python标识符大小写敏感。

基本数据类型:

int类型:

Python所能表示的整数大小只受限于机器内存,而非固定数量的字节数。

str类型

字符串可以使用双引号或单引号封装-只要字符串头尾使用的符号是对称的。 Python使用方括号[]来存取字符串等序列中的某一项,索引位置是从0开始计数的,例如"giraffe"[0]。字符就是指长度为1的字符串。

str类型与基本的数值类型(比如int)都是固定的-一旦设定,其值就不能改变。 这句大意是指什么?

组合数据类型:

元组

可用于存储任意数量、任意类型的数据项。元组是固定的,创建之后就不能改变。

元组使用逗号创建

>>> "Denmark","Finland","Norway","Sweden"

('Denmark','Finland','Norway','Sweden')

>>>"one",

('one',)

在输出元组时,Python使用圆括号使其封装在一起。很多程序员模仿这种机制,总是将自己定义的元组常值包括在圆括号中。如果某个元组只有一个数据项,又需要使用圆括号,就仍然必须使用逗号,比如(1,)。空源组则使用空的()创建。逗号还可以用于在函数调用时分隔参数,因此,如果需要将元组常值作为参数传递,就必须使用括号对其进行封装。

列表

可用于存储任意数量、任意类型的数据项。列表是可变的,可以插入或移除数据项。

列表与元组实质上并不是真正存储数据项,而是存放对象引用。创建列表与元组时(以及在列表中插入数据项时),实际上是使用其给定的对象引用的副本。在字面意义项(比如整数或字符串)的情况下,会在内存中创建适当数据类型的对象,而存放在列表或元组中的才是对象引用。该句什么意思?

与Python中的其他内容一样,组合数据类型也是对象,因此,可以将某种组合数据类型嵌套在其他组合数据类型中,比如,创建一个列表,其中的每个元素也是列表。列表、元组以及大多数Python的其他组合数据类型存储的是对象引用,而非对象本身。

如果需要将一个数据项从某种类型转换为另一种类型,那么可以使用语法datatype(item),如int("45")。

type()函数可以返回给定数据项的数据类型

len()函数以某个单独的数据项作为参考,并返回该数据项的“长度”(int类型)。

>>>len(("one",))

1

>>>len([3, 5, 1, 2, "pause", 5])

6

>>>len("automatically")

13

元组、列表以及字符串等数据类型是“有大小的”,也就是说,对这些数据类型而言,长度或大小等度量是有意义的,将这些数据类型的数据项作为参数传递给len()函数是有意义的。

对象引用

对固定对象(比如intS与strS),变量与对象引用之间没有可察觉的差别。

对可变对象,则存在差别。

固定对象与可变对象?

举例:

x = "blue" #创建一个str对象,其文本内容为"blue"。同时创建一个名为x的对象引用,x引用的就是这个str对象。

y = "green"

z = x #创建一个名为z的新对象引用,并将其设置为对象引用x所指向的相同对象。

在Python中, "="的作用是将对象引用于内存中的某对象进行绑定。如果对象 引用已经存在,就简单地进行重绑定,以便引用"="操作符右面的对象;如果对象引用尚未存在,就由"="操作符创建对象引用。

print(x,y,z) # prints: blue green blue

z = y

print(x,y,z) # prints: blue green green

x = z

print(x,y,z) # prints: green green green 所有3个对象引用实际上引用的都是同一个str。由于不存在更多的对字符串"blue"的对象引用,因此Python可以对其进行垃圾收集处理。

这种机制称为动态类型机制,即某对象引用可以重新绑定到不同类型的对象,但是只允许执行与某种特定类型绑定的操作。

[]操作符可以用于序列,(元组、列表都是序列)

逻辑操作符

身份操作符:is操作符是一个二元操作符,如果其左端的对象引用与右端的对象引用指向的是同一个对象,则会返回true。

实例:

>>> a = ["Retention", 3, None]

>>> b = ["Retention", 3, None]

>>> a is b

False

对intS、strS以及很多其他数据类型进行比较是没有意义的。实际上,使用is对数据项进行比较可能会导致直觉外的结果。虽然a和b在最初设置为同样的列表值,但是列表本身是以单独的list对象存储的,因此,在第一次使用时,is操作符将返回false。身份比较并不必须对进行比较的对象本身进行检查,is操作符只需要对对象所在的内存地址进行比较-同样的地址存储的是同样的对象。

使用is将数据项与内置的空对象None进行比较,None通常用作位置标记值,指示“未知”或“不存在”:(is not是对身份测试的反向测试)

>>> a = "Something"

>>> b = None

>>> a is not None, b is None

(True,True)

身份操作符的作用是查看两个对象引用是否指向相同的对象,或查看某个对象是否为None。

成员操作符

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

>>> p = (4,"frog",9,-33,9,2)

>>> 2 in p

True

>>> "dog" not in p

True

>>> phrase = "Wild Swans by Jung Chang"

>>> "J" in phrase #字符是长度为1的字符串

True

对列表与元组,in操作符使用线性搜索,对非常大的组合类型,速度可能会较慢,而对字典或集合,in操作可以非常快。

比较操作符

结构比较

>>> a = 9

>>> 0 <= a <= 10

True

对给定数据项取值在某个范围内的情况,这种测试方式提供了很多便利,不需要使用逻辑运算符and进行两次单独的比较操作。只需要对数据项进行一次评估(因为数据项在表达式中只出现一次),如果数据项值得计算需要耗费大量时间或存取数据项会带来一些副作用,这种优势会更加明显。

逻辑运算符

and、or与not。and与or都使用short-circuit逻辑,并返回决定结果的操作数,如果逻辑表达式本身出现在布尔上下文中,那么结果也为布尔值。not总是返回布尔型结果。

>>> five = 5

>>> two = 2

>>> zero = 0

>>> five and two

2

>>> two and five

5

>>> five and zero

0

这个特性好好学习一下

增强的赋值操作符,比如+=或*=

第一点:int数据类型是固定的-一旦赋值,就不能改变。对固定的对象使用增强的赋值操作符时,实际上是创建一个对象来存储结果,之后,目标对象引用重新绑定,

Python重载了操作符+和+=,将其分别用于字符串与列表,前者表示连接,后者表示追加字符串并扩展(追加另一个字符串)列表:

>>>name = "John"

>>>name + "Doe"

'JohnDoe'

>>>name+="Doe"

>>>name

'John Doe'

>>> seeds = ["sesame","sunflower"]

>>> seeds += ["pumpkin"]

>>> seeds

["sesame","sunflower", "pumpkin"]

列表+=操作符右边的操作数必须是一个iterable,如果不是,就会产生意外

>>> seeds += 5 #错误

>>> seeds += [5]

>>> seeds

["sesame","sunflower", "pumpkin", 5]

>>> seeds += "durian"

>>> seeds

["sesame","sunflower", "pumpkin", 5, "d","u","r","i"."a","n"]

列表的+=操作符会扩展列表,并将给定的iterable中的每一项追加到列表后。由于字符串是一个iterable,这会导致字符串中的每个字符被单独添加。如果使用append,那么该参数总是以单独的项目添加。

控制流语句

布尔表达式实际上就是对某对象进行布尔运算,并可以产生一个布尔值结果(True或False)。在Python中,预定义为常量False的布尔表达式、特殊对象None、空序列或集合(比如,空字符串、列表或元组)、值为0的数值型数据项等的布尔结果为False,其他的则为True。创建自定义数据类型时,我们可以自己决定这些自定义数据类型在布尔上下文中的返回值。

在Python中,一块代码,也就是说一条或多条语句组成的序列,称为suite。由于Python中的某些语法要求存在一个suite,Python就提供了关键字pass,pass实际上是一条空语句,不进行任何操作,可以用在需要suite但又不需要进行处理的地方。

for…in语句

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

for variable in iterable:

suite

所有Python数据项都是某种特定数据类型(也称之为“类”)的“对象”(也称之为“实例”),我们将交替地使用术语“数据类型”与“类”。对象与有些其他语言(比如C++或Java的内置数值类型)提供的数据项的关键区别在于,对象可以有“方法”。实质上,简单地说,方法就是某特定对象可以调用的函数。比如,数据类型list有一个append()方法,借助于该方法,可以以如下方式添加对象:

>>> x = ["zebra", 49, -879, "aardvark", 200]

>>> x.append("more")

>>> x

['zebra', 49, -879, 'aardvark', 200, 'more']

对象x知道自身是一个list(所有Python对象都知道自身的数据类型),因此,不需要明确地指定数据类型。在append()方法的实现中,第一个参数是x对象本身-这是由Python自动完成的(作为其对方法的句法支持的一部分)。append()方法会改变原始的列表。这是可以实现的,因为列表这种数据类型本身就是可变的。与创建新列表(使用原始的数据项以及额外要添加的数据项)、之后重新绑定对新列表的对象引用相比,append()方法具有潜在的更高的效率,对于很长的列表尤其如此。

>>> list.append(x, "extra")

>>> x

['zebra', 49, -879,'aardvark', 200,'more','extra']

这里,我们指定了数据类型以及该数据类型的方法,并将要调用该方法的数据项本身作为第一个参数,其后跟随其他一些参数。

常规的函数调用方式functionName(arguments) 方法调用方式objectName.methodName(arguments)

点(存取属性)操作符用于存取对象的某个属性。由于属性可以是对象,该对象包含某些属性,这些属性又可以包含其他属性,依此类推,可以根据需要使用多级嵌套的点操作符来存取特定的属性。

基本的异常处理

python的很多函数与方法都会产生异常,并将其作为发生错误或重要事件的标志。与Python的其他对象一样,异常也是一个对象,转换为字符串(比如:打印)异常会产生一条消息文本。

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

try:

try_suite

except exception1 as variable1:

exception_suite1

except exceptionN as variableN:

exception_suiteN

异常处理以如下的逻辑工作:如果try块中的suite都正常执行,而没有产生异常,则except模块将被跳过;如果try块中产生了异常,则控制流会立即转向第一个与该异常匹配的suite-这意味着,跟随在产生异常的语句后面的suite中的语句将不再执行;如果发生了异常,并且给定了as variable部分,则在异常处理suite内部,variable引用的是异常对象。如果异常发生在处理except块时,或者某个异常不能与任何一个except块匹配,Python就会在下一个封闭范围内搜索一个匹配的except块。对合适的异常处理模块的搜索是向外扩展的,并可以延展到调用栈内,直到发现一个匹配的异常处理模块,或者找不到匹配的模块,这种情况,程序将终止,并留下一个未处理的异常,此时,Python会打印回溯信息以及异常的消息文本。 这里描述的不懂

Python3程序开发指南

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注