python里函数定义的理解
Python 函数 理解 定义
2023-09-14 09:10:35 时间
在python里函数定义,与C语言或Java语言的函数定义是不一样的,C语言是定义了一个入口地址,但python语言是定义了一个对象,是一个函数对象。因为函数定义语句是一个执行语句,当python解释器遇到def开头时,就会解析执行def定义的这一行命令,而不是等到调用时才执行,更不像C语言里当调用时才会执行函数定义。python它会在函数定义时就开始把函数名称、局部命名空间,局部命名空间就包含了参数和默认参数,把这些都解释了并生成一个函数对象,以备后面调用。但在这时,并没有执行函数体的,函数体是当调用时才执行。
[decorators] “def” funcname “(” [parameter_list] “)” [“->” expression] “:” suite
意思就是说这段:
[decorators] “def” funcname “(” [parameter_list] “)” [“->” expression]
是在定义阶段是执行的,而这段:
suite
是调用阶段执行。
但在C语言里,不会存在这种情况,它们都是一起在调用时执行的。这样我们就得注意手册里这样一句话了:
Default parameter values are evaluated from left to right when the function definition is executed.
默认参数都是从左到右依次计算,并且是在函数定义时计算的。
五子棋游戏开发
http://edu.csdn.net/course/detail/5487
[decorators] “def” funcname “(” [parameter_list] “)” [“->” expression] “:” suite
意思就是说这段:
[decorators] “def” funcname “(” [parameter_list] “)” [“->” expression]
是在定义阶段是执行的,而这段:
suite
是调用阶段执行。
但在C语言里,不会存在这种情况,它们都是一起在调用时执行的。这样我们就得注意手册里这样一句话了:
Default parameter values are evaluated from left to right when the function definition is executed.
默认参数都是从左到右依次计算,并且是在函数定义时计算的。
这就意味着函数的默认参数只会被执行一次,在调用时不再会计算默认参数,定义时预先计算好的值会在后面每一次调用时都会被使用。特别默认参数是列表或字典对象时,当在函数体里修改这些对象,默认参数只是一个列表,它会被多次修改,往往还不是设计人员所需要的结果。
为了加深理解,研究一下下面的例子:
#
def extendList(val, lst = []):
lst.append(val)
return lst
list1 = extendList(5)
list2 = extendList(123, [])
list3 = extendList('abc')
print(list1, list2, list3)
结果输出怎么样:
[5, 'abc'] [123] [5, 'abc']
你会比较奇怪为什么list1和list3返回一样的内容,其实就是函数定义理解不当造成的。
要想每一次调用使用不同列表,可以修改为如下:
#
def extendList(val, lst = None):
if lst == None:
lst = []
lst.append(val)
return lst
list1 = extendList(5)
list2 = extendList(123, [])
list3 = extendList('abc')
print(list1, list2, list3)
输出结果如下:
[5] [123] ['abc']
Python游戏开发入门
你也能动手修改C编译器
纸牌游戏开发
http://edu.csdn.net/course/detail/5538
五子棋游戏开发
http://edu.csdn.net/course/detail/5487
RPG游戏从入门到精通
http://edu.csdn.net/course/detail/5246
WiX安装工具的使用
http://edu.csdn.net/course/detail/5207
俄罗斯方块游戏开发
http://edu.csdn.net/course/detail/5110
boost库入门基础
http://edu.csdn.net/course/detail/5029
Arduino入门基础
http://edu.csdn.net/course/detail/4931
Unity5.x游戏基础入门
http://edu.csdn.net/course/detail/4810
TensorFlow API攻略
http://edu.csdn.net/course/detail/4495
TensorFlow入门基本教程
http://edu.csdn.net/course/detail/4369
C++标准模板库从入门到精通
http://edu.csdn.net/course/detail/3324
跟老菜鸟学C++
http://edu.csdn.net/course/detail/2901
跟老菜鸟学python
http://edu.csdn.net/course/detail/2592
在VC2015里学会使用tinyxml库
http://edu.csdn.net/course/detail/2590
在Windows下SVN的版本管理与实战
http://edu.csdn.net/course/detail/2579
Visual Studio 2015开发C++程序的基本使用
http://edu.csdn.net/course/detail/2570
在VC2015里使用protobuf协议
http://edu.csdn.net/course/detail/2582
在VC2015里学会使用MySQL数据库
http://edu.csdn.net/course/detail/2672
相关文章
- 20 本优秀的 Python 电子书
- [python] 使用Jieba工具中文分词及文本聚类概念
- Python函数
- 深入理解python中函数传递参数是值传递还是引用传递
- python 函数
- python非对称加密模块rsa
- 【python cookbook】【字符串与文本】12.文本过滤和清理
- 【Python 12】汇率兑换5.0(Lambda函数)
- 深入理解python中函数传递参数是值传递还是引用传递
- 深入理解python中函数传递参数是值传递还是引用传递
- 【学习总结】Python-3-字符串函数split()的妙用
- python-飞机大战
- Python tkinter库之Canvas 根据函数解析式或参数方程画出图像
- Python Django 可变参数代码示例
- 华为OD机试 - 猜字谜(Java & JS & Python)
- Python语言学习:Python语言学习之正则表达式常用函数之re.search方法【输出仅一个匹配结果(内容+位置)】、re.findall方法【输出所有匹配结果(内容)】案例集合之详细攻略
- Python编程语言学习:列表与字典互转的几大方法集锦、从列表中按顺序循环抽走一个元素输出剩余元素之详细攻略
- twisted:基于python的twisted框架编写一个客户端和服务端的对话聊天空间
- Python之sklearn:LabelEncoder函数简介(编码与编码还原)、使用方法、具体案例(在数据缺失和test数据内存在新值(train数据未出现过)环境下的数据LE化)之详细攻略
- Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能
- Python编程语言学习:在根目录的py文件内调用某叶目录文件内的包/库或者函数(常用在GUI编程)之详细攻略
- 100天精通Python(数据分析篇)——第66天:Pandas透视表基础+实战案例(pivot_table函数)
- 四阶Runge-Kutta(Python实现)
- Python 没有函数重载?如何用装饰器实现函数重载?
- 如何写好 Python 的 Lambda 函数?
- 深入理解 Python 的这 5个硬核函数
- 太香!又发现了5个让你相见恨晚的Python 库!
- 60集Python入门视频PPT整理 | Python编程基础及编程风格
- Python标准库:内置函数bytearray([source[, encoding[, errors]]])
- Python标准库:内置函数issubclass(class, classinfo)
- Python函数中常见的参数类型应用及误区
- Python学习笔记(九)—— 函数
- python基础===通过菲波那契数列,理解函数
- python获取文件大小
- Spark实战(三)本地连接远程Spark(Python环境)
- 通过Python的gtts库将文字转为音频
- Python 爬虫
- python内置函数__init__及__str__的区别