Skip to content

函数的定义和调用

调用函数

[note type="info flat"]定义函数需要用到def关键字[/note] 示例:

python
代码:
def abc(a,b):      定义abc()这个函数,参数为a和b
    c=a+b
    print(c)
    return 
abc(1,2)     此处相当于a=1,b=2
结果:
3

函数的嵌套

[note type="info flat"]嵌套的函数只能函数内部调用[/note] 示例:

python
def abc(n):
    def aa(a):
        t=1
        for i in range(1,a+1):
            t*=i
            return t
    s=0
    for i in range(1,n+1):
        s+=aa(i)
    return s
n=2
print("{}以内的阶层之和为{}".format(n,abc(n)))

大概就函数中嵌套的函数就函数内部可以调用,函数外不能调用,想不出其他示例

函数的参数和返回值

1.按位置传递,我就不写了,就对应的位置就对应的参数 2.赋值参数,也不多说,就是定义函数def abc(a,b) 然后调用时就abc(a=1,b=2)就OK了

默认参数

[note type="info flat"]既可以直接调用未被赋值的参数,会自动跟上已经赋值的参数,而已赋值的参数也可从新赋值[/note]

other
代码:
def abc(a,b=10):
    d=a+b
    print("编号:",a)
    print("年龄:",d)
abc(1,b=19)
abc(2)
结果:
编号: 1
年龄: 20
编号: 2
年龄: 12

关键值参数

[note type="info flat"]参数名称前加(*)或者加两个(**)表示可以接受任意函数[/note]

other
代码:
def abc(a,*b,**c):
    print("姓名:",a)
    for e in b:
        print(e,end=" ")
    for i in c.items():     参数.items()表示返回所有键值对
        print(i,end=" ")
    print()
    return

abc("kate","male",18,"dalian")
print("----------------------")
abc("kate","male",18,"dalian",math=86,pe=92,eng=88)
结果:
姓名: kate
male 18 dalian 
----------------------
姓名: kate
male 18 dalian ('math', 86) ('pe', 92) ('eng', 88)

函数的返回值

other
代码:
def abc(a):
    b=[]
    words=a.split()  使用空格作为空格符
    for word in words:
        if word.find("e")!=-1:
            b.append(word)
    return b
ss="reture then abcd wc end"
print(abc(ss))
结果:
['reture', 'then', 'end']

lambda函数

[note type="info flat"]lambda函数不需要使用def关键字定义函数,是一个lambda表达式[/note] 对比,将列表元素按照绝对值大小进行升序排列

other
#lambda函数示例:
a=[3,2,-5,-6,-8,9,7]
b=sorted(a,key=lambda x:abs(x))
print(b)
#结果:
[2, 3, -5, -6, 7, -8, 9]
#def定义函数示例:
a=[3,2,-5,-6,-8,9,7]
def b(x):
    return abs(x)
d=sorted(a,key=b)
print(d)
#结果:
[2, 3, -5, -6, 7, -8, 9]

闭包和递归函数

创建闭包条件

闭包函数中必须有嵌套函数 嵌套函数需要引用外部函数中的变量 外部函数需要将嵌套函数名作为返回值返回

python
#代码
def a(p):
    def g(name):
        print(p,name)
    return g
m=a("good morning")
m("wilber")
m("will")
#结果
good morning wilber
good morning will

递归函数

阶乘的递归实现

other
代码:
def f(i):
    if i==0:
        return 1
    else:
        return i*f(i-1)
print(f(2))

变量的作用域

局部变量

不做过多解释,因为这个作用于就是,定义一个函数在这个函数内部定义的变量,在函数之外无影响,同样可以定义相同变量

全局变量

定义在函数外的变量,它拥有全局作用域,可作用于程序中多个函数,但函数内部只是可访问和只读的,使用是受限制的

global语句

此语句的作用是可在函数内部读写修改全局变量

python
代码:
bas=100
def f(x,y):
    global bas
    print(bas)
    bas=90
    sum=bas+x+y
    return sum
print(f(78,62))
print(bas)
结果:
100
230
90