前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >开源图书《Python完全自学教程》7.1.1基本格式

开源图书《Python完全自学教程》7.1.1基本格式

作者头像
老齐
发布2022-07-06 15:55:27
发布2022-07-06 15:55:27
23500
代码可运行
举报
文章被收录于专栏:老齐教室老齐教室
运行总次数:0
代码可运行

第7章 函数

函数是编程中应用非常多的一类对象(请注意这里的宾语“对象”,在本章7.3节会专门探讨)。此前我们已经多次使用过 Python 的内置函数,现在要自己亲自动手编写更有个性的函数。这是一件很有意思的事情,也伴随着一定的挑战。相信已经自学至此的读者能够攻克本章所遇到的难关。

7.1 定义函数

不论 Python 的内置函数还是模块中提供的函数(比如 math.pow() ),都是“别人”创造的,我们施行“拿来主义”,只是应用。但是,当“别人”定义的函数不能满足自己的需要时,就要“自力更生”,自己定义函数了。

7.1.1 基本格式

如图7-1-1所示,是自定义函数的基本格式。

图7-1-1 定义函数

按照此格式,写一个非常简单的函数(在 Python 交互模式中):

代码语言:javascript
代码运行次数:0
运行
复制
>>> def my_fun():       # (1)
...     print("this is a function")
...
>>> my_fun()
this is a function

注释(1)定义了一个名为 my_fun 的函数,此函数的功能非常简单,就是打印一行字符串。接下来的 my_fun() 是执行或者调用此函数,在 Python 交互模式中就显示了打印的结果。

有了初步体验之后,再对图7-1-1所示的定义函数的格式给予说明:

  • def 是定义函数的关键词(英文 define 的前三个字母)。当 Python 解释器看到了这个关键词,就知道此处开始定义函数了。
  • function_name 是函数的名称。按照 PEP 的要求,函数名称的命名方式与变量的命名方式和格式一样(参阅第2章2.3.2节)。
  • 函数名称之后紧跟着 ([parameters]) ,函数名称和圆括号之间不能有空格,圆括号也不能省略。圆括号里面是这个函数的参数列表,如果此函数不需要参数,则可为空。例如注释(1)中定义的函数,就只有圆括号,其内部没有参数。
  • 圆括号后面是英文状态下的冒号,表示此逻辑行结束,下面即将开始函数的语句块。
  • 函数内部的语句块,由 Python 语句组成。

注释(1)所定义的函数的语句块只有一条语句,下面再定义一个有多条语句的函数。

代码语言:javascript
代码运行次数:0
运行
复制
#coding:utf-8
"""
filename: myadd.py
"""
def add(x, y):
    '''
    This is an addition function.
    add(3, 4) -> 7
    '''
    r = x + y
    return float(r)

对照图7-1-1所示的函数定义形式,这里定义的函数 add() 符合该形式要求,若与注释(1)所定义的函数相比,不仅语句块中的逻辑行数量多了,还增加了“函数文档”

  • 在函数里面,用三个引号包裹的多行注释,称之为“函数的文档”。通常函数文档中编写有关函数的说明,如函数的作用、调用方法及返回值等——类似于 .py 程序文件开头的文档。
  • 函数 add() 的语句块中有两个语句,其中 return float(r) 称为 return 语句。return 是 Python 的关键词,它的作用是返回其后面的表达式的值到函数调用的位置。有的函数没有显示地写出 renturn 语句,Python 解释器会默认为 return None 。例如前面编写的函数 my_func()
代码语言:javascript
代码运行次数:0
运行
复制
>>> r = my_fun()
this is a function
>>> print(r)
None

注意,不要误认为 my_fun() 函数返回的是 this is a function ,这个字符串是 print() 的执行结果,不是 my_fun() 的返回值。上述代码已经显示,my_fun() 的返回值是 None

继续编写 myadd.py 程序,在前述函数的后面,编写如下代码:

代码语言:javascript
代码运行次数:0
运行
复制
if __name__ == "__main__":    # (2)
    sum = add(2, 4)           # (3)
    print(sum)

注释(2)的内容姑且照抄(注意,__name____main__ 中的下划线都是各侧有两个),在第11章11.1节中会给予解释。注释(3)中以 add(2, 4) 的方式调用所定义的函数,并且函数的返回值被变量 sum 引用。执行程序,结果如下:

代码语言:javascript
代码运行次数:0
运行
复制
% python myadd.py
6.0

初步了解了定义函数的基本格式之后,要想能熟练地写出自己所需要的函数,唯有多练习。

下面编写一个函数,实现字符串中字母大小写转化,即将某字符串中的大写字母,转化为小写字母;原来的小写字母则转化为大写字母。例如字符串 'Python' ,经此函数后转化为 'pYTHON'

请读者先按照要求自己尝试编写并调试,再参考下面的示例。

代码语言:javascript
代码运行次数:0
运行
复制
#coding:utf-8
'''
filename: convertletter.py
'''
def convert(s):
    """
    convert upper and lower in a string.
    convert(string) -> string
    """
    lst = [e.upper() if e.islower() else e.lower() for e in s]
    return "".join(lst)

if __name__=="__main__":
    word = "Python"
    new_word = convert(word)
    print(f"{word} --> {new_word}")

程序执行效果:

代码语言:javascript
代码运行次数:0
运行
复制
% python convertletter.py
Python --> pYTHON

当然,上述函数并非是实现需求的最佳选择,如果使用位运算(本书略去此内容,有兴趣的读者可以深入研究),会得到一个有点魔幻的函数:

代码语言:javascript
代码运行次数:0
运行
复制
>>> def toggle(s):
...     return ''.join(chr(ord(c) ^ 32) for c in s)
...
>>> toggle("Python")
'pYTHON'

此处并不要求读者理解上述函数,只是想传达一个信息:本书中的代码,不是最优,希望读者能在学习过程中,探索优化方法——“尽信书,不如无书”(《孟子》)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老齐教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第7章 函数
    • 7.1 定义函数
      • 7.1.1 基本格式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档