参数介绍:

why:因为内部的函数需要外部的数据

how:在定义函数阶段,函数名后面()中来定一函数的参数

where:在函数体中用定义的函数名直接使用

形参与实参

实参:有实际意义的函数——在函数调用的时候()中传入的函数

形参:参数本身没有意义,在实参赋予形参值后,他就具有意义了

注:有默认值的形参,在没有被实参赋值,具备的是自身意义,但一旦被实参赋值,意义同实参

def add(n1, n2=2):
# -- 在定义函数的时候,()中出现的参数

# 形参范畴
def add(n1, n2): # 形参n1,n2在没有被实参赋值时,没有实际意义,被什么意义的实参赋值,就被赋予了什么意义
return n1 + n2

# 实参范畴
print(add('a', 'b')) # 实际的字符串
print(add(10, 20)) # 实际的数字
a = 200
b = 300
print(add(a, b)) # 存放实际数字的变量

形参是对实参的值拷贝

形参与实参可以重名,但是代表的是两个不同的变量

# 不可变类型,形参发生重指向,实参不变
def fn(num):
print('1>>>:', num) # 10
num = 20
print('2>>>:', num) # 20

num = 10
fn(num)
print('3>>>:', num) # 10

# 可变类型,形参发生值的内部变化,实参变,两个指向的是同一个地址
def func(ls):
print('1>>>:', ls) # [10]
ls.append(20)
print('2>>>:', ls) # [10, 20]

ls = [10]

func(ls)
print('3>>>:', ls) # [10, 20]

实参的分类

实参分为:1.位置实参 2.关键字实参

def fn(a, b):
print(a, b)

# 1)拿实际值进行传参
fn(10, 20) # 10 => a | 20 => b

# 2)拿位置实参进行传参:形参与实参进行位置一一对应,eg:一号为的实参一定传给一号位的形参
a = 100
b = 200
fn(a, b) # a:100 => a | b:200 => b
fn(b, a) # b:200 => a | a:100 => b

# 3)拿关键字实参进行传参:指名道姓进行传参 - 传参的过程过指名道姓形参
# 明确:形参名目前为a和b
fn(a=1000, b=2000) # a:1000 => a | b:2000 => b
fn(b=2000, a=1000) # b:2000 => b | a:1000 => a
a = 666
b = 888
# 前面的是形参名,后面的是传递的实参名
fn(a=a, b=b) # a:666 => a | b:888 => b

# 位置实参:一定按照位置,且个数要一一对应进行传参
# 关键字实参:指名道姓进行传参,个数一致位置可以改变进行传参

# 实参组合传参规则:必须先传位置实参,再传关键字实参

形参的分类

# 六大分类:
# 1.无值位置形参(位置形参):可以被位置与关键字实参进行传参,必须传值

# 2.有值位置形参(默认形参):可以被位置与关键字实参进行传参,可以不用传参采用默认值

# 3.可变长位置形参:可以接受前两个没有接收完位置实参,接收的个数可以为0~n个,0个是就是空元组

# 4.无值关键字形参:只能由关键字实参进行传参,必须传值

# 5.有值关键字形参:只能由关键字实参进行传参,可以不用传参采用默认值

# 6.可变长关键字形参:接收4,5没有接收完的关键字实参,接收的个数可以为0~n个,0个是就是空字典

# 声明顺序:
# 位置形参:a -> 默认形参:b -> 可变长位置形参:args -> 有无默认值关键字形参:cde -> 可变长关键字形参:kwargs
def fn(a, b=10, *args, c, d=20, e, **kwargs): pass

# 注意点:
# 1.可变长位置形参只能接受位置实参,要想被附上值,前面的有值位置形参的默认值没有多大意义
# 2.args与kwargs是可变长形参的变量名,所以可以自定义,但约定俗成就用它俩

# 常出现的组合
def f1(*args, **kwargs): pass

def f2(a, b=10, **kwargs): pass
def f3(a, *args, **kwargs): pass

def f4(a, *, x, **kwargs): pass
def f5(a, *args, x, **kwargs): pass

# 使用法则:
# 1.所有位置形参全部采用位置实参进行传值
# 2.所有关键字形参全部采用关键字实参进行传值
# 3.不管位置还是关键字形参,全部按照顺序进行传参

打散机制

def fn(*args, **kwargs):
print(args)
print(kwargs)

t = (1, 2, 3)
dic = {'a': 100, 'b': 200, 'c': 300}

# *单列容器 会打散单列容器
# **双列容器 会打散双列容器
fn(1, 2, 3, a=100, b=200, c=300) # (1, 2, 3) {'a': 100, 'b': 200, 'c': 300}
fn(*t, **dic) # (1, 2, 3) {'a': 100, 'b': 200, 'c': 300}
fn(*(1, 2, 3), **{'a': 100, 'b': 200, 'c': 300}) # (1, 2, 3) {'a': 100, 'b': 200, 'c': 300}

