python之函数基础-->参数

一,什么是函数?

用来实现某一个功能的方法

二,函数的分类?

内置函数:针对一些简单的功能,python已经给我们定义好了的函数,即内置函数,对于内置函数,我们拿来用就行,如:sum(),len(),count()

自定义函数:因为内置函数不可能实现我们想要的所有的功能,所以就需要我们自己编写代码实现我们所期望的功能,以便以后拿来继续使用,这种叫自定义函数

三,如何自定义函数?

def 函数名(args1,args2,args3......):

  '''

  注释

  '''

  函数体

  return 返回值

ps:函数一定要先定义,然后才能被调用或者被引用

四,函数在定义阶段都做了什么呢?

只检查语法,不执行代码,也就是说在定义的时候,函数的语法就能检查出来,而逻辑性的错误,只有函数执行的时候才能检查出来

五,函数的类别

  a,面向对象:类-->class

  b,面向过程:过程--->def   :函数无返回值

  c,函数式编程:函数---> def

六,为什么要使用函数?

  代码重用,可扩展,保持统一

七,函数的参数

  A,实参和形参:形参其实就是变量名,实参其实就是变量的值,把值传给变量名,叫做传参

  B,具体的应用场景

    a,位置参数,按照从左到右的顺序定义参数

        位置形参:必选参数

        位置实参:按照位置给形参传值,要一一对应

    

def test(x,y): #x和y就是形式参数
print(x)
print(y)

test(1,2) #1和2就是实际参数,传参数的时候是把1传给x,2传给y,与形式参数一一对应
    
    b,关键字参数:按照key=value的形式定义的实参
      无需按照位置参数传参
      关键字参数必须在位置参数的后面
      同一个参数不能重复传值
      关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
#_*_coding:utf-8_*_
def person(name,age,**kw): #**表示关键字参数,即接收参数的时候,必须要指定参数的名和值
print('name:', name, 'age:', age, 'other:', kw)

person('Michael', 30) #默认传位置参数的值,打印结果为:('name:', 'Michael', 'age:', 30, 'other:', {})
person('Bob', 35, city='Beijing') #传一个关键字参数,结果为:name: Bob age: 35 other: {'city': 'Beijing'}
person('Adam', 45, gender='M', job='Engineer') #传两个关键字参数,结果为:name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
#以上看出来**后面的变量其实接收的是一个字典

    c,默认参数,在形式参数定义的时候就赋值
      可以传值,也可以不传值。如果传值就用传的值,否则就用默认值
      注意事项:
          1. 只在定义时赋值一次
2. 默认参数的定义应该在位置形参右面
          3. 默认参数通常应该定义成不可变类型
def power(x, n=2):
  s = 1
  while n > 0:
n = n - 1
  s = s * x
 return s

    d,可变参数

    可变参数指的是实参个数不固定,二形参要全部的接收实际参数。

    实际参数有位置参数和关键字参数这两种定义的参数,针对这两种可变长参数,形式参数有比较合理的接收参数来接收他们,分别是:*args(可变参数), **kwargs(可命名参数)

def test(x,y,*args): #位置可变参数,可以传0个或者任意的参数值,args以tuple形式接收参数
print(x,y)
print(args)
#test(1,2,3,4,5) #打印结果:(1, 2)、(3, 4, 5)
test(1,2,[3,4,5]) #打印结果:(1, 2)、([3, 4, 5],) 此时把[3,4,5]作为一个整体去传递
test(1,2,*[3,4,5]) #打印结果:(1, 2)、(3, 4, 5) 此时把[3,4,5]当成了单个参数去传递
def test001(x,y,z):
print(x,y,z)
test001(*[1,2,3])#打印结果:(1, 2, 3) ,此时把[1,2,3]分开传递
--------------**kwargs--------------------
关键字参数
def test(x,y,**kwargs):
print(x,y)
print(kwargs)
test(1,y=2,a=1,b=3) #输出结果:(1, 2)、{'a': 1, 'b': 3}
test(1,2,**{'a':1,'b':2}) #输出结果:(1, 2)、{'a': 1, 'b': 2}

def test01(x,y,z):
print(x,y,z)

test01(**{'x':1,'z':2,'y':3}) #这里的key一定要和形式参数中的参对应

    e,命名关键字参数,*后面定义的参数,必须要传值(默认值除外)
#如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义的函数如下:
def person(name, age, *, city, job):
print(name, age, city, job)
person('Jack', 24, city='Beijing', job='Engineer') #Jack 24 Beijing Engineer
#如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
def person(name, age, *args, city, job):
print(name, age, args, city, job)




  

    

原文地址:https://www.cnblogs.com/hally/p/8289672.html