• Python-函数传参


    函数定义和调用

    def语句定义函数

    def 函数名(参数列表):

      函数体(代码块)

      【return 返回值】

    python的函数没有return语句,会隐式返回一个None值。

    定义中的参数列表成为形式参数,只是一种符号表达,简称形参

    函数的调用

    调用方式,函数名加上小括号,括号内写上实参。

    调用时写的参数是实际参数,简称实参

    函数参数

    参数调用时传入的参数要和定义的参数个数相匹配。

    • 位置参数

    def(x,y,z)  调用使用f(1,2,4)

    -----按照参数定义顺序传入实参

    • 关键字参数

    def(x,y,z) 调用使用f(x=1,y=2,z=3) 或者f(z=3,x=1,y=2)

    ----使用形参的名字来写入实参的方式,如果使用了形参名字,那么传参顺序就可以和定义顺序不同

    传参要求位置参数必须在关键字参数之前传入,位置参数是按位置对应的。

    函数参数默认值

    定义时,在形参后跟一个值。

    def add(x=4,y=5):

      return x+y

    def add(x=4,y):  #没有缺省值的需要放前面。

      return x+y

    可变参数

    一个形参可以匹配任意个数。

    位置参数的可变参数

    def add(*nums):
        sum=0
        print(type(nums))
        for x in nums:
            sum=sum+x
        return sum
    print(add(3,6,9))
    

     

    <class 'tuple'>
    18

    在形参前使用*表示该形参是可变参数,可以接收多个实参。

    收集多个实参为一个tuple.

    关键字参数的可变参数

    1 def showconfig(**kwargs):
    2     for k,v in kwargs.items():
    3         print("{}={}".format(k,v))
    4 print(showconfig(x=2,y=3))

    x=2
    y=3

    形参前使用**符号,表示可以接收多个关键字参数。

    收集的实参名称和值组成1个字典。

    可变参数的混合使用

    总结

    有位置可变参数和关键字可变参数;

    位置可变参数在形参前使用*,关键字可变参数在形参前使用**;

    位置可变参数和关键字可变参数都可以收集若干个实参,位置可变参数收集形成1个tuple,关键字可变参数收集形成1个dict;

    混合使用参数的时候,可变参数要放到参数列表的最后。普通参数需要放到参数列表前面,位置可变餐宿要放到关键字可变参数之前。

    keyword-only参数(python3加入)

    如果在一个*后,或者一个位置可变参数后出现的普通参数,实际上不是普通的参数了,而是keyword-only参数。

    1 def foo(*args,x):
    2     print(args)
    3     print(x)
    4 foo(3,5)  #报错,foo() missing 1 required keyword-only argument: 'x',相当于args已经截获了所有的位置参数,
    5 foo(3,5,7) #报错
    6 foo(3,5,x=7)

    def(**kwagrs,x) #报语法错误,可以理解为kwargs会截获所有与的关键字参数,就算是写了x=5,x也永远得不到这个值。

    def fn(*,x,y)

      print(x,y)

    fn(x=5,y=6)

    *之后,普通参数都变成了必须给出的keyword-ony参数。

    可变参数和参数默认值

    1 def fn(*args,x=5):
    2     print(x)
    3     print(args)
    4 
    5 fn()
    6 fn(6)
    7 fn(x=6)
    8 fn(1,2,3,x=10)
     1 def fn(y,*args,x=5):
     2     print("x={},y={}".format(x,y))
     3     print(args)
     4 
     5 fn()  #缺失位置参数y
     6 fn(5)
     7 fn(x=6) #缺失位置参数y
     8 fn(1,2,3,x=10)
     9 fn(y=17,2,3,x=10) #位置参数要放到关键字参数前面
    10 fn(1,2,y=3,x=10) #重复给y赋值
    1 def fn(x=5,**kwargs):
    2     print('x={}'.format(x))
    3     print(kwargs)
    4 
    5 fn(y=6,x=8)
    6 fn(5,y=7)

    函数参数

    参数规则

    参数列表一般顺序是普通参数,缺省参数,可变位置参数,keyword-only参数(可带缺省值),可变关键字参数。

    def fn(x,y,z=3,*args,m=4,n,**kwargs)

  • 相关阅读:
    Python使用 odbc、jdbc与 Object Relational Mapping (ORM)进行数据库开发
    Tensorflow安装
    学生作业
    大学课程推荐
    人工智能的开发工具
    android开发
    jdbc-odbc桥
    开博随记
    利用jq实现自适应边缘情况的气泡Tip
    一篇完整的FlexBox布局指南
  • 原文地址:https://www.cnblogs.com/dongliping/p/11473749.html
Copyright © 2020-2023  润新知