Python函数之传参

1.函数的传参

  • 实参

    • 位置参数,从左至右,一一对应形参。
    • 关键字参数, 一一对应形参。
    • 混合参数。一一对应形参并且所有的位置参数一定在所有的关键字参数前面。
  • 形参

    • 位置参数。从左至右,一一对应实参。
    • 默认值参数。传值则覆盖,不传值则使用默认值。
    • 万能参数。
    • 仅限关键字参数。
  • 函数本身就是一个功能,这个功能应该是要更具有拓展性的功能,我们可以将一些数据传递到函数里面,通过函数本身的程序对数据进行处理,最终将处理后的结果返回给函数的执行者。

    # s1 = '12312321321312'
    # ret = len(s1)
    # print(ret)
    
  • 函数的执行时,我们传递的参数是实际参数,也叫做实参。

  • 函数的定义时,我们会设置形式参数,也称为形参。

    def len_(argv):  # 定义函数  argv 形参res = 0for i in argv:res += 1return ress1 = '12312321321312'
    ret = len_(s1)  # 实际参数 实参
    

1.1 实参

  • 位置参数, 从左至右,一 一对应。

    def tantan(sex, age, area):print('设置条件 性别:%s,年龄 %s,地区:%s' % (sex, age, area))print('左滑一下')print('右滑一下')print('锁定目标,双击')print('发送信息 约么')# 从左至右,一一对应。
    ret = tantan('女', '30以上', '东北')
    ret = tantan('女', '18~25', '日本')# 练习:实现一个函数,传递给函数两个整形数据,将最大的那个数据返回。# def max_(a, b):
    #     if a > b:
    #         return a
    #     else:
    #         return b
    #
    # ret = max_(10, 20)
    # # ret = max_(100, 30)
    # print(ret)# 简单的if else 我们可以用一行实现。# a = 100
    # b = 20
    # if a > b:
    #     c = a
    # else:
    #     c = b
    # print(c)
    #
    # # 三元运算优化
    #
    # a = 100
    # b = 200
    #
    # c = a if a > b else b
    # print(c)# 优化
    def max_(a, b):"""c = a if a > b else breturn c"""return a if a > b else b
    ret = max_(10, 20)
    # ret = max_(100, 30)
    print(ret)
    
    • 传递给一个函数三个int类型的数据,将这三个数和返回。

      def sum_(a, b, c):return a + b + c
      print(sum_(1, 2, 3))
      
    • 错误示例:

      def func(a, b):print(a, b)# func(1)
      func(1,2,3)
      
  • 关键字参数。一 一对应。

    def tantan(sex, age, area):print('设置条件 性别:%s,年龄 %s,地区:%s' % (sex, age, area))print('左滑一下')print('右滑一下')print('锁定目标,双击')print('发送信息 约么')
    tantan(age='20以上', sex='女', area='河北')
    
  • 混合参数,一 一对应。所有的位置参数一定在所有的关键字参数前面。

    def tantan(first_name, sex, age, area):print('对方必须姓%s' % first_name)print('设置条件 性别:%s,年龄 %s,地区:%s' % (sex, age, area))print('左滑一下')print('右滑一下')print('锁定目标,双击')print('发送信息 约么')既有位置参数,又有关键字参数就称之为混合参数。
    tantan('王', '女', area='山东', age='18以上')
    所有的位置参数一定在所有的关键字参数前面。
    tantan(area='山东', '王', '女', age='18以上')
    
  • 实参角度

    • 位置参数,从左至右,一一对应。
    • 关键字参数,一一对应。
    • 混合参数,一一对应,所有的位置参数一定要在所有的关键字参数的前面。

