zoukankan      html  css  js  c++  java
  • python中的函数

    一. 函数的定义

    1. 函数的定义:

    1) 具备某一功能的代码段

    2) 可以重复使用

    2. 函数定义语法:

    def 函数名称():
        函数体(实现功能的代码段)
    
    
    注意:函数体的缩进

    二. 函数的调用

    1. 没有参数:函数名称()

    实例1:

    #定义函数
    def hello():
        print("Hello World!")
    
    #调用无参函数
    hello()
    
    
    运行结果:
    Hello World!

    2. 有参数:函数名称(参数值)

    实例2:

    #定义函数
    def welcome(name):
        print("Welcome", name)
    
    #调用有参函数
    welcome("student")
    
    
    运行结果:
    Welcome student

    三. 函数的参数

    1. 形参

    形参:形式参数。定义函数时,使用形参,相当于占位符。目的是用来接收调用该函数时传递的参数,告诉使用者,需要提供的数据有哪些

    2. 实参

    实参:调用函数时,是传入的参数,必须是确定的值

    四. 函数的参数类型

    1. 位置参数:按照形参顺序,放入实参

    #定义函数
    def print_info(name, age):
        print("名字: ", name)
        print("年龄: ", age)
    
    #调用print_info函数
    print_info("Jack", 30)
    
    
    运行结果:
    名字:  Jack
    年龄:  30

    2. 关键字参数(指定参数):不用按形参顺序放入实参,传参时要求:形参名称=实参值

    #定义函数
    def print_info(name, age):
        print("名字: ", name)
        print("年龄: ", age)
    
    #调用print_info函数
    print_info(age=30, name="Jack")
    
    
    运行结果:
    名字:  Jack
    年龄:  30

    3. 默认参数:在定义函数时,给形参一个默认值,需要放在形参的最后,当调用函数时,默认参数的值可传可不传,不传时,使用默认值

    #定义函数
    def print_info(name, age=28):
        print("名字: ", name)
        print("年龄: ", age)
    
    #调用print_info函数
    print_info("Jack")
    
    print_info("Jack", 30)
    
    
    运行结果:
    名字:  Jack
    年龄:  28
    
    名字:  Jack
    年龄:  30

    必须注意:默认参数必须指向不可变对象:整数、字符串、元组

    #定义一个默认参数指向可变对象列表的函数
    def add_end(L=[]):
        L.append('END')
        print(L)
    
    #调用add_end函数
    add_end()
    
    add_end()
    
    add_end()
    
    
    运行结果:
    
    ['END']
    
    ['END', 'END']
    
    ['END', 'END', 'END']

    这是因为python函数在定义的时候,默认参数L的值就被计算出来了,为[]。默认参数L是一个变量,它指向对象[],每次调用该函数时,如果改变了L的内容,下次再调用时,默认参数的内容就变了,不再是函数定义时的[]了

    4. 可变参数(动态参数):在定义函数时,不限定参数的个数,可用*args和**kwargs表示

    *args 为元组,比如print()函数的参数就是*args

    **kwargs为字典,比如requests库的request()方法的参数就是**kwargs

    *args将参数打包成tuple给函数体使用

    #定义函数
    def print_info(name, age, *args):
        print(name)
        print(age)
        print(args)
        for item in args:
            print(item)
    
    #调用print_info函数
    print_info("Jack", 30, "male", "running")
    
    
    运行结果:
    Jack
    30
    ('male', 'running')
    male
    running

    **kwargs将参数打包成dict给函数体使用,调用时实参是key=value的形式

    #定义函数
    def print_info(name, age, **kwargs):
        print(name)
        print(age)
        print(kwargs)
        for key, value in kwargs.items():
            print(key + ":" + value)
    
    #调用print_info函数
    print_info("Jack", 30, sex="male", hobby="reading")
    
    
    运行结果:
    Jack
    30
    {'hobby': 'reading', 'sex': 'male'}
    hobby:reading
    sex:male

    5. 参数组合:当多种参数组合使用时,参数定义的顺序为:位置参数(关键字参数)、默认参数、可变参数

    #定义函数
    def print_info(name, age, sex="male", **kwargs):
        print("name:" + name)
        print("age:" + str(age))
        print("sex:" + sex)
        for key, value in kwargs.items():
            print(key + ":" + value)
    
    #调用print_info函数
    print_info("Jack", 30, hobby="reading", city="shenzhen")
    
    print_info(sex="female", age=20, name="Lucy",hobby="reading", city="shenzhen")
    
    
    运行结果:
    name:Jack
    age:30
    sex:male
    hobby:reading
    city:shenzhen
    
    
    name:Lucy
    age:20
    sex:female
    hobby:reading
    city:shenzhen

    五. 匿名函数

    1. python使用lambda来创建匿名函数

    所谓匿名,也就是没有函数名,不再使用def 函数名 这样标准的形式定义一个函数

    2. lambda与标准函数的区别

    1) lambda只是一个表达式,而不是一个语句

    作为一个表达式,lambda可以返回一个函数,可以赋值给变量,而不像def那样在头部将函数赋值给变量名(函数名)

    2) lambda的主体是一个表达式,而不是一个代码块

    因此,lambda通常要比def功能小,仅能在lambda主体中封装有限的逻辑进去,连if这样的语句都不能够使用。这是有意设计的——它限制了程序的嵌套:lambda是一个为编写简单的函数而设计的,def用来处理更大的任务

    3) lambda函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数

    3. lambda函数的语法

    lambda arg1, arg2, ... argN: expression

    实例1:可以将lambda函数对象赋值给变量 f 

    #定义lambda函数,将其赋值给变量f
    f = lambda x, y, z: x + y + z
    #通过变量f来调用函数,并打印结果
    print(f(2, 3, 4))
    
    
    运行结果:
    9

    实例2:在lambda函数中也可以使用默认参数

    #定义lambda函数,使用默认参数
    x = lambda a = "fee", b = "fie", c = "foe": a + b + c
    #通过变量x来调用函数,并打印结果
    print(x())
    
    
    运行结果:
    feefiefoe

    六. 返回值

    1. 语法:

    return 参数(可选,没有参数,则返回None)

    2. 注意:

    1) 返回值可以是任何类型的变量

    2) 返回值也可以是表达式

    3) 可以返回一个/多个变量,可以用逗号隔开或用元组

    def func():       
         return 返回值1,返回值2
    
    接收值1,接收值2 = func()
    print(接收值1,接收值2)

    4) 函数体执行过程中遇到return,意味着函数调用结束

    5) 函数中没有return关键字,默认返回None

    6) 使用较多,返回的值可以用来传递给其他函数

     

    参考文章

    http://www.runoob.com/python3/python3-function.html

    https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000

  • 相关阅读:
    CODING x 百果园 _ 水果零售龙头迈出 DevOps 体系建设第一步
    Nocalhost 亮相 CD Foundation 国内首届 Meetup,Keith Chan 将出席致辞
    做云原生时代标准化工具,实现高效云上研发工作流
    打造数字化软件工厂 —— 一站式 DevOps 平台全景解读
    WePack —— 助力企业渐进式 DevOps 转型
    CODING Compass —— 打造行云流水般的软件工厂
    Nocalhost —— 让云原生开发回归原始而又简单
    CODING 代码资产安全系列之 —— 构建全链路安全能力,守护代码资产安全
    Nocalhost:云原生开发新体验
    使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller
  • 原文地址:https://www.cnblogs.com/my_captain/p/9230396.html
Copyright © 2011-2022 走看看