赞
踩
欢迎来到 金柯的学习记录 !
此记录的编写目的是方便初次接触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]
a=[]
for i in range(1,11):
a.append(i)
说明
多次执行range(start,end,step)函数,最终会得到一串从start开始的、间隔为step的、小于end的所有数值所组成的串。默认情况下,start为0,step为1。(传参明明一致,却因执行次数不同而得到不同的结果,这种对象称为迭代器,这里不展开。)
这里使用的append(elem)函数,是列表自带的函数,该函数会把elem元素添加到列表的末尾
可以观察到,index(elem)函数会返回elem元素在列表里的索引(索引是从0开始的),如果elem不在列表里,则会报错
元组形式上和列表是一样的,但是元组内的元素在初始化过后,就不能再改变了,请看下图。
可以看到,尝试修改元组的元素,会引发错误;尝试给元组添加元素,也会引发错误。因而可以在程序中用元组来保护某些数据,使其只读,不可修改。
图片上展示了与(and)或(or)非(not)的使用方法,以及 if 语句的使用方法。请注意,每一个 if 语句之后都有一个冒号。C++中,else是跟最近的尚未配对的 if 组合的,而在Python中,else与哪一个 if 配对,取决于else和哪个if对齐(Python对缩进对齐的要求比C++强)。
Python中没有if…goto…的语句(实际上有额外的包实现了这样的功能,有兴趣的话,可以搜索goto包),所以如果要想实现一次性跳出多重for循环或者while循环,需要自己设置额外的变量flag,来实现多重跳转。
图片上展示了while循环的基本写法,请不要忘记了冒号,Python也有continue和break(continue可以跳过此后的所有语句,直接进行下一轮的循环,break可以跳出循环)。
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)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。