1.2 形参

  • 位置参数。一一对应。

    从左至右,按照顺序一个一个的设置形参。
    def tantan(sex, age, area):  # sex age area 从左至右,一一设定的参数。print('设置条件 性别:%s,年龄 %s,地区:%s' % (sex, age, area))print('左滑一下')print('右滑一下')print('锁定目标,双击')print('发送信息 约么')
    ret = tantan('女', '30以上', '东北')错误演示
    # def tantan(sex, age, area, name):
    # def tantan(sex, age):passret = tantan('女', '30以上', '东北')
    
  • 默认值参数。

    # 只要实参给默认值参数传参,则默认值参数使用实参传递的数据,如果不传参,默认使用默认值。
    def func(a, b, c=666):print(a)print(b)print(c)func(1, 2)
    func(1, 2, 3)一般,不经常改变的数据我们会设置成默认值。
    我们简单写一个学生信息登记系统。
    让输入员,一个一个输入学生的姓名,年龄,性别。写入到文件中。
    def register_msg(n, a, s='男'):with open('msg', mode='a', encoding='utf-8') as f1:f1.write("{}|{}|{}\n".format(n, a, s))while 1:name = input('请输入姓名:/q或者Q退出').strip()if name.upper() == 'Q':break
    age = input('请输入年龄:').strip()
    # sex = input('请输入性别:').strip()
    register_msg(name, age)
    
  • 万能参数

  • 在函数定义时,*代表聚合,一颗星*将实参所有的位置参数全部都聚合成了一个元组,赋值给了*后面的args.;两颗星**将实参所有的关键字参数全部都聚合成了一个字典,赋值给了星后面的kwargs.

    def eat(*args): print(args)
    eat('蒸羊羔','烧鸭', '烧雏鸡', )def eat(**kwargs):  print(kwargs)eat(name='barry', age=18, hobby='girl', weight=165)# 综合一下:
    def func(*args, **kwargs):print(args)print(kwargs)func('蒸羊羔', '烧鸭', '烧雏鸡', name='barry', age=18, hobby='girl', weight=165)
    
  • 仅限关键字参数

    这个形参只能由实参角度的关键字参数给其传参,并且这个形参必须放在*args后面。

    def func(a, b, *args, c):print(a, b)print(args)print(c)func(1, 2, 3, 4, 5,c=666)
    

2.所有形参的顺序

  • 到目前为止,我们讲过的形参:位置参数,默认值参数,*args, **kwargs, 仅限关键字参数。那么他们的顺序呢?

    def func(a, b, *args, sex='male'):print(a, b)print(sex)print(args)func(1, 2, 3, 4, 5)def func(a, b, *args, c, sex='male', **kwargs):print(a, b)print(args)print(c)print(sex)print(kwargs)func(1, 2, 3, 4, 5, c=666, name='barry', age=19)
    
  • 最终的顺序:位置参数,*args, 仅限关键字参数,默认值参数,**kwargs

3.*的魔法使用

  • 函数执行时,*代表打散。一颗星将可迭代对象打散成位置参数,两颗星将字典打散成关键字参数。

    def func(*args):print(args)lst = [1, 2, 3, 4]
    s1 = 'barry'
    tu1 = ('barry', '王硕', 333)
    func(lst, 22, 33)函数的执行,*代表打散。func(*lst)  # 等同于  func(1, 2, 3, 4)
    func(*s1)  # 等同于 func('b', 'a', 'r', 'r', 'y')
    func(*tu1)  # 等同于 func('b', 'a', 'r', 'r', 'y')
    func(*lst, *s1)
    def func(**kwargs):  # 函数的定义,*代表聚合。
    print(kwargs)
    dic = {'name': 'barry', 'age': 18, 'hobby': 'girl'}
    dic1 = {'a': 'b'}函数的执行,*代表打散。
    func(**dic)  # 先打散,func(name='barry', age=18, hobby='girl')
    func(**dic, **dic1)  # 先打散,func(name='barry', age=18, hobby='girl', a='b')def func(*args, **kwargs):  # 函数的定义,*代表聚合。print(args)print(kwargs)lst = [1, 2, 3, 4]
    dic = {'name': 'barry', 'age': 18, 'hobby': 'girl'}
    func(*lst, **dic)
    
  • * 可以处理剩余元素。

    a, b = [1, 2]
    print(a, b)a, *b, c = [11, 22, 33, 44, 55, 66]
    print(a, b, c)*a, b, c = [11, 22, 33, 44, 55, 66]
    print(a, b, c)a, b, *c = range(1, 11)
    print(a, b, c)a, *b = (11, 22, 33, 44, 55, 66)
    print(a, b)
    

