python学习笔记(2)

a = True
b = False
if a == True and b == True :
    print('a is true and b is true')
elif a == True and b == False :
    print('a is true and b is false')
elif a == False and b == True :
    print('a is false and b is true')
else :
    print('a is false')
print('done')
cnt = 1
while cnt < 10 :
    print('number',cnt)
    cnt += 1
    if cnt == 5 :
        break
else :
    print('in else of while')
for i in range(1,5) :
    print(i)
else :
    print('for is over')

python和C语言的控制流语句类似。

在python中,选择结构的语句也是if...else,不过中间的else if变成elif,是两个合在一起的简写。并且尤其要注意,这些语句后都是接一个下一层次的块,因此在这些if等语句后所跟的语句的缩进必须在if语句缩进之后。而且,python规定每有一个下一级的块,都要用冒号:来表示下面是下一级的块。下面的循环结构语句也是要承接一个子块,所以依然要遵循这个规则。还有一个要注意的是,这些语句都不用加括号把逻辑表达式括起来,关键字后加空格就行。

特殊一点的是for,for循环是for...in结构,in后面是接一个序列(sequence),上面代码中的range是一个函数,会根据传递的参数生成一个序列。它可以传2到3个参数,如果传两个参数a和b,会生成[a,b)之间的公差为1的等差数列,如果是3个参数a,b,c,则生成[a,b)之间的公差为c的等差数列。并且据说range函数是一个一个生成的,不是生成一个完整的序列,一次取一个。要得到完整的序列,可以用list(range(1,5))。如下面的代码和上面for循环中的运行结果是一样的:

for i in list(range(1,5)) :
    print(i)

可以用print语句输出一下两个的结果:

print(range(1,5))
print(list(range(1,5)))

对于range这个函数,目前还不甚理解。另外在循环语句中,也可以用break和continue,功能和C语言中的一样。如果循环是通过break退出的,那么循环结构中的else就不会运行(其实这个else有啥用啊。。好累赘感觉。。。)。

说到函数,python中函数是用def关键字定义的,如

def speak(words) :
    print(words)
speak('i am narutoacm')

同样,python函数中的参数也可以像C++一样的用缺省值模式,和C++的一样。python中函数的很亮的一点就是,参数可以按任意顺序传递,只要指出来就行了,像这样:

def speak(name, words) :
    print(name,'say:',words)
speak(words="i'm narutoacm", name='narutoacm')

但是,python中没有函数重载,如上面两个speak在一起的话,最后定义的speak函数会覆盖原先定义的speak函数,函数调用只能遵循最后一个定义的格式。但是之前的依然可以按照前述定义的格式调用。(python是一种解释型语言

像print这样的函数可以有任意个参数的情况,就可以用*来定义参数,像这样:

def speak(name, *words) :
    print(name,'say:')
    for i in words :
        print(i)
speak('narutoacm', "i'm narutoacm", 'i like anime', 'i like mathematics too')

可以看到,能够用for循环来遍历*参数,这说明*参数可以看成是一个序列。可以直接用C中访问数组的形式来访问该参数的第几个参数,如上边的words[1]是'i like anime',可以用print语句输出。

还有一种双星参数,用**来表示,如:

def speak(**words) :
    for name in words :
        print(name, 'say:', words[name])
speak(narutoacm='i am narutoacm', naruto='i am naruto', narutoa='i am narutoa')

这样不仅可以随意指定参数的个数,也可以随意指定参数的名称。从上面的用法可以看出,**参数是一个C++中类似map的东西,在python似乎叫做字典(dictionary)。而且运行上述语句可以发现,最先输出的是naruto,然后narutoa,最后才是narutoacm。这说明第一层中的for遍历**参数时是按dictionary的关键字的字典序排的

同样的,python的函数也可以有返回值,和C一样,也是return关键字。像上述没有返回值的函数默认最后都有一条return None语句,用print函数输出就能发现,像这样:

print(speak(narutoacm='i am narutoacm', naruto='i am naruto', narutoa='i am narutoa'))


发表评论

电子邮件地址不会被公开。 必填项已用*标注

*