一、形参和实参

实参

    在函数调用()中出现的参数(外界实际存在的值):实参。值可以为常量、变量、表达式或三者的组合

形参

    在函数定义()中出现的参数:形参。形参就是拷贝实参的值,随着函数的调用才产生,随着函数调用结束而销毁。
    在函数的外部不能直接使用函数的形参,因为函数调用完毕后,形参被销毁了。

二、实参分类

def fn1(a, b, c):print(a, b, c)

位置实参

必须按照位置的顺序,从左到右为形参传递值

fn1(10, 20, 30) #  10 20 30
fn1(30, 20, 10) #  30 20 10

关键字实参

可以不按顺序传递, 形参按名字取值

fn1(a=10, b=20, c=30) #  10 20 30
fn1(c=30, b=20, a=10) #  10 20 30

位置实参和关键字实参混用

  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)

三、形参分类

(一).位置形参的范畴

1.位置形参(positional argument)

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

    位置形参可以由位置实参关键字实参来传值

fn(10, 20, 30)
fn(a=10, b=20, c=30)

2.默认形参

    默认形参具有默认值,用=进行复制

def fn(a=10,b=20):print(a, b)

    默认形参可以由位置实参关键字实参来传值,还可以不用传值(采用自身默认值)。

fn(n)
fn(20, 30)
fn(a=200, b=300)
fn(100) #  就给a传
fn(b=100) #  就给b传

位置形参与默认形参同时存在

    默认形参必须在后

def fn1(a,b,c=10,d=20):print(a, b, c, d)

    位置形参必须传值,默认形参分情况传值

fn1(100, 200, d=1000)

3.可变长形参

    只能由位置实参来传值

def fn(a, b=10, *args):print(a, b)print(args)

    可变长形参会以元组形式接受位置形参与默认形参未接受完的所有传入的位置实参。
    可变长形参只能接受位置实参的值,位置实参还必须在关键字实参前,导致默认形参只能由位置实参来传值。

fn(1, 20, 100, 200) #  1 20(100, 200)fn(100) #  100 10()

整体赋值

def fn(*args):print(args)fn(1, 2, 3, 4, 5)  # (1, 2, 3, 4, 5)a = 'ab'
b = [1, 2]
c = (1, 2)
d = {1, 2}
fn(a)  # ('ab', )
fn(b)  # ([1, 2], )
fn(c)  # ((1, 2), )
fn(d)  # ({1, 2}, )

    用a,b,c,d进行传值,如何得到(‘a’,‘b’),(1, 2)
    *单列集合(保护字符串)将该变量进行 打散 传值 (本质传递的是地址)

fn(*a) #  ('a', 'b')
fn(*b) #  (1, 2)
fn(*c) #  (1, 2)
fn(*d) #  (1, 2)
打散
def fn1(*args):print(args)
ls = [1, 2, 3, 4, 5]
fn1(ls)  # (ls, )fn1(*ls)  # 将ls打散为1,2,3,4,5再进行传值=>(1,2,3,4,5)

(二).关键字形参的范畴

1.关键字形参

def tt(a, b=10, *, c, d=10, e):print(a, b, c, d, e)

*为分割线,可以有变量名 *args, 也可以只用来做分隔
a:位置
b:默认
c,e:无值关键字形参
d:有值关键字形参
注:
a和b有先后顺序
c,d, e无先后顺序

    关键字形参必须由关键字实参来传值, 出现在*后的都是关键字形参

def fn(*, a, b=10, c):print(a, b, c)
#fn(10, 20, 30)  # 错误:TypeError: fn() takes 0 positional arguments but 3 were given
fn(b=300, c=100, a=200)

2.可变长关键字形参

用来接收没有被关键字形参接收完的关键字形参,也只能由关键字实参来传值,用字典来存放数据。

def fn(*, a, b=20, c, **kwargs):print(a, b)print(kwargs)fn(d=40, e=50, a=10, c=30) #  10 20{'d': 40, 'e': 50}

整体赋值

dic = {'name': 'Owen', 'age': 18}
def fn1(**kwargs):print(kwargs)fn1(**dic) #  {'name': 'Owen', 'age': 18}dd = {'k1': [1, 2, 3, 4, 5],'k2': {"name":"Bob"}
}
fn1(**dd) #  {'k1': [1, 2, 3, 4, 5], 'k2': {'name': 'Bob'}}

四、参数总结

def fn(a, b=10, *args, d, f=20, **kwargs):print(a)print(b)print(args)print(d)print(f)print(kwargs)

有位置实参传值: args和kwargs如果都能接收到值:
b必须传值且只能用位置实参传值,f可以不用传值

fn(1,2,3,4,d=5,g=6,k=7) #  12(3, 4)520{'g': 6, 'k': 7}

全部用关键字实参传值

fn(x=100,y=200,d=300,b=400,a=500) #  500400()30020{'x': 100, 'y': 200}

1.位置形参与默认形参: 能用 位置实参 关键字实参 传值
2.可变长位置形参:只能 位置实参 传值
3.所有关键字形参:只能 关键字实参 传值

