菜鸟教程《Python 3 教程》笔记(14):函数

这篇具有很好参考价值的文章主要介绍了菜鸟教程《Python 3 教程》笔记(14):函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

笔记带有个人侧重点,不追求面面俱到。

14 函数

出处: 菜鸟教程 - Python3 函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。

14.1 参数传递

在 python 中,类型属于对象,对象有不同类型的区分,变量是没有类型的。她仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。

14.1.1 可更改(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 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

14.1.2 python 传不可变对象实例

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

4379369136
4379369136
4379369424

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

14.2 参数

以下是调用函数时可使用的正式参数类型:

  • 必需参数
  • 关键字参数
  • 默认参数
  • 不定长参数

14.2.1 必需参数

必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样,不然会出现语法错误。

14.2.2 关键字参数

使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

14.2.3 默认参数

调用函数时,如果没有传递参数,则会使用默认参数。默认参数必须放在最后,否则会报错。

14.2.4 不定长参数

语法 1:

def functionname([formal_args,] *var_args_tuple ):
   "函数_文档字符串"
   function_suite
   return [expression]

加了星号 * 的参数会以元组的形式导入,存放所有未命名的变量参数。

# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vartuple)
 
# 调用printinfo 函数
printinfo(10)
printinfo(70, 60, 50)

# 输出: 
10
70
(60, 50)

语法 2:

def functionname([formal_args,] **var_args_dict ):
   "函数_文档字符串"
   function_suite
   return [expression]

加了两个星号 ** 的参数会以字典的形式导入。

#!/usr/bin/python3
  
# 可写函数说明
def printinfo( arg1, **vardict ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vardict)
 
# 调用printinfo 函数
printinfo(1, a=2,b=3)

# 输出: 
1
{'a': 2, 'b': 3}

语法 3:

声明函数时,参数中星号 * 可以单独出现。如果单独出现星号 *,则星号 * 后的参数必须用关键字传入。

>>> def f(a,b,*,c):
...     return a+b+c
... 
>>> f(1,2,3)   # 报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() takes 2 positional arguments but 3 were given
>>> f(1,2,c=3) # 正常
6

14.3 匿名函数

Python 使用 lambda 来创建匿名函数。

  • lambda 的主体是一个表达式,而不是一个代码块;
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数;
  • 虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++ 的内联函数,内联函数的目的是调用小函数时不占用栈内存从而减少函数调用的开销,提高代码的执行速度。

语法:

lambda [arg1 [,arg2,.....argn]]:expression

可以将匿名函数封装在一个函数内,这样可以使用同样的代码来创建多个匿名函数:

def myfunc(n):
  return lambda a : a * n
 
mydoubler = myfunc(2)
mytripler = myfunc(3)
 
print(mydoubler(11))  # 22
print(mytripler(11))  # 33

lambda 匿名函数也是可以使用"关键字参数"进行参数传递,也可以设定默认值。

14.4 强制位置参数

Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。

在以下的例子中,形参 a 和 b 必须使用指定位置参数,c 或 d 可以是位置形参或关键字形参,而 e 和 f 要求为关键字形参:文章来源地址https://www.toymoban.com/news/detail-690422.html

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)

# 正确的调用
f(10, 20, 30, d=40, e=50, f=60)
# 错误的调用
f(10, b=20, c=30, d=40, e=50, f=60)   # b 不能使用关键字参数的形式
f(10, 20, 30, 40, 50, f=60)           # e 必须使用关键字参数的形式

