zoukankan      html  css  js  c++  java
  • python笔记2:函数

    5. 函数

    Python函数代码块以 def 关键词开头; 函数内容以冒号起始,并且缩进。
      *注: python中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
        前者传递的只是值的拷贝,不影响对象本身; 后者传递的是对象的地址,会改变对象本身

    *5.1 参数:

    1. 位置参数(必选参数):

       调用函数时,传入的值按照位置顺序依次赋给每个位置参数


    2. 默认参数:

    def power(x, n=2):   或   def enroll(name, gender, age=6, city='Beijing'):

      *注1:只有在与默认参数不符时才需要设置,可简化函数参数调用复杂度。注意:默认参数必须指向不变对象!

      *注2:调用函数时,缺省参数的值如果没有传入,则被认为是默认值;(默认参数的设置,默认参数必须指向不变对象)

      *注3:当你要用一个做运算的变量时候,千万不要用默认参数指定,默认地址第二次调用不会重新实例化一次


    3.可变参数: *args

    def calc(*numbers):
      sum = 0
      for n in numbers:
        sum = sum + n * n
      return sum
    可使用 nums = [1, 2, 3]  或  (1,2,3) ####  calc(*nums)  在 list 或 tuple 前面加一个 * 号,把 list 或 tuple 的元素变成可变参数传进去

      

    4.关键字参数:**kw 扩展函数功能
      (场景:用户注册时,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。)

    def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
    可以传入任意个数的关键字参数:person('Adam', 45, gender='M', job='Engineer')


      *注1:*args 是可变参数,args接收的是一个tuple;
          **kw 是关键字参数,kw接收的是一个dict。
          可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3));
          关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})。
          使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。

      *注2:使用关键字参数允许函数调用时参数的顺序与声明时不一致;

    5.命名关键字参数:特殊分隔 * , * 后面的参数被视为命名关键字参数,限制调用者可以传入的参数名。如;只接收city和job作为关键字参数

    def person(name, age, *, city, job):
    print(name, age, city, job)

      如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

    def person(name, age, *args, city, job):
    print(name, age, args, city, job)


    6.参数组合:
      参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
      对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。


    7.全局变量和局部变量
      定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

    参考廖雪峰教程:

    https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000

  • 相关阅读:
    VS 对话框控件的Tab顺序问题
    基于OpenGL三维软件开发
    OpenGL 中的三维纹理操作
    VC 在桌面上绘制一些图形
    VC/MFC如何添加启动界面
    Cordova or Xamarin 用.net开发IOS和Android程序
    ASP.NET Web API
    软件项目如何选型
    CIO的职责、条件及价值
    Oracle日期周详解IW
  • 原文地址:https://www.cnblogs.com/W-Yentl/p/7749060.html
Copyright © 2011-2022 走看看