基石为勤能补拙的迷宫之旅——第十天(Python函数参数)相关推荐

  1. 基石为勤能补拙的迷宫之旅——第十二天(Python函数装饰器)

    一.开放封闭原则 不改变调用方式与源代码的前提下增加功能 不能修改被装饰对象(函数)的源代码 不能修改被修饰对象(函数)的调用方式,且能达到增加功能的效果(开放) 二.初识 洗碗机Dishwasher ...

  2. 基石为勤能补拙的迷宫之旅——第九天(Python函数初步)

    一.函数的定义 重复利用的工具 可以完成特定功能的代码块,函数就是存放代码块的容器 二.函数的语法 函数四部分 函数名:使用该函数的依据 函数体:完成功能的代码块 返回值:功能完成的反馈结果 参数:完 ...

  3. 基石为勤能补拙的迷宫之旅——第十六天(包)

    一.包的认识 包通过文件夹来管理一系列功能相近的模块. 包:一系列模块的集合体,包中一定有一个专门用来管理包中所有模块的文件__init__.py 包名:存放一系列模块的文件夹名字,存放的是管理模块的 ...

  4. 基石为勤能补拙的迷宫之旅——第十五天(Python模块)

    一.什么是模块 模块就是一系列功能的集合体.在Python中,一个py文件就是一个模块,比如module.py就是一个模块,其中模块名是module. 模块的四种存在方式(通用类别): 使用pytho ...

  5. 基石为勤能补拙的迷宫之旅——第八天(Python文件操作)

    一.文件操作基本步骤 1.打开文件的两种方式 变量名 = open('需打开的文件','模式选择',encoding='编码类型')with open('需打开的文件','模式选择',encoding ...

  6. 基石为勤能补拙的迷宫之旅——客户端/服务器架构,OSI模型

    一.客户端/服务器架构     服务器就是一系列硬件或软件,为一个或多个客户端(服务的用户)提供所需的"服务".它存在唯一目的就是等待客户端的请求,并响应它们(提供服务),然后等待 ...

  7. 基石为勤能补拙的迷宫之旅——第二天(编程语言介绍、Python解释器介绍与安装、执行Python程序的方式和变量)

    一. 编程语言介绍 1.1 机器语言 直接用计算机能理解的二进制指令编写程序,直接控制硬件 1.2 汇编语言 用英文标签取代二进制指令取编写程序,本质也是在直接控制硬件 1.3 高级语言 用人能理解的 ...

  8. 基石为勤能补拙的迷宫之旅——第一天(计算机硬件和操作系统)

    计算机硬件和操作系统 一. 编程与编程的目的 什么是语言?什么是编程语言? 什么是编程? 为什么要编程? 二. 计算机组成 五大组成部分: 三. CPU详解 四. 存储器详解 数据单位 寄存器 高速缓 ...

  9. 基石为勤能补拙的迷宫之旅——第五天(Python基本数据类型及内置方法)

    一.数据可变不可变类型 可变类型:值改变,但是id不变,证明就是在改变原值,是可变类型 l = ['a', 'b'] print(id(l)) l[0] = 'A' print(l) print(id ...

最新文章

  1. 用简单术语让你看到贝叶斯优化之美
  2. Python基本语法_集合set/frozenset_内建方法详解
  3. YTKNetwork使用application json方式传递参数
  4. Android中开发习惯
  5. 用JavaScript获取表单里的值
  6. golang变量作用域
  7. 基于Verilog的按键控制LED灯
  8. error while loading shared libraries: libgconf-2.so.4
  9. 23种设计模式(十一)对象性能之单件模式
  10. 【SSM】企业差旅管理系统-李兴华-专题视频课程
  11. 产品配件类目税目分类_商品及税收分类编码选择技巧
  12. matlab的gaot在哪里,最权威遗传算法工具箱GAOT(gaot)安装方法
  13. PTA|团体程序设计天梯赛-练习集|JAVA版
  14. cart决策树Matlab实现,CART决策树的理解及其实现
  15. python中一元二次方程的判别式_一元二次方程根的判别式知识点
  16. 浏览器访问IPv6地址
  17. 电子邮箱地址怎么写?
  18. 同步发电机 有功功率 无功功率调节
  19. 未来10年计算机专业会不会淘汰,未来10年不会“被淘汰”的4个专业,发展潜力较大,就业前景可观...
  20. 全国计算机试题选登答案,2012年宁波市中小学生计算机程序设计初赛试题选登...

热门文章

  1. 张一鸣没动手,王兴不紧张
  2. 达梦数据库之DM8_实时数据守护配置
  3. 中国人为什么喜欢蹲着?
  4. Hadoop 集群项目(类似百度网盘)
  5. Flink 面试通关手册
  6. Last login: Wed Aug 24 17:23:14 2016 from wr702n.mshome.net
  7. XXL-JOB配置笔记
  8. 利用Anaconda 创建虚拟环境
  9. 使用adb查看手机中包含中文的目录或者文件(中文乱码问题)。
  10. 3款Android版epub阅读器推荐