一、实参与形参

1、形参:定义函数,在括号内声明的变量名,用来接受外界传来的值

def fn(形参们):
                pass

  1. def fn(a,b,c):# 形参就是考虑实参的值,随着函数的调用才会产生,并随着函数调用结束而销毁
  2. # a,b c必须从外界获取值,才有意义
  3. print(a)
  4. print(b)
  5. print(c)
  6. # 外部提前产生了变量,内部可以使用(x,y,z)
  7. print(x)
  8. print(y)
  9. print(z)
  10. # x,y,z 是实际存在的值
  11. x=10
  12. y=20
  13. z=30 

2、实参:调用函数,在括号内传入的实际值,值可以为常量、变量、表达式或三者的组合

  1. fn(x,y,z)
  2. fn(10,20,30)
  3. fn(x+10,y*2,z/5)

  

注:形参随着函数的调用而产生,随着调用结束而销毁(有特例)

 
  1. 混用
  2. 位置形参与默认形参同时存在,默认形参必须在后
  3. def fn1(a,b,c=10,d=20):
  4. print(a, b, c, d)
  5. 位置形参必须传值,默认形参分情况传值
  6. fn1(100, 200, d=1000)
  1. 在函数的外部不能直接使用函数的形参,原因:函数调用完毕后,形参被销毁了
  2. print(a)
  3. print(b)
  4. print(c)

  

二、实参与形参的分类

注:各种形参出现的先后
位置形参 - 默认形参 - 可变长位置形参 - 无|有初值关键字形参 - 可变长关键字参数

  1. def fn(a, b, c=10, *args, d, e=20, f, **kwargs):
  2. pass
  3. # 位置形参:a、b
  4. # 默认形参:c
  5. # 可变长位置形参:args
  6. # 无初值关键字形参:d、f
  7. # 有初值关键字形参:e
  8. # 可变长关键字参数:kwargs

  

1、实参分类:

  1. 位置实参:必须按照顺序给形参传值
  2.  
  3. def fn (a,b,c):
  4. print(a,b,c)
  5.  
  6. 位置形参可以由位置实参与关键字实参来传值
  7. fn(10,20,30)
  8. fn(a=10,b=20,c=30)

  

关键字实参:按照关键字给形参传值,所以顺序可以颠倒

  1.  
  1. fn1(a=10,b=20,c=30)
  2. fn1(c=30,b=20,a=10)

  

  1. 注:混用
  2. 1.关键字实参必须出现在位置实参后
  3. 2.多个位置实参还是按照位置传参
  4. 3.关键字实参为没有从位置实参拿到值的形参传值,可以不用按照指定顺序
  5.  
  6. def fn2(a, b, c, d, e, f):
  7. print(a, b, c, d, e, f)
  8. fn2(10, 20, 30, e=100, f=500, d=200)

  

注:位置实参、关键字实参共存是,关键字实参必须出现在所有位置实参之后

2、形参分类:

  1. 2-1、位置形参:位置实参与关键字实参都可以对其传参
  2. # positional argument
  3. def fn(a, b, c):
  4. print(a, b, c)
  1. 2-1、位置形参可以由 位置实参 关键字实参 来传值
  2. fn(10, 20, 30)
  3. fn(a=10, b=20, c=30)

  

2-3、默认形参:位置实参与关键字实参都可以对其传参,也可以不被传参(采用自身默认值)

  1. fn()
  2. fn(20, 30)
  3. fn(a=200, b=300)
  4. fn(100) # 就给a传
  5. fn(b=100) # 就给b传

    

2-4、可变长位置形参:可变长形参会以 元组 形式接受 位置形参与默认形参未接受完的 所有传入的位置实参,用索引来取第几个
可变长形参只能由 位置实参 来传值  *****

  1. def fn(a, b=10, *args):
  2. print(a, b)
  3. print(args)   

   
