博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 函数基础2 实参与形参
阅读量:6837 次
发布时间:2019-06-26

本文共 2374 字,大约阅读时间需要 7 分钟。

今日内容:

一、函数参数

  • 1.形参与实参定义
  • 2.实参分类
  • 3.形参分类
  • 4.可变参数的整体使用

一、形参与实参定义

def fn(参数们):    pass
1.1 形参
定义函数,在括号内声明的变量名,用来接外面传来的值
1.2 实参
调用函数,在括号内传入的实际值,值可以为常量,变量,表达式或三者的组合
注:    1.形参随着函数的调用而产生,随函数调用结束而销毁(有特例)    2.在函数的外部不能直接使用函数的形参,原因:函数调用结束后,形参会被销毁    3.外部产生了的变量,内部可以使用    4.在函数调用()中出现的参数(外界实际存在的值):实参    5.调用函数时,实参可以有常量,变量,表达式或三种的组合

二、实参分类

2.1 位置参数
不用明确形参名的传参方式,一定按照位置给形参(必须按照顺序)def fn1(a, b, c):    print(a, b, c)# 位置实参:必须按照顺序fn1(10, 20, 30)fn1(30, 20, 10)
2.2 关键字参数
必须明确形参的名字和为形参传值,可以不按照位置(可以不按顺序传递,形参按名字取值)def fn1(a, b, c):    print(a, b, c)# 关键字传参:可以不按照顺序传递,形参按名字取值fn1(a=10,b=20,c=30)fn1(c=30,b=20,a=10)
2.3 二者混用
1.关键字实参必须出现在位置实参之后2.多个位置实参按位置传参3.关键字形参从关键字实参处拿值,可以不用按照指定顺序# 两者混用:关键字实参必须出现在位置实参之后def fn2(a, b, c, d, e, f):    print(a, b, c, d, e, f)fn2(10, 20, 30, e=100, f=500, d=200)ps: 实参的作用:为形参传递值

三、形参分类

3.1 位置形参:
可以由位置实参或关键字实参来传值# 位置形参def fn3(a,b,c):    print(a,b,c)fn3(1,2,3)
3.2 默认形参:
具有默认值,用 '=' 进行赋值,可以是 位置实参与关键字实参,还可以不传值(采用默认值)# 默认形参具有默认值,用 = 进行赋值def fn4(a=10,b=20):    print(a,b)# 默认形参可以由 位置实参 与 关键字实参 来传值,还可以不用传值fn4(20,30)fn4(a=200,b=300)fn4(100)fn4(b = 100)
3.3 可变长位置形参:
只能由位置实参来传值# 可变长形参只能由 位置实参 来传值def fn6(a,b,*args):    print(a,b)    print(args)fn6(1,20,30,40,50)
3.4 无初值关键字形参:
必须由关键字实参来传值,出现在 * 后的都是关键字形参def fn7(a,b,*,c,d):    print(a,b)    print(c,d)fn7(1,20,c=30,d=40)
3.5 有初值关键字形参:
可以由关键字实参来传值,也可以不传值def fn8(a,b,*,c=10,d=20):    print(a,b)    print(c,d)fn8(1,20)  # 有初值关键字形参,不传参数,则输出默认值
3.6 可变长关键字形参:
与无初值关键字形参类似,同样需要传值def fn(*, a, b=20, c, **kwargs):    print(a, b)    print(kwargs)fn(d=40, e=50, a=10, c=30)  # 以关键字形式传入实参,输出 字典类型
注:    1.各种形参出现的先后 :    位置形参 - 默认形参 - 可变长位置形参 - 无 | 有初值关键字形参 - 可变长关键字参数        2.可变长形参会以元组形式接收位置形参与默认形参未接收完的所有传入的位置实参        3.可变长关键字形参:    用来接收被没有被关键字形参接收玩的关键字形参,也只能由关键字实参来传值,用字典来存放数据            ps:可变长形参只能接收位置实参的值,位置实参还必须在关键字实参前,导致默认形参只能由位置实参来传值    重点:可变长位置形参整体赋值

四、可变参数的整体使用

# 可变长位置形参整体赋值def fn7(*args):    print(args)fn7(1,2,3,4,5,6)# 单列集合(保护字符串)将该变量进行 打散 传值# 打散def fn8(*args):    print(args)ls = [1,2,3,4,5]fn8(ls)  # ([1, 2, 3, 4, 5],)fn8(*ls) # 将ls 打散为1,2,3,4,5 再传值 => (1,2,3,4,5,)# 可以理解为,将数组的所有值全部赋值给形参# ---关键字形参------------# 整体赋值dic = {'name': 'Owen', 'age': 18}def fn1(**kwargs):    print(kwargs)fn1(**dic)dd = {    'k1': [1, 2, 3, 4, 5],    'k2': {"name":"Bob"}}fn1(**dd)def fn2(*args):    print(args)ll = [1, [1, 2], {"name":"Bob"}]fn2(*ll)  # (1, [1, 2], {"name":"Bob"})

转载于:https://www.cnblogs.com/xt12321/p/10624076.html

你可能感兴趣的文章
QT项目性能调优小记
查看>>
通过button将form表单的数据提交到action层
查看>>
九度 1357 疯狂地Jobdu序列
查看>>
接口和抽象类对比
查看>>
memcached 常用命令及使用说明
查看>>
双链表
查看>>
.NET基础——数组
查看>>
解决 android 高低版本 webView 里内容 自适应屏幕的终极方法
查看>>
调用微信截图功能c# 截图带扩展名
查看>>
AC日记——830A - Office Keys
查看>>
实用js
查看>>
Linux的快速入门
查看>>
利用 Dolby® Digital Plus 提供优质音频体验
查看>>
【转载】27.SpringBoot和SpringMVC的区别
查看>>
Spring Mvc 实例
查看>>
MySQL深入理解
查看>>
三步快速解决dll冲突问题
查看>>
vue
查看>>
[JSOI2007]文本生成器
查看>>
Python基础算法综合:加减乘除四则运算方法
查看>>