8.16 使用自己开发的模块
python模块主要就是使用其中的函数,尤其是自定义函数。函数的好处是可以反复调用,当多个函数组合在一起就构成了一个模块,多个模块就可以构成一个python库。所以,学习python自定义函数是开发模块的基础。
1 自定义函数
在python中自定义函数使用def关键字,然后函数名,函数名最好不要不系统关键字重复,会造成不必要的干扰。然后是选项参数,选项也叫作实参(argument),参数为形参(parameter)。参数可以设置默认值。接下来是冒号。
接下来是一段文档字符串,这段不是必须的,但最好加上用来说明函数的作用,可以通过”.doc”方法来获取。然后就是函数体,里面可以包含各种计算,包括读写文件和循环判断语句。
最后是一个返回值,函数一般都是处理数据,处理结束之后要有返回值。python函数返回值通过return函数输出。python自定义函数的结构如下所示:
# 自定义函数
# def关键字定义函数名add_total,里面包含两个参数x,y;
def add_total(x,y):
# 一段文档字符串
""" add x and y, return total number """
# function statement
total= x+y
# returen final value
return(total)
# run function
print(add_total(1, 2))
2 实参和形参
函数定义中可能包含多个形参,因此函数调用中也可能包含多个实参。向函数传递实参的方式很多:既可以使用位置实参,这要求实参的顺序与形参的顺序相同;也可以使用关键字实参,其中每个实参都由变量名和值组成;还可以使用列表和字典。
# 位置实参
def describe_pet(animal_type, pet_name):
"""显示宠物的信息"""
print(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
print(describe_pet('hamster','harry'))
关键字实参是传递给函数的名值对(name-value pair)。这样会直接在实参中将名称和值关联
起来,因此向函数传递实时就不会混淆了。关键字实参不仅让你无须考虑函数调用中的实参顺序,而清楚地指出了函数调用中各个值的用途。
# 关键字实参
def describe_pet(animal_type, pet_name):
"""显示宠物的信息"""
print(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
print(describe_pet(animal_type='hamster', pet_name='harry'))
在编写函数时,也可以给每个形参指定默认值。
# 关键字实参
def describe_pet(pet_name, animal_type = 'dog', ):
"""显示宠物的信息"""
print(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
print(describe_pet(pet_name='hamster'))
3 自定义函数箭头
在最新版本的python代码中,经常可以看到自定义函数后多了一个箭头指示。这是函数注释的一部分,表示函数返回值的类型,有个专门的名词叫 type hint, 即类型提示。
可以通过函数的 “.annotations “查看。
# 指定数据类型
def add(a:int, b:int) -> int:
return a+b
4 main()函数
一些编程语言将main函数作为程序的执行入口,比如C/C++、C#、Java、Go、Rust等等。python中main函数并不是必须的。在pycharm创建项目时main函数也是可选的。在运行python程序之前,Python 解释器将 python 模块的名称分配给一个名为__name__. 根据您是通过命令行执行程序还是将模块导入另一个模块,分配__name__将有所不同。
也就是当开发一个项目是,可以通过main函数来调用和管理不同的子程序。
5 导入模块
python的模块就是一个文件,导入模块直接导入文件名即可,不要加py扩展名,如果主程序与模块在同一目录下,可以直接导入。这是因为当前目录在sys.path的列表中优先级最高。导入之后就可以直接调用模块中的函数。
#从当前目录下导入pizza文件
import pizza as p
print(p.make_pizza(16, 'peperoni'))
如果模块不在当前目录下,则需要将模块所在目录添加到sys.path中。
# 建模块所在目录添加到python模块路径中
sys.path.append(r'C:\Users\genome\Desktop\pythonmodule')