Python基础(三):函数

函数定义

  • 函数是组织好的,可重复使用的,用来实现单一,或相关联的代码块
  • 函数能提高应用的模块行和代码的重复利用率。除Python的内建函数,如print(),还支持用户自定义函数
     

函数调用

  • Python定义函数使用def关键字,一般格式如下:

    def 函数名(参数列表):
        函数体
    
  • return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None

    def max(a,b):
        if a>b:
            return a
        else:
            return b
    
    a=5
    b=7
    print(max(a,b))
    

参数传递

  • 调用函数时,可使用的正式参数类型分为:必需参数关键字参数默认参数不定长参数

必需参数

  • 调用函数时,若未传入必需参数会出现语法错误

    def printme(str):
        print(str)
        return
    
    printme('hello python')           # hello python
    printme()                         # TypeError: printme() missing 1 required positional argument: 'str'
    
  • 必需参数须以正确的顺序传入函数,调用时的数量必须和声明时的一样

    def max(a,b):
        if a>b:
            return a
        else:
            return b
    
    a=5
    b=7
    print(max(a))                     # TypeError: max() missing 1 required positional argument: 'b'
    

关键字参数

  • 使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为Python解释器能够用参数名匹配参数值

    def printinfo(name,age):
        print("名字:",name)
        print("年龄:",age)
        return
    
    printinfo(age=25,name='python')
    

默认参数

  • 调用函数时,如果没有传递参数,则会使用默认参数
    def printinfo(name,age=15):
        print("名字:",name)
        print("年龄:",age)
        return
    
    printinfo(age=25,name='python')
    printinfo(name='hello')
    

不定长参数

  • 使用时,可能需要一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数,和上述参数不同,声明时不会命名。基本语法如下:

    def functionname([formal_args,] *var_args_tuple ):
       "函数_文档字符串"
       function_suite
       return [expression]
    
  • 加了星号*的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数

    def printinfo(arg1,*vartuple):
        print(arg1)
        print(vartuple)
    
    printinfo(70,60,50)
    # 70
    # (60, 50)
    
  • 还用一种是参数带两个星号**,基本语法如下:

    def functionname([formal_args,] **var_args_dict ):
       "函数_文档字符串"
       function_suite
       return [expression]
    

    加了两个星号**的参数会以字典的形式导入

    def printinfo(arg1,**vardict):
        print(arg1)
        print(vardict)
    
    printinfo(1,a=2,b=3)
    # 1
    # {'a': 2, 'b': 3}
    
  • 声明函数时,参数中星号*可以单独出现,星号*后的参数必须用关键字传入

    def f(a,b,*,c):
        return a+b+cls chang
    
    f(1,2,c=3)                           # 6
    f(1,2,3)                             # TypeError: f() takes 2 positional arguments but 3 were given
    

 

返回值

  • return[表达式]语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None
    def sum(arg1,arg2):
        total=arg1+arg2
        print("函数内:",total)
        return total
    
    total=sum(10,20)
    print("函数外:",total)
    
    # 函数内: 30
    # 函数外: 30
    

 

局部变量与全局变量

局部变量

  • 局部变量为在函数内部定义的变量

  • 不同的函数,可以定义名字相同的局部变量,互不影响

  • 局部变量的作用是为了临时保存数据

    def score():
        # 定义局部变量
        score=100
        print('分数为:',score)
    
    score()
    

全局变量

  • 如果一个变量,既能在一个函数中使用,也能在其他函数中使用,这样的变量叫做全局变量

  • 全局变量是在函数外面定义的变量,能够在所有函数中进行访问

    # 定义全局变量
    score=100
    
    def zhangsan():
        print(score)
    
    def lisi():
        print(score)
    
    zhangsan()
    lisi()
    

局部变量与全局变量名字相同

  • 若全局变量的名字与局部变量的名字相同,则使用局部变量

    # 定义全局变量
    score=100
    
    def zhangsan():
        score=90
        print(score)
    
    def lisi():
        print(score)
    
    zhangsan()                              # 90
    lisi()                                  # 100
    

修改全局变量

# 定义全局变量
score=100

def zhangsan():
    # 修改全局变量
    global score
    score=90
    print(score)

def lisi():
    print(score)

zhangsan()                              # 90
lisi()                                  # 90

 

递归函数

  • 如果一个函数在内部调用自己本身,这个函数就是递归函数

    # 计算阶乘 n!=1 × 2 × 3 × ... × n 用函数fact(n)表示:
    # fact(n) = 1 × 2 × 3 × ... × (n-1) × n =(n-1)! × n = fact(n-1) × n
    
    def fact(n):
        if n==1:
            return 1
        else:
            return fact(n-1)*n
    
    fact(5)                               # 120
    

 

匿名函数

  • Python使用lambda关键字来创建小型匿名函数,可以简化代码,提高运行效率
  • 匿名函数不需要使用def关键字来定义完整函数
  • lambda函数通常用于编写简单的、单行的函数,通常在需要函数作为参数传递的情况下使用
  • lambda语法格式:lambda arguments:expression
    # lambda函数没有参数
    f=lambda:"hello world"
    print(f())                               # hello world
    
    # lambda函数有一个参数
    x=lambda a:a+10
    print(x(5))                              # 15
    
    # lambda函数有多个参数
    x=lambda a,b,c:a+b+c
    print(x(1,2,3))                          # 6
    
  • lambda函数通常与内置函数如map()、filter()、reduce()一起使用,以便在集合上执行操作
    # 计算平方
    numbers=[1,2,3,4,5]
    squared=list(map(lambda x:x**2,numbers))
    print(squared)                                           # [1, 4, 9, 16, 25]
    
    # 筛选偶数
    numbers=[1,2,3,4,5,6,7,8]
    even_numbers=list(filter(lambda x:x%2==0,numbers))
    print(even_numbers)                                      # [2, 4, 6, 8]
    
  • 匿名函数与普通函数对比
    # 普通函数
    def fun(a,b,c):
        return a+b+c
    
    print(fun(1,2,3))
    
    # 匿名函数
    r=(lambda a,b,c:a+b+c)(1,2,3)
    print(r)
    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值