Python基础知识(一)
Python基础(一)
一、变量和数据类型
1、基本变量的使用
1 | message = "Hello Python world!" |
变量的值可以随时修改
变量的命名有一定的规则:
- 变量名只能包含字母、数字和下划线。变量名能以字母或下划线打头,但不能以数字打头。例如,可将变量命名为message_1 ,但不能将其命名为1_message。
- 变量名不能包含空格,但能使用下划线来分隔其中的单词。例如,变量名 greeting_message 可行,但变量名greeting message 会引发错误。
- 不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的 单词,如print (请参见附录A.4)。
- 变量名应既简短又具有描述性。例如,name 比n 好,student_name 比s_n 好,name_length 比length_of_persons_name 好。
- 慎用小写字母l 和大写字母O ,因为它们可能被人错看成数字1 和0 。
- 注意 就目前而言,应使用小写的Python变量名。虽然在变量名中使用大写字母不 会导致错误,但是大写字母在变量名中有特殊含义。
- 变量是可以赋给值的标签,也可以说变量指向特定的值。
2、字符串
在python中,用引号括起的都是字符串,引号可以是单引号,也可以是双引号。这种灵活性让你能够在字符串中包含引号和撇号。
1 | 'I told my friend, "Python is my favorite language!"' |
一些常用方法:
1 | str.title() # 将字符串中每个单词的首字母改为大写 |
f字符串(在字符串中使用变量):
要在字符串中插入变量的值,可在前引号前加上字母f (见❶),再将要插入的变量放 在花括号内。这样,当Python显示字符串时,将把每个变量都替换为其值。
1 | first_name = "ada" |
注意 f字符串是Python 3.6引入的。如果你使用的是Python 3.5或更早的版本, 需要使用format() 方法,而非这种f语法。
1 | full_name = "{} {}".format(first_name, last_name) |
空白:泛指任何非打印字符,如空格、制表符和换行符。
1 | print("Python") |
3、数
整数
在Python中,可对整数执行加(+ )减(- )乘(* )除(/ )运算。
1 | 2 + 3 |
在终端会话中,Python直接返回运算结果。Python使用两个乘号表示乘方运算:
1 | 3 ** 2 |
浮点数
Python将所有带小数点的数称为浮点数。大多数编程语言使用了这个术语,它指出了这 样一个事实:小数点可出现在数的任何位置。从很大程度上说,使用浮点数时无须考虑其行为。你只需输入要使用的数,Python通常 会按你期望的方式处理它们:
1 | 0.1 + 0.1 |
但需要注意的是,结果包含的小数位数可能是不确定的:
1 | 0.2 + 0.1 |
所有语言都存在这种问题,没有什么可担心的。Python会尽力找到一种精确表示结果的 方法,但鉴于计算机内部表示数的方式,这在有些情况下很难。就现在而言,暂时忽略 多余的小数位数即可。
整数和浮点数
将任意两个数相除时,结果总是浮点数,即便这两个数都是整数且能整除:
1 | 4/2 |
在其他任何运算中,如果一个操作数是整数,另一个操作数是浮点数,结果也总是浮点 数:
1 | 1 + 2.0 |
数中的下划线
书写很大的数时,可使用下划线将其中的数字分组,使其更清晰易读:
1 | 14_000_000_000 universe_age = |
当你打印这种使用下划线定义的数时,Python不会打印其中的下划线:
1 | print(universe_age) |
这是因为存储这种数时,Python会忽略其中的下划线。将数字分组时,即便不是将每三 位分成一组,也不会影响最终的值。在Python看来,1000 与1_000 没什么不同, 1_000 与10_00 也没什么不同。这种表示法适用于整数和浮点数,但只有Python 3.6 和更高的版本支持。
同时给多个变量赋值
1 | 0, 0, 0 x, y, z = |
常量
常量 类似于变量,但其值在程序的整个生命周期内保持不变。Python没有内置的常量类 型,但Python程序员会使用全大写来指出应将某个变量视为常量,其值应始终不变:
1 | MAX_CONNECTIONS = 5000 |
在代码中,要指出应将特定的变量视为常量,可将其字母全部大写。
4、注释
在Python中,注释用井号(# )标识。井号后面的内容都会被Python解释器忽略,如下 所示:
1 | # 向大家问好。 |
编写注释的主要目的是阐述代码要做什么,以及是如何做的。
要成为专业程序员或与其他程序员合作,就必须编写有意义的注释。
如果不确定是否要编写注释,就问问自己:在找到合理的解决方案之前,考虑了多个解 决方案吗?如果答案是肯定的,就编写注释对你的解决方案进行说明吧。相比回过头去 再添加注释,删除多余的注释要容易得多。
5、python之禅
Python社区的理念都包含在Tim Peters撰写的 “Python之禅”中。要获悉这些有关编写优秀Python代码的指导原则,只需在解释器中 执行命令import this 。
1 | import this |
二、列表
1、列表是什么
列表 由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字0 ~9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没 有任何关系。列表通常包含多个元素,因此给列表指定一个表示复数的名称(如 letters 、digits 或names )是个不错的主意。
在Python中,用方括号([] )表示列表,并用逗号分隔其中的元素。下面是一个简单的 列表示例,其中包含几种自行车:
1 | bicycles = ['trek', 'cannondale', 'redline', 'specialized'] |
如果让Python将列表打印出来,Python将打印列表的内部表示,包括方括号:
1 | ['trek', 'cannondale', 'redline', 'specialized'] |
列表元素的访问
1 | bicycles = ['trek', 'cannondale', 'redline', 'specialized'] |
索引从0而不是1开始
在Python中,第一个列表元素的索引为0,而不是1。
第二个列表元素的索引为1。根据这种简单的计数方式,要访问列表的任何元素,都可将 其位置减1,并将结果作为索引。
Python为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1 ,可让 Python返回最后一个列表元素:
1 | bicycles = ['trek', 'cannondale', 'redline', 'specialized'] |
使用列表中的各个值,可以像使用其他变量一样使用列表中的各个值。例如,可以使用f字符串根据列表中的 值来创建消息。
1 | bicycles = ['trek', 'cannondale', 'redline', 'specialized'] |
2、修改、添加和删除元素的一些方法
1 | list.append() # 在列表末尾添加元素 |
如果你不确定该使用del 语句还是pop() 方法,下面是一个简单的判断标准:如果 你要从列表中删除一个元素,且不再以任何方式使用它,就使用del 语句;如果你 要在删除元素后还能继续使用它,就使用方法pop() 。
注意 方法remove() 只删除第一个指定的值。如果要删除的值可能在列表中 出现多次,就需要使用循环来确保将每个值都删除。
3、组织列表
排序
永久排序sort
1
2
3
4
5
6
7
8
9
10cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)
# 方法sort()永久性地修改列表元素的排列顺序。现在,汽车是按字母顺序排列的,再也无法恢复到原来的排列顺序:
['audi', 'bmw', 'subaru', 'toyota']
# 还可以按与字母顺序相反的顺序排列列表元素,只需向sort() 方法传递参数reverse=True 即可。
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)
['toyota', 'subaru', 'bmw', 'audi']函数 sorted() 对列表临时排序
调用函数sorted() 后,原列表元素的排列顺序不会改变。如果要按 与字母顺序相反的顺序显示列表,也可向函数sorted() 传递参数reverse=True。
注意 在并非所有的值都是小写时,按字母顺序排列列表要复杂些。决定排列 顺序时,有多种解读大写字母的方式,要指定准确的排列顺序,可能比我们这 里所做的要复杂。
倒着打印列表
要反转列表元素的排列顺序,可使用方法reverse() 。
方法reverse() 永久性地修改列表元素的排列顺序,但可随时恢复到原来的排列 顺序,只需对列表再次调用reverse() 即可。
确定列表的长度
使用函数len() 可快速获悉列表的长度。在下面的示例中,列表包含四个元素,因 此其长度为4 :
1 | 'bmw', 'audi', 'toyota', 'subaru'] cars = [ |
4、遍历整个列表
可以用for循环来遍历整个列表
1 | magicians = ['alice', 'david', 'carolina'] |
使用for循环的时候要注意缩进,不要忘记for后面的冒号
5、创建数值列表
Python函数range() 让你能够轻松地生成一系列数。例如,可以像下面这样使用函 数range() 来打印一系列数:
1 | for value in range(1, 5): |
在这个示例中,range() 只打印数1~4。这是编程语言中常见的差一行为的结果。 函数range() 让Python从指定的第一个值开始数,并在到达你指定的第二个值时停 止。因为它在第二个值处停止,所以输出不包含该值(这里为5)。
调用函数range() 时,也可只指定一个参数,这样它将从0开始。例如, range(6) 返回数0~5。
要创建数字列表,可使用函数list() 将range() 的结果直接转换为列表。如果将 range() 作为list() 的参数,输出将是一个数字列表。
1 | numbers = list(range(1, 6)) |
使用函数range() 时,还可指定步长。为此,可给这个函数指定第三个参数, Python将根据这个步长来生成数。
1 | even_numbers = list(range(2, 11, 2)) |
有几个专门用于处理数字列表的Python函数。例如,你可以轻松地找出数字列表的 最大值、最小值和总和:
1 | 1, 2, 3, 4, 5, 6, 7, 8, 9, 0] digits = [ |
列表解析,列表解析 将for 循环和创建新元素的代码合并成一 行,并自动附加新元素。
1 | squares = [value**2 for value in range(1, 11)] |
要使用这种语法,首先指定一个描述性的列表名,如squares 。然后,指定一个左 方括号,并定义一个表达式,用于生成要存储到列表中的值。在这个示例中,表达 式为value 2 ,它计算平方值。接下来,编写一个for 循环,用于给表达式提供 值,再加上右方括号。在这个示例中,for 循环为for value in range(1,11) ,它将值1~10提供给表达式value 2 。请注意,这里的for 语句末尾没有冒 号。
6、列表切片
要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数range() 一样,Python在到达第二个索引之前的元素后停止。要输出列表中的前三个元素, 需要指定索引0和3,这将返回索引为0、1和2的元素。
1 | players = ['charles', 'martina', 'michael', 'florence', 'eli'] |
你可以生成列表的任意子集。例如,如果要提取列表的第二、第三和第四个元素, 可将起始索引指定为1 ,并将终止索引指定为4
如果没有指定第一个索引,Python将自动从列表开头开始
要让切片终止于列表末尾,也可使用类似的语法。例如,如果要提取从第三个元素 到列表末尾的所有元素,可将起始索引指定为2 ,并省略终止索引
负数索引返回离列表末尾相应距离的元素,因此你可以输出列表末尾的任 意切片。例如,如果要输出名单上的最后三名队员,可使用切片players[-3:]
注意 可在表示切片的方括号内指定第三个值。这个值告诉Python在指定范围内每隔多少元素提取一个。
遍历切片
如果要遍历列表的部分元素,可在for 循环中使用切片。
1 | players = ['charles', 'martina', 'michael', 'florence', 'eli'] |
复制列表
要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索 引([:] )。这让Python创建一个始于第一个元素、终止于最后一个元素的切片, 即整个列表的副本。
1 | my_foods = ['pizza', 'falafel', 'carrot cake'] |
注意,如果只是单纯的将列表赋给另外一个列表是不行的
如:
1 | my_foods = ['pizza', 'falafel', 'carrot cake'] |
这里将my_foods 赋给friend_foods ,而不是将my_foods 的副本赋给 friend_foods (见❶)。这种语法实际上是让Python将新变量friend_foods 关联到已与my_foods 相关联的列表,因此这两个变量指向同一个列表。
7、元组
Python将不能修改的值称为不可变的 ,而不可变的列表被称为元组。
元组定义
元组看起来很像列表,但使用圆括号而非中括号来标识。定义元组后,就可使用索引来访问其元素,就像访问列表元素一样。
1 | dimensions = (200, 50) |
元组中的值一经定义便无法修改,试图修元组中的值会使Python报错
注意 严格地说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更 清晰。如果你要定义只包含一个元素的元组,必须在这个元素后面加上逗号:
1 my_t = (3,)创建只包含一个元素的元组通常没有意义,但自动生成的元组有可能只有一个 元素。
元组遍历
像列表一样,也可以使用for 循环来遍历元组中的所有值:
1 | dimensions = (200, 50) |
修改元组的变量
虽然不能修改元组的元素,但可以给存储元组的变量赋值。
1 | dimensions = (200, 50) |
8、设置代码格式
缩进
PEP 8建议每级缩进都使用四个空格。这既可提高可读性,又留下了足够的多级缩进空间。
在字处理文档中,大家常常使用制表符而不是空格来缩进。对于字处理文档来说, 这样做的效果很好,但混合使用制表符和空格会让Python解释器感到迷惑。每款文 本编辑器都提供了一种设置,可将你输入的制表符转换为指定数量的空格。你在编 写代码时绝对应该使用制表符键,但一定要对编辑器进行设置,使其在文档中插入 空格而不是制表符。
行长
很多Python程序员建议每行不超过80字符。最初制定这样的指南时,在大多数计算 机中,终端窗口每行只能容纳79字符。
PEP 8还建议注释的行长不应超过72字符,因为有些 工具为大型项目自动生成文档时,会在每行注释开头添加格式化字符。
在大多数编辑器中,可以设置一个视觉标志(通常是一条竖 线),让你知道不能越过的界线在什么地方。
空行
要将程序的不同部分分开,可使用空行。应该使用空行来组织程序文件,但也不能滥用。
以上建议参考PEP 8