小细节:可变长形参只能接受位置实参的值,位置实参还必须在关键字实参前,
导致默认形参只能由位置实参来传值

  1. fn(1, 20, 100, 200) # 1给a 20给b,不能用b=20传 100,200给args
  1. def fn(*args):
  2. print(args)
  3. fn(,,,,)# 输出(,,,,)
  4.  
  5. a='ab'
  6. b=[,]
  7. c=(,)
  8. d={,}
  9.  
  10. fn(a) #('ab',)
  11. fn(b)#([,],)
  12. fn(c)#((,),)
  13. fn(d)#({,},)
  14.  
  15. *单列集合(保护字符串)将该变量进行 打散 传值(本质传递的是地址)
  16. fn(*a)
  17. fn(*b)
  18. fn(*c)
  19. fn(*d)
  20.  
  21. 打散
  22. def fn1(*args):
  23. print(args)
  24. ls=[,,,,]
  25. fn1(ls)# 输出的结果是([,,,,],)
  26.  
  27. fn1(*ls)
  28. ls打散为1,,,,5再进行传值=》》(,,,,)

2-5、无初值关键字形参:只能由关键字实参传值

  1. 前提:出现在 * 之后的形参
  2. def fn(a, b=10, *, c, d=20, e):
  3. pass
  4. # c,d,e都是出现在*之后,都是关键字形参,由于必须由 关键字实参 来传值,没有顺序的强行要求

2-6、有初值关键字形参:只能由关键字实参传值,也可以不被传值

  1. * 为分割线,可以有变量名如*args,也可以只用做分隔
  2. a:位置
  3. b:默认
  4. c,e:无值关键字形参
  5. d:有值关键字形参
  6.  

  7. ab有先后顺序
  8. c,d,e无先后顺序

2-7、可变长关键字形参:用来接收没有被关键字形参接收完的关键字形参,也只能由关键字实参来传值

用字典来存放数据

例题一
  1. def fn(**kwargs):
  2. print(kwargs)
  3. fn(a=10,b=20) # {'a': 10, 'b': 20}
  4. dic = {'x': 100, 'y': 200}
  5. fn(**dic) # {'x': 100, 'y': 200}

  

例题二
  1. def fn(*,a,b=,c,**kwargs):
  2. print(a,b)
  3. print(kwargs)
  4. fn(d=,e=,a=,c=) # 随便定义一些值,输出a,b的值
  5.  
  6. 整体赋值
  7. dic={'name':'Owen','age':}
  8. def fn1(**kwargs):
  9. print(kwargs)
  10.  
  11. fn1(**dic) #输出结果{'name':'Owen','age':}
  12.  
  13. def fn1(**dic):
  14. print(**dic)
  15. dd={
  16. 'k1':[,,,,],
  17. 'k2':{'name':'Bob'}
  18.  
  19. }
  20. fn1(**dd)
  21.  
  22. def fn2(*args):
  23. print(args)
  24. ll=[,[,],{'name':'Bob'}]
  25. fn2(*ll) # 输出结果(,[,],{'name':'Bob'})

三、可变参数的整体使用

1、可变位置形参以元组方式接收值

  1. 如:接收102030三个数
  2. def fn1(*args):
  3. print(args) # (10, 20, 30)
  1. 第一种传参
  2. fn1(10, 20, 30)
  3. 第二种传参
  4. t = (10, 20, 30) # 单列集合及字符串类型都可以
  5. fn1(*t)

  

2、可变位置实参以字典方式接收值

  1. def fn2(**kwargs):
  2. print(kwargs) # {'name': 'Owen', 'age': 18}
  1. 第一种传参
  2. fn2(name='Owen', age=18)
  3. 第二种传参
  4. d = {'name': 'Owen', 'age': 18} # 单列集合及字符串类型都可以
  5. fn2(**d)

 

