上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

【人生苦短,我学 Python】(11)函数(上)

guduadmin463月前

Python 所有文章传送门
【Python】所有文章传送门

目录

  • 简述 / 前言
  • 1. 函数
    • 1.1 函数的定义与调用
    • 1.2 函数的形参要怎么排序
      • 1.2.1 位置参数
      • 1.2.2 默认值参数(可选参数)
      • 1.2.3 可变长度参数
      • 1.2.4 指定使用形参格式
      • 1.2.5 形参一般顺序
      • 1.2.6 特别注意

        简述 / 前言

        这篇开始分享在做项目中用的最多的一个东西:函数,你可以会用别人写好的函数(比如第三方库的某个函数),又或者你会自己写一个函数来完成你要实现的功能,所以这节比较重要,但是内容并不难。鉴于此部分内容较多,所以应该会分成2篇文章分享~

        1. 函数

        1.1 函数的定义与调用

        关键语法:

        def 函数名(形参):
            print(f'你输入的是:{形参}')
            # return 形参	# 函数可以通过 return 返回值
        实参 = '实参'
        函数名(实参)
        

        输出:

        你输入的是:实参
        

        插一嘴,虽然我们可以用中文来写函数,但是不建议这么做,毕竟不同的电脑有不同环境,有时候不同的解释器解析代码时很容易出错,其次我们的代码要国际化~

        1.2 函数的形参要怎么排序

        值得注意的是:函数可以没有形参,即没有传入值!

        Python参数传递方法是传递对象引用,而不是传递对象的值。

        1.2.1 位置参数

        实参默认按位置顺序传递给对应的形参,实参和形参的顺序必须严格一致,并且实参和形参的数量必须相同。即:

        def CSDN(a, b):
            print(f'a = {a}')
            print(f'b = {b}')
            print()
        CSDN(1, 2)
        CSDN(b=2, a=1)		# 通过关键字参数乱序传入实参
        

        输出:

        a = 1
        b = 2
        a = 1
        b = 2
        

        值得注意的是,虽然说是位置参数,但是默认情况下可以通过 关键字参数 来不按顺序传入实参。但是并不是什么情况下都可以这么用的,特殊情况见【1.2.4 指定使用形参格式】~

        1.2.2 默认值参数(可选参数)

        如果一个函数希望用到一个参数,但是这个参数基本上不会变化,那么可以通过设置默认值参数,这样在调用函数时就不用再传入这个实参了。即:

        def CSDN(a, b=2024):
            print(f'a = {a}')
            print(f'b = {b}')
            print()
        CSDN(1)
        CSDN(1, 2)
        

        输出:

        a = 1
        b = 2024
        a = 1
        b = 2
        

        1.2.3 可变长度参数

        在形式参数名前加 1个* 或 2个** 。

        • *args 用来接受多个位置参数并将其放在一个元组中。
        • **kwds 接受多个关键参数并存放到字典中。
        • 这类参数必须位于形参列表的最后位置。

          示例:

          def CSDN(a, b=2024, *args, **kwds):
              print(f'a = {a}')
              print(f'b = {b}')
              print(f'args = {args}')
              print(f'kwargs = {kwds}')
              print()
          CSDN(1, 2, 3, 4, 5, name='小邓在森林', age=18)
          

          输出:

          a = 1
          b = 2
          args = (3, 4, 5)
          kwds= {'name': '小邓在森林', 'age': 18}
          

          1.2.4 指定使用形参格式

          在形参中,文末可以加入这两个符号:/, *。

          位置含义
          形参1, …, 形参m, /, …形参1~m都是位置参数,即只能通过顺序位置传入参数,不能使用关键字参数传值
          …, /, 形参1, …, 形参m, *, …形参1~m即是位置参数,也是关键字参数,即可以通过顺序位置传入参数,也可以使用关键字参数传值,但是要注意的是:这个形参必须使默认值参数
          …, *, 形参1, …, 形参m形参1~m都是关键字参数,即只能使用关键字参数传值

          示例:

          def CSDN(a, b=2024, /, c=0, d=-1, *, e, f=2025):
              print(f'a = {a}')
              print(f'b = {b}')
              print(f'c = {c}')
              print(f'd = {d}')
              print(f'e = {e}')
              print(f'f = {f}')
          CSDN(0, 0, 0, d=0, e=0, f=0)
          

          输出:

          a = 0
          b = 0
          c = 0
          d = 0
          e = 0
          f = 0
          

          1.2.5 形参一般顺序

          不考虑这两个符号:/, * 的情况下,形参一般顺序为:位置参数、关键字参数、可变长度参数。

          1.2.6 特别注意

          1. 如果传递给函数的实参是可变序列,那么在函数中修改的操作会覆盖到原可变序列。比如传入的是一个数组,哪怕你的形参与实参数组的名字不一样,它们映射的还是同一个数组地址,那么在函数体中修改数组的值,函数外的数组也会改变。可看下面示例:

            def list_change(l1):
                l1[0] = 5
                print(f'函数体中改变后的数组为:{l1}')
            l = [1, 2, 3]
            print(f'原数组为:{l}')
            list_change(l)
            print(f'原数组为:{l}')
            

            输出:

            原数组为:[1, 2, 3]
            函数体中改变后的数组为:[5, 2, 3]
            原数组为:[5, 2, 3]
            
          2. 如果形参命名和可变长度中的 **kwds 的键重名了,那么就要加上符号 /。

            示例:

            def CSDN(name, **kwds):
                print('name' in kwds)
            CSDN('小邓在森林', **{'name': '小邓在森林'})
            

            输出:

            Traceback (most recent call last):
              File "D:\MyCode\Python_Code\PyCharm\CSDN.py", line 32, in 
                CSDN('小邓在森林', **{'name': '小邓在森林'})
            TypeError: CSDN() got multiple values for argument 'name'
            

            示例(加上符号 /):

            def CSDN(name, /, **kwds):
                print('name' in kwds)
            CSDN('小邓在森林', **{'name': 2024})
            

            输出:

            True
            

网友评论

搜索
最新文章
热门文章
热门标签
 
 梦到一个人死了说明什么  梦到自己怀孕了什么预兆已婚女人  梦见狗生小狗是什么意思