函数和模块的使用
Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”。
定义函数
在Python中可以使用def关键字来定义函数,和变量一样每个函数也有一个响亮的名字,而且命名规则跟变量的命名规则是一致的。在函数名后面的圆括号中可以放置传递给函数的参数,这一点和数学上的函数非常相似,程序中函数的参数就相当于是数学上说的函数的自变量,而函数执行完成后我们可以通过return关键字来返回一个值,这相当于数学上说的函数的因变量。
1 | def find(num=100): |
2 | for i in range(20): |
3 | for j in range(33): |
4 | if i*5 + j*3 <=num: |
5 | print("公鸡:%d,母鸡:%d,小鸡:%d" % (i,j,num-5*i-3*j)) |
6 | |
7 | def add(a=0,b=0,c=0): |
8 | print(a+b+c) |
9 | |
10 | add(1,2,3) |
11 | find(10) |
如果没有指定参数那么使用默认值,我们给上面两个函数的参数都设定了默认值,这也就意味着如果在调用函数的时候如果没有传入对应参数的值时将使用该参数的默认值,所以在上面的代码中我们可以用各种不同的方式去调用add函数,这跟其他很多语言中函数重载的效果是一致的。
模块管理函数
one.py
1 | def find(): |
2 | print("Hello World!") |
two.py
1 | def find(): |
2 | print("Hello ChenZIDu!") |
if.py
1 | from one import find |
2 | from two import find |
3 | |
4 | find() |
下面函数会覆盖上面的,后导入覆盖前面的!
需要说明的是,如果我们导入的模块除了定义函数之外还中有可以执行代码,那么Python解释器在导入这个模块时就会执行这些代码,事实上我们可能并不希望如此,因此如果我们在模块中编写了执行代码,最好是将这些执行代码放入如下所示的条件中,这样的话除非直接运行该模块,if条件下的这些代码是不会执行的,因为只有直接执行的模块的名字才
if name == ‘main‘ 就相当于是 Python 模拟的程序入口。Python 本身并没有规定这么写,这只是一种编码习惯。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于 name 的值。
if.py
1 | from two import a |
2 | |
3 | |
4 | def main(): |
5 | print(a*100) |
6 | |
7 | main() |
two.py
1 | a=1 |
2 | |
3 | def main(): |
4 | print("Hello ChenZIDu!") |
5 | |
6 | if __name__ == '__main__': |
7 | main() |
所以,if name == ‘main‘ 我们简单的理解就是: 如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行。
字符串
Python为字符串类型提供了非常丰富的运算符,我们可以使用+运算符来实现字符串的拼接,可以使用*运算符来重复一个字符串的内容,可以使用in和not in来判断一个字符串是否包含另外一个字符串(成员运算),我们也可以用[]和[:]运算符从字符串取出某个字符或某些字符(切片运算),代码如下所示。
1 | s1 = 'hello ' * 3 |
2 | print(s1) |
3 | s2 = 'world' |
4 | s1 += s2 |
5 | print(s1) |
6 | print('ll' in s1) |
7 | print('good' in s1) |
8 | str2 = 'abc123456' |
9 |
|
10 | print(str2[2:5]) |
11 | print(str2[2:]) |
12 | print(str2[2::2]) |
13 | print(str2[::2]) |
14 | print(str2[::-1]) |
15 | print(str2[-3:-1]) |
str1 = 'hello, world!'
字符串内置函数
1 | # 通过内置函数len计算字符串的长度 |
2 | print(len(str1)) # 13 |
3 | # 从字符串中查找子串所在位置 |
4 | print(str1.find('or')) # 8 |
5 | print(str1.find('shit')) # -1 |
6 | # 与find类似但找不到子串时会引发异常 |
7 | print(str1.startswith('He')) # False |
8 | print(str1.startswith('hel')) # True |
数组
1 | list1 = [1, 3, 5, 7, 100] |
2 | print(list1) # [1, 3, 5, 7, 100] |
3 | # 乘号表示列表元素的重复 |
4 | list2 = ['hello'] * 3 |
5 | print(list2) # ['hello', 'hello', 'hello'] |
6 | # 计算列表长度(元素个数) |
7 | print(len(list1)) # 5 |
8 | # 下标(索引)运算 |
9 | print(list1[-1]) # 100 |
10 | print(list1[-3]) # 5 |
11 | # 通过循环用下标遍历列表元素 |
12 | for index in range(len(list1)): |
13 | print(list1[index]) |
14 | # 通过for循环遍历列表元素 |