D09 函数(一) 返回值,参数

1.什么是函数

函数就是具有某个具体功能的工具,提升开发效率,减少代码重复,提升程序的扩展性

2 函数的定义和调用

用def来定义函数,函数在定义的时候只检测函数体语法,不执行函数体代码

def my_len():                   # 定义函数,函数命名规则与变量命名规则一致
    s = 'abcdefg'
    i = 0
    for k in s:
        i += 1
        print(i)


my_len()                        # 调用函数

3 函数的返回值

返回值是指函数在完成一件事情后,最后返回给调用者结果。函数的返回值用return语句完成

def my_len(): # 定义函数,函数命名规则与变量命名规则一致

s = 'abcdefg'

i = 0

for k in s:

  i += 1

  return i # 将 i 的值返回给调用者

print(my_len()) # 调用函数

返回值有3种情况 :1.没有返回值 或者返回None

  • 不写return
  • 只写return,用于结束函数的继续
  • return None 不常用

         2. 返回一个值,可以返回任意类型,只要返回就可以接收,如果在一个程序中有多个return,那么只执行第一个

         3.返回多个值用多个变量接收,有多少返回值就用多少变量,一一对应,用一个变量接收,得到的是一个元组

def func():
    return {'k':'v'}
print(func())           #{ 'k': 'v'}

def func2():
    return 1,2,3  #return 1,2,3

r= func2()
print(r)                # (1, 2, 3)

4  参数

  参数分为实参与形参

  形参:在函数的定义阶段 括号内写的变量名 叫做该函数的形式参数

  实参:在函数的调用阶段 括号内实际传入的值 叫做实际参数

def add(a,b):        # a,b 为形参,形式参数
    return a+b

print(add(1,2))      # 1,2 实际参数,用来将值传到函数中

  形参与实参的关系:

    形参就相当于变量名,而实参就相当于变量的值
    函数调用传参的过程 就是给形参变量名赋值的过程

注意:形参和实参的绑定关系只在函数的调用阶段有效,函数运行结束关系自动解除,只在函数内部有效 函数外部无任何影响

  • 形参:有位置参数,默认参数,不定长参数

    • 位置参数:直接定义参数,并且必须传,有几个参数就需要传几个值
      def user_name(name, sex):
          print("%s : %s" % (name, sex))
      
      
      user_name('张三','男')         # 只能传递两个,多了会报错
    • 默认值参数:也称为关键字参数。在函数的定义阶段,形参就已经被赋值了,可以不传参数,若不传则使用默认值,如果传则使用传递的参数
      def user_name(name, sex='男'):
          print("%s : %s" % (name, sex))
      
      
      user_name('张三')     # 张三 : 男  没有传递,使用了默认的参数
      user_name('李四', sex='女')    # 李四 : 女   都传递,使用了传递的参数
    • 不定长参数:用*和**来接收多余的(溢出的)位置参数和关键字参数

        1.*args : 形参角度:参数名前面加* 常用参数名*args  ,接收的是按位置传的值,组成一个元组赋值给args

def func(*args):            # 定义动态参数
    print(args)


def add(*args):             # 定义动态参数
    sum = 0
    for i in args:
        sum += i
    return sum


func(1,2,3)                 # (1, 2, 3) 以元组的形式
print(add(1,2,3))           # 6
print(add(1,2,3,4))         # 10

            实参角度:会将列表或元组打散成位置实参一一传入

func(*[1,2,3,4,5,6])    # func(1,2,3,4,5,6)

 

        2.**kwargs: 形参角度:参数名前加两个* 常用参数名**kwargs ,接收的是按关键字传的值,组成一个字典,字典的key就是关键字的名字,字典的value就是关键字的名字指向的值

def func(**kwargs):            # 定义动态参数
    print(kwargs)


func(a=111,b=122,c=133)         # {'a': 111, 'b': 122, 'c': 133}  以字典的形式返回

              实参角度:能将字典打散成key = value的形式 按照关键字参数传递给函数

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


d = {'x':1,'y':2,'z':333}
func(**d)  # 相当于func(x=1,y=2,z=333)

 

定义顺序: 位置参数,*args ,默认参数,**kwargs

def func(a, *args, b=1, **kwargs):            # 定义动态参数
    print(a, args, b, kwargs)


func(1,2,3,4,b=6,c=1,d=2,e=3)         # 1 (2, 3, 4) 6 {'c': 1, 'd': 2, 'e': 3} 以对应的位置传输。否则会报错
  • 实参的位置,形式,顺序必须与形参一一对应,不能给一个变量传多个值

posted @ 2019-07-09 16:40  人生能有几回搏  阅读(283)  评论(0编辑  收藏  举报