Python快速入门(一)
欢迎来到 金柯的学习记录 !
此记录的编写目的是方便初次接触Python的人能够快速地掌握Python的常用语法,写出可以运行的代码,因而此文的措辞可能并不专业,还请读者留意。
变量
类型声明
与C++不同,Python中,变量的使用不需要提前声明其类型。例如,我需要一个整型变量 i ,在C++中,我需要这样写:
int i = 0;
而在Python中,我只需要这样写:
i=0
请注意,在Python中,语句的结尾是不能写分号的,这一点需要注意。
类型转换
C++中,一旦 i 被声明为int型变量,它的类型就确定了,不能将其他类型的值赋给i(进行强制转换,无非是把其他类型的值转换成了int型),但Python允许这样做。
指针
C++通过以下语句声明一个ElemType类型、名字为 p 的指针:
ElemType* p;
而Python中,所有的变量,都是引用(与指针类似),请见下例:
由上图可以看出,对于值相等的简单的整型数值,赋值语句传递给变量a和b的,是同一个内存地址(在C++中,a和b就是指针了!),而给变量a赋新的值,并没有修改原内存的值,而是开辟了新的内存空间,并把该地址赋给了变量。对于复杂的整型数值,或其他复杂的类型,即便值相同,也会开辟不同的内存空间。
总结一下:
Python中的赋值语句,传递的都是对象在内存中的地址
列表和元组
列表
Python以下语句声明了一个空列表,并把其地址传递给变量a
a=[]
可以把列表看作是一种指针数组,只不过里面的指针类型可以包含多种(C++的指针数组只允许一种类型),观察下图,你会对Python的引用和赋值有更深的印象。
- 向列表里添加元素
- 初始化时赋值
a=[1,2,3,4,5,6,7,8,9,10]
- 在列表末尾添加
list.append(elem)
a=[]
for i in range(1,11):
a.append(i)
说明
多次执行range(start,end,step)函数,最终会得到一串从start开始的、间隔为step的、小于end的所有数值所组成的串。默认情况下,start为0,step为1。(传参明明一致,却因执行次数不同而得到不同的结果,这种对象称为迭代器,这里不展开。)
这里使用的append(elem)函数,是列表自带的函数,该函数会把elem元素添加到列表的末尾
- 定位列表里元素的位置
list.index(elem)
可以观察到,index(elem)函数会返回elem元素在列表里的索引(索引是从0开始的),如果elem不在列表里,则会报错
- 通过索引 i 访问对应的元素
list[i] - 删除索引为 i 的元素
list.pop(i)
如下图所示
默认情况下,i 为-1,删除倒数第一个元素 - 在索引 i 处插入元素elem
list.insert(i,elem)
如下图所示
这些操作在线性表中是非常常见的,尤其是pop()和append()是在列表的末尾进行操作的,所以把列表作为栈是非常方便的(不用写入栈和出栈函数,可以不用关心栈顶在哪,只需要关心栈是否为空)。 - 遍历列表内各元素
在C++中,遍历线性表a的各个元素,通常是根据数组的大小n,创建一个变量 i ,使 i 在[0,n-1]内递增,最终通过 a[i] 实现。
在Python中,除了这种方法,还可以按照下图所示的方法。
这样做,是因为列表本身是可迭代的(就和之前的range函数一样),这个看不懂的话,没关系,以后再说。
元组
元组形式上和列表是一样的,但是元组内的元素在初始化过后,就不能再改变了,请看下图。
可以看到,尝试修改元组的元素,会引发错误;尝试给元组添加元素,也会引发错误。因而可以在程序中用元组来保护某些数据,使其只读,不可修改。
基本语句
if 语句
图片上展示了与(and)或(or)非(not)的使用方法,以及 if 语句的使用方法。请注意,每一个 if 语句之后都有一个冒号。C++中,else是跟最近的尚未配对的 if 组合的,而在Python中,else与哪一个 if 配对,取决于else和哪个if对齐(Python对缩进对齐的要求比C++强)。
Python中没有if…goto…的语句(实际上有额外的包实现了这样的功能,有兴趣的话,可以搜索goto包),所以如果要想实现一次性跳出多重for循环或者while循环,需要自己设置额外的变量flag,来实现多重跳转。
while语句
图片上展示了while循环的基本写法,请不要忘记了冒号,Python也有continue和break(continue可以跳过此后的所有语句,直接进行下一轮的循环,break可以跳出循环)。
for 语句
for语句和C++的相比差距最大,Python中for语句几乎都是和迭代器(或者可以迭代的对象)一起出现的,不需要指明起始、终止和递进。以下两段代码,实现的是同样的效果。
/*C++*/
int i=0,s=0;
for(i=0;i<10;i++)
s=s+i;
#Python
s=0
for i in range(10):
s=s+i
可以发现,Python更简洁,编写起来更快。continue和break的控制效果,对for循环也有用。
函数及其返回值
函数声明
Python中声明函数,只需要使用关键字def,然后说明函数名和形参即可。例如我需要一个函数能完成以下功能: ∑ i = 1 n i ( i ∈ Z ) \sum^{n}_{i=1}i \ (i\in Z) i=1∑ni (i∈Z)在C++中,我需要这样写:
int sum(int n)
{
int i=0,s=0;
for(i=1;i<=n;i++)
s=s+i;
return s;
}
在Python中我需要这样写:
def sum(n):
s=0
for i in range(1,n+1):
s=s+i
return s
可以注意到,Python里不需要声明函数返回值的类型,不过还请注意,不要忘记冒号。
函数返回值
Python中,函数的返回值虽然也只有一个,但由于其内容丰富(回想一下列表和元组),便可以返回多个值。请看以下示例。
补充说明:
flag,top,elem=(True,7,8)
这样的语句,可以自动地把True的值(其实是True的地址,后同)赋给flag,把7赋给top,把8赋给elem。能这样做的前提是,右侧有三个元素,左侧恰好也有三个变量。如果左右数量不匹配,则会:
把元组或者列表里的元素,直接分开赋给不同的变量,这样的过程称之为解压(unpack)。