• 【函数篇】初识函数,函数的定义、返回值、参数


    函数的定义用def:

    def func():  #func为函数名,定义方式与变量一样
        i = '你好,函数'
        return i  #返回值
    l = func()   #以函数名方式直接调用函数
    print(l)

    函数的返回值return:

      可以为一个值

      可以为多个值:接收时可以用一个变量接收,一个变量接收时返回为元组类型;可以用多个变量分别接收

    def func():
        i = '你好,函数','你好,艾克','你好,李'
        return i
    l = func()
    l1,l2,l3 = func()
    print(l)
    print(l1,l2,l3)

    输出:

    ('你好,函数', '你好,艾克', '你好,李')
    你好,函数 你好,艾克 你好,李

    函数的参数:

      形参(接收的参数):

        位置参数,*args,默认参数(关键字参数),**kwargs:

          总共四种,可以相互结合,结合使用时,位置参数必须放在第一位;可以为空;四种一起使用时,必须按照这个顺序;

          位置参数必须传,*args可以接收多个参数;默认参数可以不传,传送时必须在**kwargs前面;**kwargs可以接收多个关键字参数;

          *args返回为元组,**kwargs返回为字典

          位置参数,多个返回值以一个变量接收时,返回为元组,可以分别用多个变量对应接收,返回值为原始数据类型

          关键字参数(默认参数)传送可以打乱位置,多个返回值以一个变量接收时,返回为元组,可以分别用多个变量对应接收,返回值为原始数据类型。

      实参(传送的参数):按位置传;按关键字传;前两者混合使用时,传送的位置参数必须在前

    def func(a,b,c):
        return a,b,c
    l = func('你好,函数','你好,艾克','你好,李')
    l1,l2,l3 = func('你好,函数','你好,艾克','你好,李')
    print(l)
    print(l1,l2,l3)
    
    
    #打印:
    ('你好,函数', '你好,艾克', '你好,李')
    你好,函数 你好,艾克 你好,李
    位置参数,按位置传送,多个返回值以一个变量接收时,返回为元组,可以分别用多个变量对应接收,返回为原始数据类型
    def func(a='',b='',c=''):
        return a,b,c
    l = func(b='你好,函数',a='你好,艾克',c='你好,李')
    print(l)
    
    #打印:
    ('你好,艾克', '你好,函数', '你好,李')
    
    
    def func(d,a='',b='',c=''):
        return a,b,c,d
    l = func('aike',b='你好,函数',a='你好,艾克',c='你好,李',)
    print(l)
    
    #打印:
    ('你好,艾克', '你好,函数', '你好,李', 'aike')
    关键字(默认参数)传送可以打乱位置,多个返回值以一个变量接收时,返回为元组,可以分别用多个变量对应接收,返回为原始数据类型。但和位置传输混合使用时,位置参数必须在第一位,否则会报错
    def func(a,*args,b = 'ak'):
        return a,args,b
    l = func('你好,函数','你好,艾克','你好,李',b = 'aike')
    l1 = func(1,2,3,4)
    print(l)
    print(l1)
    
    #打印:
    ('你好,函数', ('你好,艾克', '你好,李'), 'aike')
    (1, (2, 3, 4), 'ak')
    *args,可以接收多个参数,不能以关键字传输,可以为任意数据类型,和位置参数混合使用时,位置参数必须在第一位,如果放在后边,传值时传不到,会报错 如果和默认参数混合使用时,默认参数必须放在*args后边,且默认参数进行传值时,同样需要在最后边
    def li(**kwargs):
        return kwargs
    l = li(s = '柚柚柚切克闹',d = '小李小李可爱无比',f = '是的')
    print(l)
    
    #打印:
    {'s': '柚柚柚切克闹', 'd': '小李小李可爱无比', 'f': '是的'}
    
    
    def func(a,*args,b = 'ak',**kwargs):
        return a,args,b,kwargs
    l = func('你好,函数','你好,艾克','你好,李',b = 'aike',s = '柚柚柚切克闹',d = '小李小李可爱无比')
    l1 = func(1,2,3,4)
    print(l)
    print(l1)
    
    #打印:
    ('你好,函数', ('你好,艾克', '你好,李'), 'aike', {'s': '柚柚柚切克闹', 'd': '小李小李可爱无比'})
    (1, (2, 3, 4), 'ak', {})
    **kwargs,可以接收多个关键字参数,返回为字典,不能按照位置传,混合使用时,排最后,否则传输顺序错乱,会报错

    上面的*args和**kwargs称为动态传参,是站在形参的角度。那么站在实参的角度如何进行动态传输:
    def func(*args):
        return args
    l = ['你好','函数','你好','艾克','你好','']
    print(func(*l))
    print(func(*['你好','函数','你好','艾克','你好','']))
    print(func(l))
    
    #打印:
    ('你好', '函数', '你好', '艾克', '你好', '')
    ('你好', '函数', '你好', '艾克', '你好', '')
    (['你好', '函数', '你好', '艾克', '你好', ''],)
    形参为*args时,在传参时给序列加一个*即可,如果不添加*,打印出来的是将它以一个整体当作元组的方式打印
    def func(**kwargs):
        return kwargs
    l = {'a':'你好函数','b':'你好艾克','c':'你好李'}
    l1 = {'a':'你好函数'}
    print(func(**l))
    print(func(**{'a':'你好函数','b':'你好艾克','c':'你好李'}))
    print(func(**l1))
    
    打印:
    {'a': '你好函数', 'b': '你好艾克', 'c': '你好李'}
    {'a': '你好函数', 'b': '你好艾克', 'c': '你好李'}
    {'a': '你好函数'}
    形参为**kwargs时,在传参时在字典前加两个*即可,即**。由于**kwargs的返回值是字典,所以在实参的角度进行动态传输必须以字典形式传入参数,否则会报错
  • 相关阅读:
    绑定姿势
    Mesh.CombineMeshes
    Mono vs IL2CPP
    lua keynote2
    lua keynote
    游戏编程模式KeyNote
    架构、性能和游戏
    Canvas
    AssetBundle Manager
    Loading AssetBundle Manifests
  • 原文地址:https://www.cnblogs.com/aizhinong/p/11347752.html
Copyright © 2020-2023  润新知