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

posted @ 2017-10-29 00:50  W.Yentl  阅读(241)  评论(0编辑  收藏  举报