第六章 函数与模块

6.1 函数

在实现大型项目时,往往会将需要重复重复使用的代码提取出来,将其定义为函数。从而简化编程工作量,也使程序结构简化

6.1.1 定义函数
  • def 语句用于定义函数

    def 函数名(参数表):
    	函数语句
    	return 返回值
    
    其中返回值和参数都可省略
    
6.1.2 调用函数
  • 调用函数的基本格式

    函数名(参数表)
    
  • 实例

    # 定义函数
    def add(a, b):
        return a + b
    
    # 调用函数
    t = add(10, 20)
    
    print(t)  # 输出结果为30
    
    
6.1.3 函数的参数

函数定义的参数表中的参数称为形式参数,简称形参。调用函数时,参数表中提供的参数称为实际参数,简称实参。实参可以是常量,表达式或变量。实参是常量或表达式时,直接将常量或表达式的计算结果传递给形参。

  • 参数的多态性:同一个函数传递的实参类型不同时,可获得的结果不同

    # 定义函数
    def add(a, b):
        return a + b
    
    add(1,2) # 执行数字加法
    add('abc','def') # 执行字符串连接
    add((1,2),(3,4)) # 执行元组合并
    add([1,2],[3,4]) # 执行列表合并
    
  • 参数赋值传递:Python 允许以形参赋值的方式,将实参传递给指定形参

    def add(a, b):
        return a + b
    
    add(a='ab',b='cd') # 通过赋值传递参数 结果为'abcd'
    add(b='ab',a='cd') # 通过赋值传递参数 结果为'cdab'
    
  • 传递可变对象的引用:当实参引用的是可变对象时,若在函数中修改形参,实参也获得修改后的对象

    • 在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象
    def f(a):
        a[0] = 'abc'
    x = [1,2]
    f(x) # 调用函数,传递列表对象的引用
    print(x) #输出结果为['abc',2]
    
  • 不定长参数

    • 在形参前边加一个*,该形参变为不定长元组形参,可以接收所有的位置实参,类型是元组
    • 在形参前边加上两个**, 该形参变为不定长字典形参,可以接收所有的关键字实图,类型是字典
6.1.4 函数嵌套定义
  • Python 允许在函数内部定义函数,即内部函数
  • 内部函数只能在函数内部使用
6.1.5 lambda 函数
  • lambda 函数也称表达式函数,用于定义匿名函数

  • lambda 只是一个表达式,函数体比 def 简单很多

  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去

  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数

  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率

  • 基本格式

    lambda 参数表:表达式
    
  • 实例

    add = lambda a,b:a+b
    
    add(1,2) # 结果为3
    
6.1.6 递归函数
  • 递归函数是指在函数体内调用函数本身

    def fac(n):
        if n==0: #递归调用的终止条件
            return 1
        else:
            return n*fac(n-1) # 递归调用函数本身
    
6.1.7 函数列表
  • 因为函数是一种对象,所以可将其作为列表元素使用,然后通过列表索引来调用函数

    d = [lambda a,b:a+b,lambda a,b:a*b]
    d[0](1,3) # 调用第一个函数,结果为4
    d[1](1,3) # 调用第二个函数,结果为3
    

6.2 变量的作用域

变量的作用域是变量的可使用范围,也称变量的命名空间。在第一次给变量赋值时,Python创建变量,创建变量的位置决定了变量的作用域

  • 作用域分类
    • 本地作用域:没有内部函数时,函数体作为本地作用域。函数内通过赋值创建的变量,函数参数都属于本地作用域
    • 函数嵌套作用域:包含内部函数时,函数体为函数嵌套作用域
    • 全局作用域
      • 文件作用域:程序文件(也称模块文件)的内部为文件作用域
      • 内置作用域:Python运行时的环境为内置作用域,它包含了Python的各种预定义变量和函数

6.3 模块

模块是一个包含变量,函数或类的程序文件。模块中也可以包含其他各种Python语句

6.3.1 导入模块
  • import 语句:import语句用于导入整个模块,可以使用as为导入的模块指定一个新名称

    #方法一 import 模块名
    #使用:  模块名.功能名
    import my_ module1
    print(my_ module1. num) # 使用my_ module1 中的变量num
    my_ _module1. func() # 调用my_ module1 中func 函数
    dog = my_ _module1.Dog() #调用my_ _module1中的类创建对象
    dpg. show_ _info( )
    
  • from 语句:from语句用于导入模块中的指定对象,导入的对象可以直接使用

    #方法二 from 模块名 import 功能名1, 功能名2,
    #使用:  功能名
    #注意点:如果存在同名的万法名,则会被覆盂
    ) from my_ _module2 import func, num
    from my_ _module1 import num
    func()
    print( num)
    
    #方法三 from 模块名 import * #将模块中所有的功能进行导入
    #使用:  功能名
    from my_ module2 import *
    print( num)
    func( )
    dog = Dog()
    dog. show_ _info()
    
    #as 起别名.可以对模块和功能起别名
    #注意:如果使用as别名,就不能再使用原来的名字
    import my_ module1 as mm1
    from my_ module1 import func as m1_ func
    from my_ _module2 import func as m2_ func
    mm1. func()
    m1_ _func()
    m2_ func()
    

6.4 包

功能相近或者相似的模块放在一个目录中,并在目录中定义一个 __init__.py 文件,这个目录就是包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值