函数的参数知识点

目录

  • 函数参数的两大分类

  • 位置参数与关键字参数

  • 默认参数

  • 可变长参数(重点)

  • 其他函数参数补充(了解)

  • 名称空间的概念


 

函数参数的两大分类

  1. 形式参数

    在函数定义阶段括号内所填写的参数 简称"形参"

    1
    2
    3
    def func(a, b):
        pass
    # a和b就是函数func的形参
  2. 实际参数
    在函数调用阶段括号内传入的参数 简称"实参"

    1
    2
    func(1,2)
    # 数据1和2就是函数func的实参

     

    """
    形参与实参的关系
    我们可以将形参看成是变量名 实参看成是变量值
    两者在函数调用阶段临时绑定 函数运行结束断开

    形参的表现形式只有一种就是变量名
    实参的表现形式有很多种(但是把握核心 就是 数据值)
    """

 

 

位置参数

  1. 位置参数
    按照从左往右的顺序依次填入的参数

  2. 位置形参
    在函数定义阶段括号内按照从左往右的顺序依次填入的变量名

  3. 位置实参
    在函数调用阶段括号内按照从左往右的顺序依次传入的数据值

       

1
2
3
4
5
6
7
8
9
10
11
# 定义一个可以比较大小的函数(传入两个值 返回较大的)
         
def my_max(a, b):
    print(a, b)
    if a > b:
        return a
    else:
        return b
 
res = my_max(1, 2)
print(res)<br><br>

# 关键字实参
my_max(b=1, a=2) # 关键字参数
通过形参名=变量值的形式传递

'''
位置形参和位置实参的关系:
位置实参从左往右依次传递给位置实参(一一对应)
'''

格式越简单的越靠前 格式越复杂的越靠后

  

默认参数

1
2
3
4
默认形参:
    在函数定义阶段,两种情况:
        1. 如果你没有给形参传递值,就使用默认的
        2. 如果你给形参传递了值,就使用你给的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 定义学员注册功能
    def register(name, age, gender='male'):
        print('%s:%s:%s' % (name, age, gender))
    register('jason', 18)
    register('tony', 28)
    register('kevin', 38)
    register('lili', 18, 'female')
    register('lili', 18, gender='female')
  
"""
函数在定义阶段,已经把值固定死了
变量名与变量值在内存中的关系判断
 
位置形参与默认值形参在定义的时候
    位置形参必须在默认值形参的前面
"""
'''格式越简单的越靠前 格式越复杂的越靠后'''

 

可变长参数

  1. 函数无论传入多少位置参数都可以正常运行
    1
    2
    3
    4
    5
    6
    7
    8
    9
    可变长形参
    def func(x,y,*a):
        print(x,y,a)
    func()  # ()
    func(1# (1,)
    func(1, 2, 3, 4, 5, 6, 7# (1, 2, 3, 4, 5, 6, 7)
    func(1,2# 1 2 ()
    func(1,2,3,4,5,6,7,8,9# 1 2 (3, 4, 5, 6, 7, 8, 9)
    func(1,2# 1 2 (3, 4, 5, 6, 7, 8, 9)

    *号在形参中的使用
    用于接收多余的位置参数 并组织成元组的形式赋值给*号后面的变量名

  2. 函数无论传入多少关键字参数都可以正常运行
    1
    2
    3
    4
    5
    6
    def index(x, y, **b):
        print(x, y, b)
    index()  # {}
    index(a=1,b=2,c=3,d=4# {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    index(y=2, x=1# 1 2 {}
    index(y=2, x=1, u=222, k=111, l=444# 1 2 {'u': 222, 'k': 111, 'l': 444}

      

    **号在形参中的使用
    用于接收多余的关键字参数 并组织成字典的形式赋值给**号后面的变量名
    """

  3. 定义一个函数无论传入多少位置参数和关键字参数都可以正常运行
    1
    2
    3
    4
    5
    6
    def index(*a,**b):
        print(a,b)
    index()  # () {}
    index(1,2,3,4# (1, 2, 3, 4) {}
    index(a=1,b=2,c=3# () {'a': 1, 'b': 2, 'c': 3}
    index(1,2,3,4,a=1,b=2,c=3# (1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3}

      

    可变长形参 *与**后面的变量名其实是可以随便定义的
    但是python中推荐使用
    *args
    **kwargs
    def index(*args, **kwargs):
    pass

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # *号和**号在实参中的使用:
    def index(a, b, c):
        # print(args)
        print(a, b, c)
     
     
    # l = [11, 22, 33]
    t = (11, 22, 33)
     
     
    # index(l)
    # index(l[0], l[1], l[2]) # index(11, 22, 33)
     
    # index(*l)  # index(11, 22, 33)
     
    '''**号在实参中的使用'''
    def func(username, password):
        print(username, password)
     
     
    d = {'username': 'jason', 'password': 222}
    # func(d['x'], d['y'])
    func(**d)  # func(username='jason',password=222)
    func(username='jason', password=222)

      

名称空间

  1. 什么是名称空间(namespaces)

    用于存放变量名与变量值绑定关系的地方(类似于民政局)

    1. 名称空间的分类

      1.内置名称空间
      python解释器提前给你定义好的
      print()
      len()
      ..

    2. 全局名称空间
      在py文件中顶格编写的代码运行之后都会存入全局名称空间
      name = 'jason' # name全局
      def func(): # func全局
      pass
      if 1:
      a = 123 # a全局
      for i in range(10):
      print(i) # i全局
      while True:
      a = 123 # a全局

    3. .局部名称空间
      函数体代码运行之后产生的都是局部名称空间

  2. 存活周期
    1.内置名称空间
    python解释器启动与关闭而创建和销毁
    2.全局名称空间
    随着py文件的运行与结束而创建和销毁
    3.局部名称空间
    随着函数体代码的执行与结束而创建和销毁

 

名字的查找顺序

在查找名字的时候 要先确定自己当前在哪
1.如果你在局部
局部 >>> 全局 >>> 内置
2.如果你在全局
全局 >>> 内置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def f1():
    # x = 222
 
    def f2():
        # x = 333
 
        def f3():
            # x = 444
 
            def f4():
                # x = 555
 
                def f5():
                    # x = 666
                    print(x)
                f5()
            f4()
        f3()
    f2()
f1()

  

 

posted @   柏云殇  阅读(353)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示