首页 > 编程语言 >12-python函数的传参——形参、实参、装包 *args和**kwargs

12-python函数的传参——形参、实参、装包 *args和**kwargs

时间:2024-08-09 13:26:49浏览次数:20  
标签:传参 12 形参 参数 def print 实参 fn

函数的参数

1 形参和实参

函数的参数:在定义函数时,可以再函数名后()中定义数量不等的形参,注意可以有也可以没有,可有一个也可有多个,多个形参之间用逗号隔开

形参(形式参数):定义形参就相当于在函数内部声明了变量,但是并不赋值

实参(实际参数):在函数定义时指定了形参,在调用的时候也必须传递实参,实参会赋值给对应的形参

# 定义函数时指定形参
def fn(a,b):
    print("a=",a)
    print("b=",b)
# 调用函数时,来传递实参
fn(10,20)
fn(666,333)
# 求任意两个数的和
def sum1(a,b):
    print(a,"+",b,"=",a+b)

sum1(111,222)
总结:定义函数时叫形参,调用函数时叫实参
定义了多少个形参就必须传递多少个实参

2 参数的传递方式

2.1 默认值参数

def fn(a, b, c=10):
    print("a=", a)
    print("b=", b)
    print("c=", c)
fn(1,2,3)

a= 1
b= 2
c= 3


def fn(a, b, c=10):
    print("a=", a)
    print("b=", b)
    print("c=", c)
fn(1,2)
a= 1
b= 2
c= 10
2.2 位置参数和关键字参数
1.位置参数
def ms(年龄,姓名,手机号,qq号,微信号,国家,省份。。。。)

ms()
2.关键字参数
可以不按照形参定义的顺序来传递,而是直接根据参数名来传递参数

def fn(a, b, c):
    print("a=", a)
    print("b=", b)
    print("c=", c)
fn(b=1,c=3,a=2)
a= 2
b= 1
c= 3
fn(1,2,c=20)  #1,2是位置参数,c=20是关键字参数

注意:混合使用关键字和位置参数的时候,位置参数必须在关键字参数的前面
可以混着写,但是必须把位置参数写在关键字参数前面

3 实参的类型

def fn2(a):
    print("a=",a)
a = 123
fn2(a)  # 实参不一定非得传值,也可以传变量

实参可以传递任意类型,什么都行,啥都行

def fn(a, b, c):
    print("a=", a)
    print("b=", b)
    print("c=", c)
# fn(b=1,c=3,a=2)
fn(1,2,c=20)  #1,2是位置参数,c=20是关键字参数

def fn2(a):
    print("a=",a)
# b= True
# b='hello'
# b = [1,2,3]
b = fn
fn2(b)

4 函数的可变参数

4.1 *args

可变参数也可以叫做不定长参数

*args是将所有的实参保存到一个元组

def sum1(*a):
    print(a)  #()
    print(type(a))  #<class 'tuple'>
sum1()
sum1(1,2,3,4,5)  #(1, 2, 3, 4, 5)
*a能接收所有的实参,并且将实参保存到一个元组中,这个操作其实就叫做装包

# 任意个数的和
def sum1(*a):
    result = 0
    for i in a:
        result+=i
    print(result)
sum1(1)
sum1(1,2)
sum1(1,2,3,4,5,7,8,9,1,4,5,5)

1
3
54
1.带星号的形参只能有一个
2.带星号的参数可以和其他的参数配合使用,但是要写在最后面
def fn(a,b,*c):
    print("a=",a)
    print("b=",b)
    print("c=",c)
fn(1,2,4,5,6,7,8,9,10)

a= 1
b= 2
c= (4, 5, 6, 7, 8, 9, 10)
def fn(*a,b,c):
    print("a=",a)
    print("b=",b)
    print("c=",c)
fn(1,2,4,5,6,7,8,9,10,b=4,c=3)

a= (1, 2, 4, 5, 6, 7, 8, 9, 10)
b= 4
c= 3

命名潜规则是*args

4.2 **kwargs

带一星号的形参有一个弊端,就是只能接收位置参数

def fn(**args):
    print("args=",args)
    print(type(args))
fn(a=1,b=2,c=3) 

args= {'a': 1, 'b': 2, 'c': 3}
<class 'dict'>

