python函数

1.1函数概述

函数是组织好的、实现单一功能或相关联功能的代码段。我们可以将函数视为一段有名字的代码,这类代码可以在需要的地方以“函数名()”的形式调用。

1.2定义函数

def 函数名(参数列表):
    函数体

定义函数的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号 : 起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None

1.3调用函数

函数在定义完成后不会立刻执行,直到被程序调用时才会执行。

函数名([参数列表])

1.4函数的参数

1.4.1参数的定义

我们通常将定义函数时设置的参数称为形式参数(简称为形参),将调用函数时传入的参数称为实际参数(简称为实参)。形参相当于变量,实参相当于变量的值。

形参:

只在被调用时,才分配内存单元。调用结束,立刻释放所分配的内存。

只在函数内部有效。

实参:

可以是:常量、变量、表达式、函数。

进行函数调用时,实参必须是确定的值。

1.4.2位置参数

位置形参:函数定义时,从左往右写的参数,比如上面的 a, b

位置实参:函数调用时,从左往右写的参数, 比如上面的 11,12

位置形参定义多少个,调用时位置实参必须写上多少个,多一个少一个都不行。

1.4.3关键参数:

正常情况下,给函数传参数,要按顺序。如果不想按顺序,就用关键参数。

指定参数名的参数,就叫做关键参数。

函数调用时:func(a=1, b=2), 这种指定了参数名的参数,就是关键参数。

调用函数时,关键参数可以和位置参数一起用,但是关键参数必须在位置参数的后面。不然会报错。

1.4.4默认参数

函数定义时,默认参数必须在位置形参的后面。

函数调用时,指定参数名的参数,叫关键参数。

而在函数定义时,给参数名指定值的时候,这个参数叫做默认参数。

关键参数,和默认参数两个参数写法一样,区别在于:

关键参数是在函数调用时,指定实参的参数名,也可以说指定值的参数名。

默认参数是在函数定义时,指定参数名的值。

定义时,有默认参数的话,调用时,这个实参可以不写。如果实参不写的话,这个形参的参数值是他的默认值。

1.4.5混合参数

函数定义时:

从左往右:位置形参 > *args > 默认参数 > **kwargs

位置形参 > 默认参数 > *args > **kwargs 也可以。

因为函数调用时给的实参满足了位置形参、默认参数之后,会把多余的位置实参给args。这样并不会报错。

但是 **kwargs 必须在 *args后面

默认形参必须在位置形参后面

​ 函数调用时:

从左到右:位置实参 > *args > 关键参数 > **kwargs

因为 * args 在函数调用时,会被打散成位置实参,而关键参数必须在位置实参的后面,否则会报错。SyntaxError: positional argument follows keyword argument

*args 必须在 **kwargs后面, 否则会报语法错误:SyntaxError: iterable argument unpacking follows keyword argument unpacking

1.5函数的返回值

函数中的return语句会在函数结束时将数据返回给程序,同时让程序回到函数被调用的位置继续执行

def add2num(a, b):
    c = a + b
    return c


print(add2num(1, 2))

1.6变量作用域

变量并非在程序的任意位置都可以被访问,其访问权限取决于变量定义的位置,其所处的有效范围称为变量的作用域。

根据作用域的不同,变量可以划分为局部变量和全局变量。

局部变量就是定义在一个函数体内部的变量

全局变量是定义在外面的变量

1.7global和nonlocal关键字

  • 使用global关键字可以将局部变量声明为全局变量
g_b = 3


def t1():
    global g_b
    g_b = 2


t1()
print(g_b)

结果:

2
  • 使用nonlocal关键字可以在局部作用域中修改嵌套作用域中定义的变量
def test():
    number = 10
    def test_in():
        nonlocal number
        number = 20
    test_in()
    print(number)
test()

1.8递归函数

函数在定义时可以直接或间接地调用其他函数。递归函数在定义时需要满足两个基本条件:一个是递归公式,另一个是边界条件。若函数内部调用了自身,则这个函数被称为递归函数

def fact(n):
    if n == 1:
        return 1
    return n * fact(n - 1)


print(fact(5))

结果:

120

1.9匿名函数

匿名函数是一类无需定义标识符的函数,它与普通函数一样可以在程序的任何位置使用。Python中使用lambda关键字定义匿名函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值