到了这里,关于菜鸟教程《Python 3 教程》笔记(14):函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 菜鸟教程《Python 3 教程》笔记(19):错误与异常

    笔记带有个人侧重点,不追求面面俱到。 出处: 菜鸟教程 - Python3 错误和异常 Python 有两种错误很容易辨认: 语法错误 和 异常 。 assert (断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待

    2024年02月09日
    浏览(42)
  • 菜鸟教程《Python 3 教程》笔记(15):数据结构

    笔记带有个人侧重点,不追求面面俱到。 出处: 菜鸟教程 - Python3 数据结构 在列表的最后添加或者弹出元素速度快,然而在列表里插入或者从头部弹出速度却不快(因为所有其他的元素都得一个一个地移动)。 遍历字典: 遍历列表: 遍历多个序列: 反向遍历:

    2024年02月10日
    浏览(42)
  • Python3 函数与数据结构 | 菜鸟教程(十一)

    目录 一、Python3 函数 (一)定义一个函数 1、你可以定义一个由自己想要功能的函数,以下是简单的规则:  2、语法 3、实例 ①让我们使用函数来输出\\\"Hello World!\\\": ②更复杂点的应用,函数中带上参数变量: Ⅰ实例:比较两个数,并返回较大的数: Ⅱ实例:计算面积函数: (

    2024年02月11日
    浏览(42)
  • 菜鸟教程《Python 3 教程》笔记 EX 01:命令行参数

    笔记带有个人侧重点,不追求面面俱到。 出处: 菜鸟教程 - Python3 命令行参数 Python 中可以所用 sys 的 sys.argv 来获取命令行参数: 注意: sys.argv[0] 为脚本名。 实例: test.py 文件: 运行结果: getopt 模块是专门处理命令行参数的模块,用于获取命令行选项和参数。该模块提供

    2024年02月10日
    浏览(36)
  • Python 3 | 菜鸟教程 (一)

    目录 一、Python3 简介 二、Python 发展历史 三、Python 特点 (一)易于学习 (二)易于阅读 (三)易于维护 (四)一个广泛的标准库 (五)互动模式 (六)可移植 (七)可扩展 (八)数据库 (九)GUI编程 (十)可嵌入 四、Python 应用 五、 Python3 环境搭建 六、Python3 下载 七

    2024年02月09日
    浏览(44)
  • Python教程_编程入门自学教程_菜鸟教程-免费教程分享

    Python - 教程 Python - 概述 Python - 环境设置 Python - 基本语法 Python - 变量类型 Python - 基本运算符 Python - 决策 Python - 循环 Python - 数字 Python - 字符串 Python - 列表 Python - 元组 Python - 字典 Python - 日期和时间 Python - 功能 Python - 模块 Python - 文件I / O. Python - 异常处理 Python - 面向对象

    2024年02月02日
    浏览(41)
  • python菜鸟教程-矩阵对应位置相加

    两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵: X = [[12,7,3],     [4 ,5,6],     [7 ,8,9]] Y = [[5,8,1],     [6,7,3],     [4,5,9]] 程序分析:创建一个新的 3 行 3 列的矩阵,使用 for 迭代并取出 X 和 Y 矩阵中对应位置的值,相加后放到新矩阵的对应位置中。

    2024年04月23日
    浏览(52)
  • 使用Python pymysql连接Mysql数据库-菜鸟教程

    1、安装pymysql模块 pip install pymysql 2、启动Mysql数据库服务 net start mysql80  3、连接数据库 运行结果如下  4、创建数据库表 执行成功后,在本地登录mysql数据库进行查看验证   5、数据库插入操作  执行程序后在本地查看验证  6、数据库查询操作 Python查询Mysql使用 fetchone() 方法

    2024年02月04日
    浏览(46)
  • Dax函数教程_编程入门自学教程_菜鸟教程-免费教程分享

    DAX函数教程 DAX函数- 简介 DAX参数命名约定 DAX函数 - 描述结构 DAX函数 - 聚合 DAX函数 - 过滤器 DAX函数 - 时间智能 DAX函数 - 日期和时间 DAX函数- 信息 DAX函数- 逻辑 数学与数学三角函数 DAX函数 - 父和子 DAX函数 - 统计 DAX函数 - 文本 DAX函数- 其他

    2024年02月13日
    浏览(32)
  • 菜鸟教程笔记:TypeScript

    1.在ts文件中:Runoob.ts 2.通过tsc命令编译 3.得到js代码:Runoob.js 4.使用node来执行js代码 我们可以同时编译多个ts文件: ts会忽略 空格 , 制表符 , 换行符 理解:对现实世界理解和抽象的方法 面向对象有两个概念:对象和类 对象:类的一个实例,有状态和行为。 类:是一个模板

    2024年02月07日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包