>>> from env_helper import info; info()
页面更新时间: 2024-01-14 09:35:32
运行环境:
Linux发行版本: Debian GNU/Linux 12 (bookworm)
操作系统内核: Linux-6.1.0-16-amd64-x86_64-with-glibc2.36
Python版本: 3.11.2
3.1. 函数¶
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
从前面的章节中,你已经熟悉了 print()
、 input()
和 len()
函数。 Python 提供了这样一些内建函数,但你也可以编写自己的函数。
“函数”就像一个程序内的小程序。
为了更好地理解函数的工作原理,让我们来创建一个函数 :
>>> def hello():
>>> print('-' * 4)
>>> print('Howdy!')
>>> print('Howdy!!!')
>>> print('Hello there.')
>>> print('\n')
第一行是 def
语句 ,它定义了一个名为 hello()
的函数。 def
语句之后的代码块是函数体 。
这段代码在函数调用时执行,而不是在函数第一次定义时执行。
>>> hello()
>>> hello()
>>> hello()
----
Howdy!
Howdy!!!
Hello there.
----
Howdy!
Howdy!!!
Hello there.
----
Howdy!
Howdy!!!
Hello there.
函数之后的 heIlo()
语句行是函数调用。
在代码中,函数调用就是函数名后跟上括号,也许在括号之间有一些参数。
如果程序执行遇到这些调用,就会跳到函数的第一行,开始执行那里的代码。
如果执行到达函数的末尾,就回到调用函数的那行,继续像以前一样向下执行代码。
因为这个程序调用了3次 hello()
函数,所以函数中的代码就执行了3次。
3.1.1. 定义一个函数¶
你可以定义一个由自己想要功能的函数,以下是简单的规则:
函数代码块以
def
关键词开头,后接函数标识符名称和圆括号()
。任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式]
结束函数,选择性地返回一个值给调用方。不带表达式的return
相当于返回None
。
函数的一个主要目的就是将需要多次执行的代码放在一起。 如果没有函数定义,你可能每次都需要复制粘贴这些代码, 程序看起来可能会像这样:
>>> print('Howdy!')
>>> print('Howdy!!!')
>>> print('Hello there.')
>>> print('Howdy!')
>>> print('Howdy!!!')
>>> print('Hello there.')
>>> print('Howdy!')
>>> print('Howdy!!!')
>>> print('Hello there.')
Howdy!
Howdy!!!
Hello there.
Howdy!
Howdy!!!
Hello there.
Howdy!
Howdy!!!
Hello there.
一般来说,我们总是希望避免复制代码, 因为如果一旦决定要更新代码(比如说,发现了一个缺陷要修复), 就必须记住要修改所有复制的代码。
随着你获得更多的编程经验, 常常会发现自己在为代码“消除重复”, 即去除一些重复或复制的代码。 消除重复能够使程序更短、更易读、更容易更新。
3.1.2. 语句和参数¶
如果调用 print()
或 len()
函数,你会传入一些值,
放在括号之间,在这里称为“参数”。也可以自己定义接收参数的函数。
>>> def hello(name):
>>> print('Hello '+ name)
如果运行这个程序,输出看起来像这样:
>>> hello('Alice')
>>> hello('Bob')
Hello Alice
Hello Bob
在这个程序的 hello()
函数定义中, 有一个名为 name
的变量 。
“变元”是一个变量,当函数被调用时, 参数就存放在其中。 hello()
函数第一次被调用时, 使用的参数是 'Alice'
。程序执行进入该函数,
变量 name
自动设为 'Alice'
, 就是被 print()
语句打印出的内容。
关于变元有一件特殊的事情值得注意:保存在变元中的值,
在函数返回后就丢失了。例如前面的程序, 如果你在 hello('Bob')
之后添加 print(name)
, 程序会报 NameError
,因为没有名为
name
的变量。 在函数调用
hello(Bob)
返回后,这个变量被销毁了,所以 print(name)
会引用一个不存在的变量 name
。
这类似于程序结束时,程序中的变量会丢弃。 在本章稍后,当我们探讨函数的局部作用域时,我会进一步分析为什么会这样。
3.1.3. 函数调用¶
定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。
>>> def printme( str ):
>>> '''
>>> 打印任何传入的字符串
>>> '''
>>> print (str)
>>> return
如下实例调用了 printme()
函数:
>>> printme("我要调用用户自定义函数!")
我要调用用户自定义函数!
>>> printme("再次调用同一函数")
再次调用同一函数