Python—day10 函数的参数分类的更多相关文章

  1. python基础——函数的参数

    python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...

  2. Python进阶-函数默认参数

    Python进阶-函数默认参数 写在前面 如非特别说明,下文均基于Python3 一.默认参数 python为了简化函数的调用,提供了默认参数机制: def pow(x, n = 2): r = 1 ...

  3. 深入理解python中函数传递参数是值传递还是引用传递

    深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...

  4. Python中函数传递参数有四种形式

    Python中函数传递参数有四种形式 fun1(a,b,c) fun2(a=1,b=2,c=3) fun3(*args) fun4(**kargs) 四种中最常见是前两种,基本上一般点的教程都会涉及, ...

  5. 讲讲python中函数的参数

    python中函数的参数 形参:定义函数时代表函数的形式参数 实参:调用函数时传入的实际参数 列如: def f(x,y): # x,y形参 print(x, y) f(1, 2) # 1, 2 实参 ...

  6. day10 python之函数的参数

    函数的基本属性 1.1 函数的含义 # 1.功能 :包裹代码,实现功能,达到目的 # 2.特点 :反复调用,提高开发效率,便于代码维护 1.1.2 函数的基本格式 # 函数名 :变量命名规则 # 函数 ...

  7. python 中函数的参数

    一.python中的函数参数形式 python中函数一般有四种表现形式: 1.def function(arg1, arg2, arg3...) 这种是python中最常见的一中函数参数定义形式,函数 ...

  8. python中函数的参数解析

    python中函数的各种参数梳理: 1.形参:函数定义时传入的参数 2.实参:函数调用时传入的参数 (有形参必传实参,形参里自身特点可不传的,可传可不传) 3.缺省参数:不传为默认值,传了会覆盖(下面 ...

  9. python 之 函数的参数

    函数的参数好几种类型:包括位置参数.默认参数.可变参数.关键字参数.命名关键字参数. 廖大神python学习笔记,大神网站:百度搜索“廖雪峰的官网” 1.位置参数:调用函数时根据函数定义的参数位置来传 ...

随机推荐

  1. C# Post方式下,取得其它端传过来的数据

    // Post方式下,取得java端传过来的数据 if ("post".Equals(context.Request.HttpMethod.ToLower())) { contex ...

  2. 创建、使用SpringBoot项目

    >>>>>>>>>>>>>>>>>>>>>>>>> ...

  3. UOJ#449. 【集训队作业2018】喂鸽子 min-max容斥,FFT

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ449.html 题解 设 f(i) 表示给 i 只鸽子喂食使得至少一只鸽子被喂饱的期望次数,先 min-max容斥 一下. ...

  4. web.xml中Servlet3.1版本的头信息格式

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...

  5. 2018-2019-2 20165235 《网络对抗技术》 Exp6 信息搜集与漏洞扫描

    2018-2019-2 20165235 <网络对抗技术> Exp6 信息搜集与漏洞扫描 1.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 2.实践内容 (1)各种搜索技巧的应 ...

  6. window.open在ajax里 被浏览器拦截

    setLine(row){ let newTab= window.open('about:blank'); this.api.isPrivilege(localStorage.getItem(&quo ...

  7. 小波变换-python pywavelets

    # -*- coding: utf-8 -*- import matplotlib.pyplot as plt import numpy as np import pywt from matplotl ...

  8. input type='file' 上传文件 判断图片的大小是否合格与witdh 和 height 是否合格

    function CheckFiles(obj) { var array = new Array('gif', 'jpeg', 'png', 'jpg'); //可以上传的文件类型 if (obj.v ...

  9. php调用c/c++时 passthru()被禁用问题

    passthru被禁用,需要编辑php.ini文件 disable_functions = scandir,passthru,exec,system,chroot,chgrp,chown,shell_ ...

  10. Linux了解知识点

    Linux知识点   1.linux系统内核最早由芬兰大学生linus Torvalds开发. 2.Linux主要用于服务器端和嵌入式两个领域. 3.Linux的特点:开放性.多用户.多任务.良好的用 ...