python笔记(2)

运算

+-*/四则运算;**//%分别是乘方、乘除、取模。

有一些比较运算符和位运算符,特别地,python中的布尔运算符使用的是英文单词,仍然是短路运算符。
注:布尔运算的值是TrueFalse

同样,运算符有优先级和结合性,使用括号改变运算顺序。

关于字符串

+*有着一些其他的功能:

1
2
3
4
5
s1 = "a"
s2 = "b"

print(s1 + s2)
print(s1 * 3)

输出结果:

1
2
ab
aaa

控制流

一共有三种:ifwhliefor

if

1
2
3
4
5
6
7
8
9
10
num = 56

if num > 10:
print("{0}比10大".format(num))
elif num < 10:
print("{0}比10小".format(num))
else:
print("就是10")

print("Done!")

注:每个语句后都有冒号;时刻使用缩进控制代码块。
注2:没有switch语句。

单行的语句

可以不需要缩进在一行完成,如果只有一个句子。

1
if num > 10: print("{0}比10大".format(num))

whlie

注:while也有else语句。

1
2
3
4
5
6
7
8
9
10
11
12
num = 8
s = ""
if num == 0:
s = str(num)

while num != 0:
tmp = num % 2
s = str(tmp) + s
num //= 2
else:
print("运算结束")
print(s)

这里无论num是不是0,运算结束都会被输出。

for

注:for是在一个序列中枚举。
它也有else语句。

1
2
3
4
for i in range(0, 5):
print(i)
else:
print("循环结束")

注意这里的for i in range(0, 5)C/C++for (int i = 0; i < 5; i++)相同。

使用list()输出序列:

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

range()第三个参数是数字间隔,输出:

1
2
[0, 1, 2, 3, 4]
[0, 2, 4]

breakcontinue

跳出和跳过循环。

1
2
3
4
5
6
7
8
9
10
11
num = 97
flag = True
for i in range(2, num):
if num % i == 0:
flag = False
break

if flag:
print("{0}是质数".format(num))
else:
print("{0}不是质数".format(num))

函数

内置的函数range()list()

自定义可以使用def

1
2
3
4
5
6
def say(word, times = 1):
print(word * times)

say("HelloWorld")
say("ac", 5)
say(times = 5, word = "cd")

其中的times有默认值,在调用方法时可以省略,这样的参数必须放在最后

输入参数时也可以不按照顺序,但是当出现一个指明名称的参数输入时,后面的参数必须也这样输入

global

global可以声明全局变量。

1
2
3
4
5
6
7
8
9
10
def changeX():
global x
x = 5
y = 7
print(x, y)
x = 0
y = 0
print(x, y)
changeX()
print(x, y)

输出是:

1
2
3
0 0
5 7
5 0

这里的global x使得变量变为了全局变量,而y的作用于仅仅是函数内部(并且覆盖了另一个y)。

可变参数

1
2
3
4
5
6
7
8
9
10
def total(a, *num_list, **map_list):
print(a)

for num in num_list:
print("num_list", num)

for key, value in map_list.items():
print("map_list", key, value)

total(6, 2, 3, 5, 7, 11, 13, 17, 19, s=123, t=31231)

*收集的是元组,而**是字典。

注:传参的顺序不能更改,即:`a, *num_list, map_list`。**

return

返回参数会自动结束函数,None代表不反回任何值。

注:每个函数最后都会有return None语句。
注2:pass代表什么也不做的语句块。

函数也是对象

1
2
3
4
5
6
7
8
9
10
def hi():
return "hi"

print(hi())
# output: hi

greet = hi

print(greet())
# output: hi

这里的greet已经是是一个函数,即使删掉hi它仍然存在。

这意味着函数还可以被作为参数返回。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def ani(name = "dog"):
def dog():
return "I am a dog."
def cat():
return "I am a cat."

if name == "dog":
return dog
else:
return cat

a = ani()
print(a())
# output: I am a dog.

print( ani("cat")() )
# output: I am a cat.

甚至函数可以直接作为参数传入另一个函数。

DocStrings

在函数定义后的第一个字符串就是它的说明,是这个函数对象的__doc__属性。

1
2
3
4
5
6
7
8
9
10
11
12
def isPri(x):
"""若 x 不为质数则返回假;
否则为真。
"""
for i in range(2, x):
if x % i == 0:
return False

return True

print(isPri(5))
print(isPri.__doc__)

这里的函数是对象。