# 字符串也可以被打散
fn(*'abc') # ('a', 'b', 'c') {}
print(*'abc') # a b c

转载于:https://www.cnblogs.com/wyf20190411-/p/10770610.html

函数的参数与函数的嵌套调用相关推荐

  1. erlang精要(18)-以函数作为参数的函数,返回函数的函数(1)

    以函数作为参数的函数: 下面以Is_odd函数作为参数调用map和filter 1> Is_odd =fun(X) -> (X rem 2) =:= 1 end. #Fun<erl_ ...

  2. 函数的参数和函数的值

    函数的参数和函数的值 形式参数和实际参数 函数的返回值 形式参数和实际参数 函数的参数分为形参和实参两种.形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用.实参出现在主调函数中,进 ...

  3. C++函数默认参数(函数传入实参个数比形参个数少)

    C++函数默认参数 定义 参数添加顺序 注意事项 转载链接 定义     在C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的 ...

  4. erlang精要(19)-以函数作为参数的函数,返回函数的函数(2)

    下面以一个综合例子来整合前一节的内容: 以函数作为参数的函数 返回函数的函数 例子功能是完成求第一个参数列表能全部被第二个参数列表整除的元素. -module(learnerl). -export([ ...

  5. 【C语言函数】 - 库函数、自定义函数、函数参数、函数调用、嵌套调用链式访问、递归与迭代、缓冲区

    目录 一.函数是什么 二.C语言中函数的分类 1.如何学会使用库函数 1.1.strcpy 1.2.memset 2.自定义函数 2.1.与库函数的区别 2.2.写一个函数可以找出两个整数的最大值 2 ...

  6. Python基础第六天——函数的使用、函数的参数、函数的返回值、函数的嵌套、命名空间、作用域、函数对象...

    一.拾遗 1.通常情况下无参函数只是进行操作,所以不需要返回值:有参数函数则需要返回值. 2.练习: 判断用户输入一串字符,如果这串字符的长度小于5则重新输入,如果大于5则退出循环. while Tr ...

  7. 关于java重载函数,参数为null时,调用的处理。(精确性原则)

    关于以下程序的输出结果 public class TestNull { public void show(String a){ System.out.println("String" ...

  8. 【C语言】函数基本知识详细讲解(库函数、自定义函数、参数、函数的套用.....

    接着上次的数组的基本知识,让我们来简单了解C语言里的函数. 目录 函数的定义 库函数 自定义函数 函数的参数 函数的调用: 函数的嵌套调用和链式访问 函数的声明和定义 函数递归. 总结  函数的定义 ...

  9. js中函数的参数为函数的情况即回调函数

    js中函数的参数可以是数组对象也可以是函数,当参数为函数时我们叫做回调函数 //定义回调函数 function B() { console.log("函数B") setTimeou ...

最新文章

  1. FATAL ERROR in native method: JDWP No Transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_IN,ec
  2. python源码笔记_python源码学习笔记(二)
  3. 旧计算机 云桌面,该不该利用旧PC机改造成云桌面虚拟化模式呢?
  4. [vue] 说说你对keep-alive的理解是什么?
  5. mysql 排名_SQL语句mysql排名、分组后组内排名、取各组的前几名
  6. Python接口自动化之logging封装及实战
  7. java的反射机制--关于类中属性的反射。
  8. PHP发卡自动源码,PHP自动化售货发卡网源码
  9. SCI写作攻略——附带常见英语写作句式
  10. python selenium 爬虫遇到 由于目标计算机积极拒绝,无法连接
  11. U盘没有文件但空间被占用解决办法(U盘文件夹隐藏恢复)
  12. 网页设计课设【登录注册系统及增删改查】
  13. httprunner踩坑之路
  14. 零基础 学 python开发 (Genius套餐A) 四十一
  15. android MediaPlayer 完成播放后无法再次播放
  16. __getattr__和__setattr__
  17. Kettle连接MySQL数据库找不到驱动问题解决
  18. 2021年熔化焊接与热切割考试资料及熔化焊接与热切割复审考试
  19. ios epub电子书阅读器demo
  20. webgis开发 for java_WebGIS开发入门指导练习题(一)

热门文章

  1. Dalvik与JVM区别
  2. SQLSERVER中的网络配置
  3. JAVA调用R语言之Rserve
  4. jq苹果手机全屏下点击无效果_看剧、下视频、看小说,这一个app就可以~
  5. python 启动django时报错MySQLdb._exceptions.OperationalError: (2059, <NULL>)和django.db.utils.OperationalEr
  6. oracle语法垃圾,oracle 语法
  7. html带颜色表格怎么做,使用HTML添加表格4(行颜色与表格嵌套)——零基础自学网页制作...
  8. php ci项目总结,分享关于php CI框架使用的一点小总结
  9. java聊天室小程序论文_在Java项目中利用continue与break制作一个聊天室小程序
  10. yolov5检测完不显示框和标注