Python函数之传参相关推荐

  1. python函数在传参的时候,到底在传些什么?

    C++这样的语言用多了之后,在Python函数传递参数的时候,经常会遇到一个问题,我要传递一个引用怎么办? 比如我们想要传一个x到函数中做个运算改变x的值: def change(y):y += 1x ...

  2. python函数的传参(bert_vocab_from_dataset),函数括号里面含有**是什么意思?

    今天在学习tensorflow的时候,突然发现一个传参的妙用,惊掉了我的2米长的大下巴. 上代码 bert_vocab_args = dict(vocab_size = 8000,reserved_t ...

  3. python函数的传参要求_python中函数传参详解

    一.参数传入规则 可变参数允许传入0个或任意个参数,在函数调用时自动组装成一个tuple: 关键字参数允许传入0个或任意个参数,在函数调用时自动组装成一个dict: 1. 传入可变参数: def ca ...

  4. python函数的传递方式有哪些_Python全栈工程师(函数的传参)

    ParisGabriel 感谢 大家的支持 每天坚持 一天一篇 点个订阅吧  灰常感谢    当个死粉也阔以 Python人工智能从入门到精通 "\n"Linux 换行符 &quo ...

  5. python中调用函数时必须有实参_Python之函数(一)定义函数以及传参

    定义函数以及传参 函数的定义 def 函数名(): 函数体 例子: def func():#def关键字--定义 func函数名--和变量定义规则一样 ()必须要写格式 :声明 语句结束 s=[1,2 ...

  6. python解包裹_关于Python中包裹传参和解包裹的理解

    原标题:关于Python中包裹传参和解包裹的理解 1.包裹传参 首先思考一个问题:为什么要有包裹传参?原因包括但不仅限于以下两点:①不确定参数的个数.②希望函数定义的更加松散灵活 包裹传参分两种:包裹 ...

  7. Python 命令行传参

    Python 命令行传参 说到 python 命令行传参,可能大部分人的第一反应就是用 argparse.的确,argparse 在我们需要指定多个预设的参数(如深度学习中指定模型的超参数等)时,是非 ...

  8. 函数的初识;函数的返回值;函数的传参

    函数的初识: 避免重复代码,增强可读性. 函数是以功能为导向的. def 函数名(形参): 函数体 函数名() 实参 def 关键字 函数名(与变量命名规则一样) 1.由数字字母下划线组成 2.不能由 ...

  9. vue函数如何调用其他函数?_编程|如何简单理解函数的传参、返回、调用

    1 函数内部变量的局部性 在一个函数中定义的变量(包括实参),其作用域仅限于定义它的函数中,在其它的函数不能使用,这种变量称为"局部变量". 局部变量的作用域:函数内部声明和定义的 ...

最新文章

  1. [CVPR 2020] RandLA-Net:大场景三维点云语义分割新框架(已开源)
  2. Nature:拟南芥微生物组功能研究1培养组学—高通量细菌分离培养鉴定
  3. pod install 失败 Сocoapods trunk URL couldn't be downloaded
  4. python支持中文吗_Python中使用中文
  5. ASP.NET CORE 1.0 MVC API 文档用 SWASHBUCKLE SWAGGER实现
  6. 关于offsetTop offsetHeight clientHeight scrollHeight scrollTop的区别研究
  7. 大数据WEB阶段(十三)JSP(二)JSP标签、EL表达式、JSTL
  8. java鼠标左键按下后拖动实现多选_鼠标拖拽多选功能
  9. Socket网络编程【获取本机IP】
  10. CPU虚拟化系列文章之虚拟机切入和退出
  11. rails使用html form,Rails 页面多选下拉框, form_for, form_tag 使用技巧及 select2 使用
  12. 在redhat enterprise 5 下安装ORACLE 10g
  13. 破解入门(八)-----算法分析与注册机编写
  14. mangodb与mysql的区别
  15. latex常用中文模板,拿走直接很使用
  16. Linux内核 eBPF基础:perf(2):perf性能管理单元PMU的注册
  17. 在linux搭建wiki教程,在Ubuntu 16.04系统上安装WikkaWiki
  18. androidP Surface到SurfaceFlinger -->创建Surface (一)
  19. Android Native APP开发笔记:文件存储与访问
  20. Tomcat日志记录post请求参数

热门文章

  1. 程序员为什么是吃青春饭,而不是像医生律师一样越老越值钱?
  2. LevOJ食用说明书
  3. YOLOv5烟草项目
  4. Xposed模块折腾记
  5. java 数据流 转换 pdf_服务器端或者数据流方法生成pdf格式报表
  6. 大话计算机笔记(一)
  7. 漏电保护插座插排真的有用吗?同为科技(TOWE)漏保系列PDU产品
  8. Mini_Web开发
  9. java中setattr功能___setattr__: 限制属性类型
  10. 【乡巴佬下载】答疑解难:双系统提示延缓写入失败的问题