Python中的函数

函数

由函数名、参数列表以及语句块构成的能实现某种功能的代码段。函数可以按照功能组织代码,减少代码冗余。是结构化编程的核心

函数的定义

使用def语句定义函数

def 函数名(参数列表):
    函数体( 代码块 )
    [return 返回值]

函数定义时,参数列表称为形式参数
语句块以4个空格缩进,如果没有return语句,会隐式返回None

函数的定义只是声明了一个函数,如果要执行,需要对其调用。调用函数时,使用函数名后加小括号的方式,传入的参数称为实参

定义一个函数

def fibs(num):
    fib = [0, 1]
    for i in range(num):
        fib.append(fib[i] + fib[i + 1])
    return fib

f5=fibs(
5)
print(f5)

上面定义了一个函数 fibs,计算的结果通过return返回。调用时传入了一个参数,返回值使用变量 f5接收

函数调用应该在定义之后,否则会报错NameError

通过callable()判断对象是否可调用

In [28]: callable(fibs)
Out[28]: True

In [29]: a=1

In [30]: callable(a)
Out[30]: False

函数的参数

函数调用时传入的参数必须和定义时的个数相匹配(除可变参数)

位置参数

按照参数定义的顺序传入实参

def fx(x, y):
    result = x + y
    return result

fx(1,2) 

关键字参数

def fx(x, y):
    result = x + y
    return result

fx(y=1, x=2)     ## 传入参数的顺序可以和定义时参数的顺序不同

注意:位置参数和关键字参数是在调用时才有的概念。位置参数必须在关键字参数之前传入,否则报错

def fx(x, y):
    result = x + y
    return result

fx(y=1, 2)

运行结果

    fx(y=1, 2)
           ^
SyntaxError: positional argument follows keyword argument

参数默认值

定义参数时,在形参后面给定一个值,当为传入足够的实参时,将使用此值为默认值

def fx(x=1, y=3):
    result = x + y
    return result

num=fx(y=1)
print(num)

运行结果:
2

可变参数

有如下代码,需要求可迭代对象的和:

def fx(lst):
    sum = 0
    for x in lst:
        sum += x
    return sum

x = fx([1, 2, 3])
print(x)

位置参数可变参数

将多个多个实参收集为一个tuple,使用*表示该形参是可变参数

def fx(*lst):
    sum = 0
    for x in lst:
        sum += x
    return sum

x = fx(1, 2, 3)
print(x)

关键字参数的可变参数

形参前使用**,可以接受多个关键字参数,收集后的实参名和值组成字典

def fx(**lst):
    sum = 0
    for _,x in lst.items():
        sum += x
    return sum

x = fx(a=1, b=2, c=3)
print(x)

keyword-only参数

Python3中新引入的。在一个星号参数或者位置可变参数后,出现的普通参数为keyword-only参数

def fx(*args,x,y):
    print(x,y)
    print(args)

fx(3,5,x=1,y=2)

可以理解为*args获取了所有位置参数,所以x,y必须给定值,否则无法取到值

 *之后的普通参数变为必须给定的keyword-only参数

def fx(*,x,y):
    print(x,y)

fx(x=1,y=2)

错误的定义方式

def fx(**kwargs,x,y):
    print(x,y)
    print(kwargs)

可以理解为kwargs已经获取了所有的关键字参数,x,y就无法获取值了

注意:形参的顺序(位置参数,缺省值,可变位置参数,keyword-only参数(可以带有缺省值),可变关键字参数)

def fx(x,y,z=5,*args,**kwargs):
    print(x,y,z)
    print(args)
    print(kwargs)

x = fx(1,4,3,1,2,a=1, b=2, c=3)

运行结果

1 4 3
(1, 2)
{'b': 2, 'a': 1, 'c': 3}

错误的定义方式

def fx(*args,x,y,**kwargs):
    print(x,y)
    print(args)
    print(kwargs)

x = fx(1,4,3,1,2,a=1, b=2, c=3)

运行结果

  File "C:/Users/ASUS-PC/PycharmProjects/zhanghao/复习/生成器.py", line 36, in <module>
    x = fx(1,4,3,1,2,a=1, b=2, c=3)
TypeError: fx() missing 2 required keyword-only arguments: 'x' and 'y'

 Python函数的嵌套

在一个函数内层定义了另外一个函数

def outer():
    def inner():
        print('inner')
    print('outer')

outer()

运行结果

outer

当直接调用内层函数inner时会报错

def outer():
    def inner():
        print('inner')
    print('outer')

outer()
inner()

运行结果

outer
  File "C:/Users/ASUS-PC/PycharmProjects/生成器.py", line 67, in <module>
    inner()
NameError: name 'inner' is not defined

内层函数需要在定义的时候调用

def outer():
    def inner():
        print('inner')

    print('outer')
    inner()


outer()

运行结果

outer
inner
原文地址:https://www.cnblogs.com/zh-dream/p/13768819.html