**kwargs是将所有的实参保存到一个字典

总结:
**形参可以接收任意的关键字参数,会将这些参数统一保存到一个字典中,字典的键就是参数的名字,字典的值就是参数的值
注意:
**形参,也是只能有一个,并且必须写在所有参数的最后,它必须得是最后一个,命名潜规则是**kwargs

标签:传参,12,形参,参数,def,print,实参,fn
From: https://blog.csdn.net/weixin_70987470/article/details/141059655

相关文章

  • 0212-使用 dummy 收发数据
    环境Time2022-11-20WSL-Ubuntu22.04Rust1.65.0pnet0.31.0前言说明参考:https://docs.rs/pnet_datalink/0.31.0/pnet_datalink/linux目标前面使用了pnet发送了一个数据包,这里发送一个数据包,然后接收并显示出来。接收数据usepnet_datalink::{linux,Channel};f......
  • Econ 312: Modeling Project
    Econ312:ModelingProjectGeneralInstructionsTheModelingprojectforthiscourseisintendedtogiveyouhandsonexperiencetoconstructaneconometricmodelforareal-worldproblem.Youmustkeepacopyofthisprojecttoshowyourprospectiveem......
  • 3128. 直角三角形
    3128.直角三角形题目链接:3128.直角三角形代码如下://参考链接:https://leetcode.cn/problems/right-triangles/solutions/2758892/cheng-fa-yuan-li-pythonjavacgo-by-endles-7469classSolution{public: longlongnumberOfRightTriangles(vector<vector<int>>&g......
  • RuntimeError:预期 2D(未批处理)或 3D(批处理)输入到 conv1d,但得到的输入大小为:[64, 64, 35
    我正在尝试运行一个名为“STFGNN”的图神经网络模型(可在GitHub上获取https://github.com/lwm412/STFGNN-Pytorch/tree/main?tab=readme-ov-file|||)在Kaggle上。但是,我遇到了几个问题:1:运行时警告:除法返回(a-mu)/std0中遇到无效值2:我尝试使用以下标准化函数:......
  • Java方法04:拓展命令行传参
    有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。命令行参数是在执行程序时候紧跟在程序名字后面的信息。【下面的程序打印所有的命令行参数】publicclassCommandLine{ publicstaticvoidmain(Stringargs[]){ for(inti=0;i<arg......
  • 2024年TI杯E题-三子棋游戏装置方案分享-jdk123团队-第一弹赛题的选择与前期方案的准备
    赛前准备本来我们团队前几个月的准备都在小车上,赛前也完成了STM32,树莓派4B,Openmv等几款常见主控板来对小车完成基本的模块封装控制。我们团队的大部分精力以及预算都准备在了小车上面。赛题选择由于在赛题公布的的那一天,我们发现H题,自动行驶小车,要求指定使用TI板子,此时......
  • 12 个开源社区喊你跟通义灵码结伴编码,赢开源先锋大奖!
    ......
  • 012、Ubuntu22.04配置bond
    1、修改网络配置文件vim/etc/netplan/00-installer-config.yaml2、配置文件内容如下:#Thisisthenetworkconfigwrittenby'subiquity'network:bonds:bond0:addresses:-10.14.21.2/24interfaces:-enp97s0f0np0-enp97s0f1......
  • AP8854 输入10-120V 外置MOS 10A 降压恒压型 DC-DC电源管理芯片 控制器方案
    产品描述AP8854一款宽电压范围降压型DC-DC电源管理芯片,内部集成使能开关控制、基准电源、误差放大器、过热保护、限流保护、短路保护等功能,非常适合宽电压输入降压使用。AP8854带使能控制,可以大大节省外围器件,更加适合电池场合使用,具有很高的方案性价比。特点◆电压......
  • 文心一言 VS 讯飞星火 VS chatgpt (320)-- 算法导论22.3 12题
    十二、证明:我们可以在无向图G上使用深度优先搜索来获得图G的连通分量,并且深度优先森林所包含的树的棵数与G的连通分量数量相同。更准确地说,请给出如何修改深度优先搜索来让其给每个结点赋予一个介于1和k之间的整数值v.cc,这里k是G的连通分量数,使得u.cc=v.cc当且仅当结点u和结......