我是靠谱客的博主 紧张纸鹤,最近开发中收集的这篇文章主要介绍Python自学第九天——函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

作为新手自学Python的第九天,技术低微,希望可以通过这种方式督促自己学习。

个人学习环境:python3.9,PyCharm 2021.3.2 (Community Edition)

———————————————————————————————————————————

函数就是执行特定任务和完成特定功能的一段代码

为什么需要函数

复用代码

隐藏实现细节

提高可维护性

提高可读性便于调试

1、函数的创建和调用

1.1 函数的创建:

def 函数名 ([输入参数]):

函数体

[return xxx]

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

1.2 函数的调用:

函数名 ([实际参数])

result = calc(10, 20)
print(result)

2、函数的参数传递

函数调用的参数传递

位置实参:根据形参对应的位置进行实参传递

def cale(a, b): # a, b称为形式参数,简称形参,形参的位置出现在函数的定义处
    c = a + b
    return c
​
result = cale(10, 20)   # 10, 20称为实际参数的值,简称实参,实参的位置出现在函数的调用出
print(result)

关键字实参:根据形参名称进行实参传递

res = cale(b=10, a=20)  # = 左侧的变量的名称称为关键字参数
print(res)

3、函数的返回值

函数返回多个值时,结果为元组

def fun(num):
    odd = []    # 存奇数
    even = []   # 存偶数
    for i in num:
        if i%2:     # 判断余数是否为0,python中0的布尔值为False,非0的布尔值为True
            odd.append(i)   # i%2为True时,将i存入odd[]
        else:
            even.append(i)  # i%2为False时,将i存入even[]
    return odd, even
​
print(fun([10, 29, 34, 23, 44, 53, 55]))
"""
结果为:
([29, 23, 53, 55], [10, 34, 44])
"""

函数的返回值:

(1)如果函数没有返回值(即函数执行完毕不需要给调用处提供数据),return可以省略

(2)函数的返回值是1个,直接返回类型

(3)函数的返回值是多个,则返回的结果为元组

4、函数的参数定义

4.1 函数定义默认值参数

函数定义时给形参设置默认值,只有与默认值不符的时候才需要传递实参

def fun(a, b=10):
    print(a, b)
​
fun(100)        # 100 10
fun(20, 30)     # 20 30

4.2 个数可变的位置参数

定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数

使用*定义个数可变的位置形参

结果是一个元组

def fun(*args):
    print(args)
​
​
fun(10)
fun(10, 20, 30)
"""
结果为:
(10,)
(10, 20, 30)
"""

可变的位置参数只能是1个

4.3 个数可变的关键字形参

定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参

使用**定义个数可变的关键字形参

结果为一个字典

def fun(**args):
    print(args)
​
​
fun(a=10)
fun(a=10, b=20, c=30)
"""
结果为:
{'a': 10}
{'a': 10, 'b': 20, 'c': 30}
"""

可变的关键字参数只能是1个

在一个函数的定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参,要求个数可变的位置形参放在个数可变的关键字形参之前

def fun(a, b, c):   # a, b, c在函数的定义处,是形式参数
    print('a=', a)
    print('b=', b)
    print('c=', c)
​
​
fun(10, 20, 30)     # 位置参数
lst = [11, 22, 33]
print('-------------')
fun(*lst)           # 在函数调用时将列表中的每个元素都转换为位置实参传入
print('-------------')
fun(a=100, c=300, b=200)    # 关键字参数
print('-------------')
dic = {'a': 111, 'b': 222, 'c': 333}
fun(**dic)          # 在函数调用时,将字典的键值对都转换为关键字实参传入
print('-------------')
"""
结果为:
a= 10
b= 20
c= 30
-------------
a= 11
b= 22
c= 33
-------------
a= 100
b= 200
c= 300
-------------
a= 111
b= 222
c= 333
-------------
"""

需求:c,d只能采用关键字实参传递

def fun4(a, b, *, c, d):    # 从*之后的参数在调用时,只能采用关键字传递
    print('a=', a)
    print('b=', b)
    print('c=', c)
    print('d=', d)
​
​
# fun4(10, 20, 30, 40)    位置实参传递,此时c,d参数传递不合规
fun4(a=19, b=29, c=39, d=49)    # 关键字实参传递
fun4(18, 28, c=38, d=48)    # 前两个是位置实参,后两个是关键字实参
"""
结果为:
a= 19
b= 29
c= 39
d= 49
a= 18
b= 28
c= 38
d= 48
"""

函数定义时的形参的顺序问题

def fun5(a, b, *, c, d, **args):
    pass
​
​
def fun6(*args, **args2):
    pass
​
​
def fun7(a, b=10, *args, **args2):
    pass

5、变量的作用域

作用域:程序代码能访问的该变量的区域

根据变量的有效范围可分为:

(1)局部变量:在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,实际上为全局变量

(2)全局变量:函数体外定义的变量,作用于函数内外

def fun(a, b):
    c = a + b  # c为局部变量,a、b为形参,作用范围也是函数内部,相当于局部变量
    print(c)
​
​
name = '萨贝尔'  # name的作用范围为函数内外部皆可 ——> 全局变量
print(name)
​
​
def fun2():
    print(name)
​
​
fun2()
​
​
def fun3():
    global age  # 局部变量使用global声明,实际上为全局变量
    age = 20
    print(age)
​
​
fun3()
print(age)

global声明方式只能在函数内使用

最后

以上就是紧张纸鹤为你收集整理的Python自学第九天——函数的全部内容,希望文章能够帮你解决Python自学第九天——函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部