• Python 编程基础 | 第四章-函数 | 4.1、函数定义


    一、函数

    1、函数定义

    Python中定义函数使用def关键字,函数结构如下:

    def 函数名(参数):
        函数体
        return 语句
    
    • 1
    • 2
    • 3

    下面定义一个简单的函数,例如:

    def display(param1, param2):
        print('参数1:' + param1)
        print('参数2:' + param2)
    
    display("hello", "world")
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、传递实参

    函数定义中可能包含多个形参,因此、函数调用也需要传递多个实参。向函数传递实参的方式有很多种,可以使用位置实参,这要求实参的顺序与形参的顺序相同;也可以使用关键字实参,其中每个实参都由变量名和值组成;还可以使用列表和字典

    2.1、位置实参

    函数调用时,必须将函数调用中每个实参都关联到函数定义中的一个形参。最简单的关联方式是基于实参的顺序,这种关联方式称为位置实参,例如:

    def display(param1, param2):
        print('参数1:' + param1)
        print('参数2:' + param2)
    
    display("hello", "world")
    display("world", "hello")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    上面两个函数调用,因为传参的顺序不同,有不同的输出结果

    2.2、关键字实参

    关键字实参是传递给函数的名称对,例如:

    def display(param1, param2):
        print(param1 + " " + param2)
    
    display(param1="hello", param2="world")  # 输出结果:hello world
    display(param2="world", param1="hello")  # 输出结果:hello world
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意:使用关键字实参时,务必准确指定函数定义中的形参名

    3、可更改(mutable)与不可更改(immutable)对象

    strings、tuples 和 numbers 是不可更改的对象,而 list、dict 等则是可以修改的对象

    变量赋值

    • 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a
    • 可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了

    参数传递

    • 不可变类型:类似 c++ 的值传递
    • 可变类型:类似 c++ 的引用传递

    注意python中一切都是对象,严格意义不能说值传递还是引用传递,应该说传不可变对象和传可变对象。

    下面是一个示例:

    def param_test(obj):
        obj += obj
        print('形参值为:', obj)
     
    print("*******值传递*****")
    a = 'hello'
    print('a的值为:', a)
    param_test(a)
    print('实参的值为:', a)
     
    print("*******引用传递*****")
    b = [1, 2, 3]
    print('b的值为:', b)
    param_test(b)
    print('实参的值为:', b)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    输出结果:

    *******值传递*****
    a的值为: hello
    形参值为: hellohello
    实参的值为: hello
    *******引用传递*****
    b的值为: [1, 2, 3]
    形参值为: [1, 2, 3, 1, 2, 3]
    实参的值为: [1, 2, 3, 1, 2, 3]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4、默认参数值

    编写函数时,可以给函数形参指定默认值,例如:

    def display(param1, param2="world"):
        print(param1 + " " + param2)
    
    display(param1="hello")  # 输出结果:hello world
    
    • 1
    • 2
    • 3
    • 4

    注意:使用默认值时,必须先在形参列表中列出没有默认值的形参,再列出有默认值的形参

    5、返回值

    函数可以不返回值,也可以返回一个或一组值,不带参数值的return语句返回None。下面定义一个函数,返回值是字典,例如:

    def build_person(first_name, last_name):
        person = {"first":first_name, "last":last_name}
        return person
    
    musician = build_person("jimi", "hendirx")
    print(musician)  # 输出结果:{'first': 'jimi', 'last': 'hendirx'}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    租房小程序自动定位城市
    【2015NOIP普及组】T3:求和 试题解析
    C#/VB.NET 将PDF转为PDF/X-1a:2001
    行为型模式-模板方法模式
    什么是RPA?RPA、智能自动化、人工智能、超自动化!你能区分吗?
    经纬高坐标转东北天坐标
    基于实例的学习方法
    基于springboot+vue的重庆旅游网(前后端分离)
    springboot烯烃厂压力管道管理系统java ssm
    Yii2使用composer安装MongoDB扩展
  • 原文地址:https://blog.csdn.net/cloud323/article/details/133590287