zoukankan      html  css  js  c++  java
  • 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} 以对应的位置传输。否则会报错
    • 实参的位置,形式,顺序必须与形参一一对应,不能给一个变量传多个值

  • 相关阅读:
    centos设置系统时间
    ubufntu 11.10启动不了nautilus的问题解决
    centos中用crontab定时执行java程序
    试用ubuntu里画流程图,架构图工具
    内嵌在客户端的网页出现刷新问题
    lenovo e23在ubuntu下打开无线网卡的办法
    mysql workbench for ubuntu测试
    有关Java多态
    我是程序猿,一个新的开始......
    有关数组的几种排序
  • 原文地址:https://www.cnblogs.com/yanglingyao/p/11158388.html
Copyright © 2011-2022 走看看