Python函数与模块

函数

  • 把具有独立功能的代码块组织为一个小模块,在需要的时候调用,可以提高编写效率以及代码的重用。
  • 函数的使用包含两个步骤:
    1. 定义函数–封装独立的功能
    2. 调用函数,如果不主动调用函数,函数是不会执行的

函数定义

1
2
3
def 函数名():     # def 是define的缩写,函数名的命名应该符合标识符的命名规则,小括号内部可以填写参数
函数封装的代码
        ...
  • Tips: python函数的定义必须在调用前面(函数调用函数例外)
  • PyCharm 代码调式工具:
    在代码某行添加端点,debug 时会在断点停止执行,在下方debug界面的Console界面可以看到执行结果
    F8 : step over 可以单步执行代码,会把函数调用看作是一行代码直接执行
    F7 : Step Into 可以单步执行代码,如果是函数,会进入函数内部
  • 函数的文档注释:
    在开发中,如果希望给函数添加注释,应该在 定义函数 的下方,使用连续的三对引号
    在连续的三对引号之间编写对函数的说明文字
    在 函数调用 位置,使用快捷键 CTRL + Q 可以查看函数的说明信息
    注:因为函数体相对比较独立,函数定义的上方,应该和其他代码(包括注释)保留两个空行

函数参数

  • 在函数名后面的小括号内部填写参数名,自动识别参数类型
  • 多个参数之间使用 ,分隔
  • 例子: 判断素数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def judge(x):
    i=2;
    while(i*i<=x):
    if(x%i==0):
    return False
    i+=1;
    return True
    x=int(input());
    if judge(x):
    print('YES')
    else:
       print('NO')
  • 关于形参和实参
    定义函数时,小括号中的参数,用来接收参数,在函数内部作为变量使用
    调用函数时,小括号中的参数,用来把数据传递到函数内部

  • 函数的参数问题:
    1. 无论是传递的参数是可变还是不可变,只要针对参数使用 赋值 语句,会在函数内部修改局部变量的引用,不会影响到外部变量的引用
    2. 在函数内部使用方法修改 可变参数 会影响外部参数,列表变量在调用 += 运算符本质上是在调用列表的 .extend()方法
    3. 缺省参数:定义函数时可以给某个参数指定一个默认值,具有默认值的参数就叫做缺省参数,调用函数时就可以灵活传入缺省参数的值了
    4. 必须保证带有默认值的缺省参数在参数列表的末尾,如果有多个缺省参数需要指定参数名给指定的参数赋值
    5. 多值参数:不确定参数的个数时,参数名前加一个*可以接收元组如 *args,加两个星号**可以接收字典如 **kwargs
    6. 元组和字典的拆包:如果参数中有多个多值参数,这个时候希望准确传参就需要拆包了,
    7. 拆包的方式:在实参数前加一个会把实参传给接收元组的多值参数,加两个传给接收字典变量的多值参数

函数返回值

  • 返回值时函数完成工作后,最后返回给调用者的一个结果,也可以用元组(可以缺省括号)返回多个结果或者多个变量接收多个返回结果
  • 在函数中使用return 关键字可以返回结果
  • 执行了返回语句后,函数内后续代码都不会执行

函数的嵌套调用

  • 一个函数里面调用另一个函数。
  • 函数嵌套可以不分函数定义的先后顺序
  • 例子: 求和
    1
    2
    3
    4
    5
    6
    def f1(x,y):
    return f2(x,y); # 在上方可以调用下方定义的函数
    def f2(x,y):
    return x+y;
    x,y=int(input()),int(input());
    print(f1(x,y));

模块

  • 模块就好比是工具包,要想使用这个工具包中的工具,就需要import导入这个模块
  • 每一个以扩展名py结尾的Python源代码文件都是一个模块
  • 在模块中定义的全局变量、函数都是模块能够提供给外面能够直接使用的工具
  • 在调用模块中的函数时,必须这样引用: 模块名.函数名
  • 当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。
  • 搜索路径是一个解释器会先进行搜索的所有目录的列表。
  • 如想要导入模块 support.py,需要把命令放在脚本的顶端:
  • 一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

pass关键字

  • 如果在开发程序时,不希望立刻编写分支内部的代码,可以使用pass关键字,表示一个占位符,能够保证代码的结构正确
  • 程序运行时,pass关键字不会执行任何操作