第22章 Python3 函数教程

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。仁兄您已经知道Python提供了许多内建函数,比如print()。但仁兄您也可以自己创建函数,这被叫做用户自定义函数。


定义一个函数

仁兄您可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号 : 起始,并且缩进。
  • return [表达式] 结束函数,选择性地return 一个值给调用方,不带表达式的 return 相当于return None。

语法

Python 定义函数使用 def 关键字,一般格式如下:


    def 函数名(参数列表):
        函数体

默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。

实例

让咱们使用函数来输出"Hello World!":


    #!/usr/bin/python3
    
    def hello() :
    
        print("Hello World!")
    
    hello()

更复杂点的应用,函数中带上参数变量:


    实例(Python 3.0+) 
     比较两个数,并return 较大的数:
     
    #!/usr/bin/python3
     
    def max(a, b):
        if a > b:
            return a
        else:
            return b
     
    a = 4
    b = 5
    print(max(a, b))

以上实例输出结果请在输出结果查看


    5


    实例(Python 3.0+) 
     计算面积函数:
     
    #!/usr/bin/python3
     
    # 计算面积函数
    def area(width, height):
        return width * height
     
    def print_welcome(name):
        print("Welcome", name)
     
    print_welcome("phlcsdn2023")
    w = 4
    h = 5
    print("width =", w, " height =", h, " area =", area(w, h))

以上实例输出结果请在输出结果查看


    Welcome phlcsdn2023
    width = 4  height = 5  area = 20


函数调用

定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,仁兄您可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。

如下实例调用了 printme() 函数:


    实例(Python 3.0+) 
     
    #!/usr/bin/python3
     
    # 定义函数
    def printme( str ):
       # 打印任何传入的字符串
       print (str)
       return
     
    # 调用函数
    printme("我要调用用户自定义函数!")
    printme("再次调用同一函数")

以上实例输出结果请在输出结果查看


    我要调用用户自定义函数!
    再次调用同一函数


参数传递

在 python 中,类型属于对象,对象有不同类型的区分,变量是没有类型的:


    a=[1,2,3]
    
    a="phlcsdn2023"

以上代码中,[1,2,3] 是 List 类型,“phlcsdn2023” 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。

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

在 python 中,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没有动,只是其内部的一部分值被修改了。

python 函数的参数传递:

  • **不可变类型:**类似 C++ 的值传递,如整数、字符串、元组。如 fun(a),传递的只是 a 的值,没有影响 a 对象本身。如果在 fun(a) 内部修改 a 的值,则是新生成一个 a 的对象。
  • **可变类型:**类似 C++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后 fun 外部的 la 也会受影响

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

python 传不可变对象实例

通过 id() 函数来查看内存地址变化:


    实例(Python 3.0+) 
     
    def change(a):
        print(id(a))   # 指向的是同一个对象
        a=10
        print(id(a))   # 一个新对象
     
    a=1
    print(id(a))
    change(a)

以上实例输出结果请在输出结果查看


    4379369136
    4379369136
    4379369424

可以看见在调用函数前后,形参和实参指向的是同一个对象(对象 id 相同),在函数内部修改形参后,形参指向的是不同的 id。

传可变对象实例

可变对象在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。例如:


    实例(Python 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你得不到的念想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值