• Python中的函数


    函数的格式

    def 函数名(形参):
        函数体
        return 返回值

    函数的返回值

    return

    • 结束函数体的执行,并且设定返回值

    • return后面不加入任何内容,默认返回None

    • 不加return默认也是返回None

    • return可是返回多个值,多个值中间用逗号分隔;

    示例

    def test1():
        for i in range(5):
            pass
        return 'aaa','bbb'
    print(test1())

    函数的参数

    传递参数(实参)

    • 是一个实实在在的参数,是占据内存地址的

    • 传递参数是在调用函数的过程当中进行的

    接收参数(形参)

    • 是一种形式意义的参数

    • 在定义时是不占据内存地址

    • 接收参数是在定义函数的过程中进行的

    • 形参可以没有、一个或者多个;多个形参之间用逗号分隔

    位置参数

    调用函数时根据函数定义的参数位置来传递参数

    def print_hello(name, sex):
        sex_dict = {1: u'先生', 2: u'女士'}
        print('hello %s %s, welcome to python world!' %(name, sex_dict.get(sex, u'先生')))
    
    print_hello('tanggu', 1)
    # 两个参数的顺序必须一一对应,且少一个参数都不可以

    关键字传参

    用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。

    def sum1(a, b):
        print(a, b)
        res = a + b
        return res
    
    # 正确示范
    ret = sum1(1, 2)
    ret = sum1(a=1, b=2)
    ret = sum1(b=1 , a=2)
    
    # 错误示范
    ret = sum1(1, a = 2)        # 因为a同时接收了两个参数 

    默认参数

    用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值

    def classmate(name,sex=''):
      print('%s : %s'%(name,sex))

    动态参数(*args)

    接收所有的位置参数

    def sum(*args):
        n = 0
        for i in args:
            n+=i
        return n
    
    print(sum(1,2,3,4))

    接收的是按照位置传参的值,组织成一个元组

    动态参数(**args)

    接收所有的关键字传参

    def func(**kwargs):
        print(kwargs)
    
    func(a = 1,b = 2,c =3)
    func(a = 1,b = 2)
    func(a = 1)

    接受的是按照关键字传参的值,组织成一个字典

    解包

    *和**,也可以在函数调用的时候使用,称之为解包裹(unpacking)

    1、*的解包方式

    def func(*args):#站在形参的角度上,给变量加上*,就是组合所有传来的值。
        print(args)
    
    func(1,2,3,4,5)
    l = [1,2,3,4,5]
    func(*l)  #站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散

    2、**的解包方式

    def func(**kwargs):
        print(kwargs)
    
    func(a=1,b=2)
    d = {'a':1,'b':2} #定义一个字典d
    func(**d)

    总结

    1. 站在传参的角度上,参数的传递顺序是:位置传参 >> 关键字传参
    2. 站在形参的角度上,参数的设定顺序是:位置参数 >> 动态参数(*args) >> 默认参数 >> 动态参数(**args)
  • 相关阅读:
    关于冲动 CQ
    关于在虚拟机上使用boost库 CQ
    新项目奖金分配方案 CQ
    关于桌子 CQ
    linux 添加本地yum源
    linux samba 服务器 简单配置
    linux 修改密码
    linux ntp 服务器和用户端
    linux 修改ip 地址
    Union 和 Union All 的区别
  • 原文地址:https://www.cnblogs.com/guge-94/p/10431526.html
Copyright © 2020-2023  润新知