zoukankan      html  css  js  c++  java
  • 【Python】学习笔记十三:函数的参数对应

    位置传递

    我们在定义函数时候已经对函数进行了参数传递调用,但是那只是粗浅的位置传递

    示例

    def sum(a,b,c):
        d = a+b+c
        return d
    print(sum(1,2,3))

    调用函数sum的时候,1,2,3分别传递给a,b,c

    关键字传递

    关键字传递是根据每个参数的名字传递参数

    print(sum(c=3,b=2,a=1))

    关键字可以跟位置传递混合使用,但是位置参数要出现在关键字参数之前

    print(sum(1,c=3,b=2))

    参数默认值

    在定义参数时,使用形如a=10的方式,可以给参数赋予默认值(default),如果参数最终没有被传递值,将使用该默认值。

    def sum(b,c,a=10):
        d = a+b+c
        return d
    print(sum(c=3,b=2))

    默认值需要写在最后,否则报错!

    image

    调用时候没有a的值,则使用了默认值

    打印屏幕结果为:

    image

    包裹传递

    在定义函数时候,我们并不知道调用函数的时候需要传递多少个参数。这时候,使用包裹传递会非常有用

    下面是包裹位置传递的例子

    def func(*num):
        print(type(num))
        print(num)
    
    func(1,2,3)
    func(1,2,3,44,56)

    两次调用,尽管参数个数不同,但是都是基于函数func定义。在func的参数表中,所有的参数被name收集,根据位置合成了一个元组(tuple),这就是包裹传递

    在元组前加*

    下面是包裹关键字传递的例子

    def func(**dict):
        print(type(dict))
        print(dict)
    
    func(a=1,b=2,c=3)
    func(a=1,b=2,c=3,d=44,e=56)

    dict是一个字典,收集所有的关键字,传递函数给func。为了提醒Python,参数dict是包裹关键字传递所用的字典,

    在dict前加**

    解包裹

    *与**也可以在调用的时候使用

    下面为例子:

    def func(a,b,c):
        print(a,b,c)
    args = (1,6,3)
    func(*args)

    所谓的解包裹,就是在传递tuple时,让tuple的每一个元素对应一个位置参数。在调用func时使用*,是为了提醒Python:我想要把args拆成分散的三个元素,分别传递给a,b,c。

    相应的,也存在对词典的解包裹,使用相同的func定义,然后:

    def func(a,b):
        print(a,b)
    
    dict={'a':1,'b':2}
    func(**dict)

    注意:请注意定义时和调用时的区分。包裹和解包裹并不是相反操作,是两个相对独立的过程。

  • 相关阅读:
    平衡二叉树之RB树
    平衡二叉树之AVL树
    实现哈希表
    LeetCode Median of Two Sorted Arrays
    LeetCode Minimum Window Substring
    LeetCode Interleaving String
    LeetCode Regular Expression Matching
    PAT 1087 All Roads Lead to Rome
    PAT 1086 Tree Traversals Again
    LeetCode Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/OliverQin/p/7682942.html
Copyright © 2011-2022 走看看