百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python实用案例编程入门:第五章 函数和类

off999 2024-09-21 20:49 52 浏览 0 评论

本章的主题为函数和类,在编程中比较重要的概念。

5.1 函数

Python语言提供了函数的概念,就是给代码块赋予一个名字,然后所有需要使用该代码块的地方都直接调用该代码的名字即可,就叫做函数,该名字叫函数名。这样,我们就可以通过函数名来表示该代码块所提供的功能,在任何使用的地方只需要调用该函数名即可,而不用每个使用的地方都重复该代码块。及便于重复使用已有代码,也方便调试和修改,比如我们希望修改该功能块,只需要修改该函数内的代码即可,而无需修改所有的被使用的地方。

同时呢,由于函数的使用,主程序就没有那么多代码,使主程序的结构清晰易于理解。

5.1.1 函数的定义

函数定义时需要指定一个能够描述所要做的事情的名称,Python中约定使用小写字母加下划线的形式,函数的定义如下所示。

def say_hi():
"""say hi"""
	print("你好")

上面的代码片段是一个函数定义的示例,def后面跟着函数名,函数名后面必须是圆括号,圆括号后面是冒号,然后紧跟着函数的代码块。函数名称部分可以自定定义,一般采用小写字母加下划线的方式。在使用函数的时候,可以直接用函数名加圆括号即可。

say_hi()
>>>你好

该函数的定义没有参数,我们可以定义有入参的函数,让函数的功能更灵活。

def say_hi(language):
"""say hi"""
	print("你好 " + language)

say_hi("Python")
say_hi("C++")
>>>你好 Python
>>>你好 C++

从上面的例子可以看出,我们可以通过say_hi()函数去对不同的语言问好,但不需要对每个语言都编写相同的代码块。

函数除了让我们代码块更容易复用之外,也能够让调用函数的主函数更加的简洁,易于阅读和修改。程序的可阅读性是非常重要的,对于编程来说,调试代码花的时间可能更多,但在调试过程中需要清楚的知道程序的逻辑和结构,而函数使代码更具模块话,用一个函数名就代替了一个功能块的好几行代码,甚至几十行,因此函数对于编程来说非常有用。

5.1.2 函数的参数及默认值

如上节所示,函数支持参数传递,这就让函数可以灵活的接收来自调用者传递的数据。

在将列表作为参数有点特殊,函数可以修改列表的内容,从而使用调用者的数据也被修改了。而其他类型的数据,函数仅仅是将数值传递给函数使用,并不会修改调用者持有的数据内容。因此,列表显得比较特殊,但我们也可以将列表作为参数传递给函数,同时也不会修改调用者持有的列表值。列表有一个称之为拷贝的方法,可以将列表的内容复制一份作为参数进行传递,比如list[:]或者copy()方法。

example_language = ['C++', 'Python']

def say_hi(languages):
"""say hi"""
  for language in languages:
  	print("你好 " + language)

languages.append("Java")

say_hi(example_language)
print(example_language)
>>>你好 C++
>>>你好 Python
>>> ['C++', 'Python', 'Java']

有上面的代码我们可以知道,函数say_hi()修改了example_languages的值,而这可能不是我们所期望的。如上面所述,我们可以通过相应的方法来解决该问题。

example_language = ['C++', 'Python']

def say_hi(languages):
"""say hi"""
  languages.append("Java")
  for language in languages:
  	print("你好 " + language)

say_hi(example_language[:])
print(example_language)
>>>你好 C++
>>>你好 Python
>>>你好 Java
>>>['C++', 'Python']

从运行的结果来看,函数并没有修改调用者的数据,而只是函数自己内部的参数值被修改了,再看看另一种方法。

example_language = ['C++', 'Python']
def say_hi(languages):
"""say hi"""
  languages.append("Java")
  for language in languages:
  	print("你好 " + language)

say_hi(example_language.copy())
print(example_language)
>>>你好 C++
>>>你好 Python
>>>你好 Java
>>>['C++', 'Python']

函数也可以接收任意数量的参数,比如像下面代码所示。

def say_hi(*languages):
"""say hi"""
  for language in languages:
  	print("你好 " + language)

say_hi('C++', 'Python')
>>>你好 C++
>>>你好 Python
def say_hi(*languages):
"""say hi"""
  for language in languages:
  print("你好 " + language)

say_hi('C++', 'Python', 'Java')
>>>你好 C++
>>>你好 Python
>>>你好 Java

从上面代码可以看出,无论入参有多少个,函数都可以通过for循环迭代逐个处理。我们再看另一个可以接收任意数量键值对的实现。

接收任意数量的键值对,代码示例如下。

def say_hi(**languages):
"""say hi"""
    for language,author in languages.items():
        print("你好 " + author + " and thanks your " + language)

say_hi(Cplusplus='Bjame Stroustrup', Python='Guido', Java='James')
>>>你好 Bjame Stroustrup and thanks your Cplusplus
>>>你好 Guido and thanks your Python
>>>你好 James and thanks your Java

5.1.3 函数的返回值

函数的调用者可以传递数据给函数,同样函数也可以返回数据给调用者。而返回给调用者的数据,我们称之为返回值,这样函数的功能就很全面了。既可以接受来自调用者的数据,也可以返回数据给调用者,从而完成信息交互。

下面的代码展示了函数如何返回值,及调用者如何获取函数返回值。

def say_hi(**languages):
"""say hi"""
    for language,author in languages.items():
        print("你好 " + author + " and thanks your " + language)

 eturn "say hi to all languages successfully"

value = say_hi(Cplusplus='Bjame Stroustrup', Python='Guido', Java='James')
print(value)
>>>你好 Bjame Stroustrup and thanks your Cplusplus
>>>你好 Guido and thanks your Python
>>>你好 James and thanks your Java
>>>say hi to all languages successfully

如程序执行结果所示,函数成功的执行完后,将一个字符串作为返回值return给调用者,而调用者将该返回值存入一个变量value中。通过print函数进行打印,可以看到我们得到就是say_hi()函数的返回的值。

5.2 类

介绍完函数,我们再看看另一个更高级的内容,类。如我们在函数一节所提到的,类也是另一个将代码进行封装的技术,但类比函数更高级,类可以将数据与函数封装在一起。

5.2.1 类的定义

类是一个面向对象编程的概念,我们的程序需要模拟现实世界。而类就是用来模拟现实对象的技术基础,可以将现实中的所有事务用一个类的表示。在一个类的定义中,我们将其中函数称为方法,而将其中的数据称为属性,通过方法进行获取和修改属性,下面来看看一个简单的类定义。

class FirstClass:
    sex = '女性'

def set_sex(self, value):
    self.sex = value

def get_sex(self):
    return self.sex

在上面的类定义中,用一个变量sex保存性别。同时,定义了两个函数分别用于修改性别和获取性别。但需要注意,类中定义的函数的第一个参数必须为self,而操作具体属性时也必须用self.来进行访问,类似于C++程序中this指针。

5.2.2 类的属性

如上面类的定义中所提及,可以在类定义是定义属性。当然,也可以在类的方法中去通过self定义属性。如下代码片段中,我们在set_sex()的方法中通过self.age定义了一个存储年龄的属性。

class FirstClass:
sex = '女性'

def set_sex(self, sex, age):
self.sex = sex
self.age = age

def get_sex(self):
return self.sex

def get_age(self):
return self.age

有了类的定义,我们试着使用该类,下面的代码中我们定义了类的对象first_obj,然后获取默认性别为女性。紧接着,我们通过方法set_sex()修改了性别和年龄,再通过方法get_sex()和get_age()获取了性别和年龄。

first_obj = FirstClass()
sex_value = first_obj.get_sex()
print(sex_value)
first_obj.set_sex('男性', 23)
sex_value = first_obj.get_sex()
age_value = first_obj.get_age()
print(sex_value, age_value)
>>>女性
>>>男性 23

通过上面的代码,我们可以看到都是在通过类的方法进行访问和修改属性。

5.2.3 类的方法

在面向对象编程中,我们只希望给用户提供必要的访问接口,也就是方法,从而隐藏具体实现和数据。我们还是通过上面的类定义来说明方法的定义和使用,定义了三个方法,set_sex()用于设置性别和年龄,get_sex()用于获取性别,而get_age()用于获取年龄,但如果用户想要单独修改年龄怎么办呢?似乎没有现成的方法,那么我们是否可以将set_sex()修改为只设置性别,再增加一个新方法去专门设置年龄呢?答案是肯定的,我们来看看下面的代码。

class FirstClass:
sex = '女性'
age = 18
def set_sex(self, sex):
self.sex = sex

def set_age(self, age):
self.age = age

def get_sex(self):
return self.sex

def get_age(self):
return self.age

上面的代码我们重新定义之前的类,新增了set_age()方法,从而使类的方法定义更加清晰简单,一个函数只做一件事。

first_obj = FirstClass()
sex_value = first_obj.get_sex()
age_value = first_obj.get_age()
print(sex_value)
first_obj.set_sex('男性')
first_obj.set_age(23)
sex_value = first_obj.get_sex()
age_value = first_obj.get_age()
print(sex_value, age_value)
>>>女性
>>>男性 23

从程序的执行结果来看,我们 并未修改程序的执行效果。

5.3 模块

Python提供了模块的机制,可以让我们将函数或者类单独存入一个Python文件中,从而隐藏具体实现。而使用者无需关注具体实现,只是简单的调用函数或者使用类即可,这样我们就可以将该模块文件共享给其他任何人使用,或者很容易的使用在自己的其他程序中。

我们只需要通过import 相应的模块文件名即可,该文件必须是Python文件,导入时只需要导入文件名,不需要加py文件后缀。

我们这里将前面的函数和类存入一个Python文件中作为模块,然后进行导入使用。

该文件名为try_module.py,其内容如下所示。

class FirstClass:
sex = '女性'
age = 18
def set_sex(self, sex):
self.sex = sex

def set_age(self, age):
self.age = age

def get_sex(self):
return self.sex

def get_age(self):
return self.age

def say_hi(**languages):
"""say hi"""
for language,author in languages.items():
print("你好 " + author + " and thanks your " + language)

return "say hi to all languages successfully"
在我们的程序中只需要import这个文件,便可以使用其中的类及函数。
import try_module

first_obj = try_module.FirstClass()
sex_value = first_obj.get_sex()
age_value = first_obj.get_age()
print(sex_value)
first_obj.set_sex('男性')
first_obj.set_age(23)
sex_value = first_obj.get_sex()
age_value = first_obj.get_age()
print(sex_value, age_value)

value = try_module.say_hi(Cplusplus='Bjame Stroustrup', Python='Guido', Java='James')
print(value)

程序执行效果如下,和不用模块时完全一样,但这里简化了程序实现,其他使用者同样只需要导入该模块文件即可。

>>>女性
>>>男性 23
>>>你好 Bjame Stroustrup and thanks your Cplusplus
>>>你好 Guido and thanks your Python
>>>你好 James and thanks your Java
>>>say hi to all languages successfully

除了直接使用import导入所有的内容,还可以通过from try_module import say_hi只导入函数say_hi()。也可以用import try_module as td给模块一个别名,或者通过from try_module import *导入所有的内容,但使用时不需要在前面加模块名。

这里给一段代码示例。

from try_module import say_hi

value = say_hi(Cplusplus='Bjame Stroustrup', Python='Guido', Java='James')
print(value)

import try_module as td

first_obj = td.FirstClass()
sex_value = first_obj.get_sex()
age_value = first_obj.get_age()
print(sex_value)
first_obj.set_sex('男性')
first_obj.set_age(23)
sex_value = first_obj.get_sex()
age_value = first_obj.get_age()
print(sex_value, age_value)

5.4 本章小结

本章我们学习了如何编写函数,将代码块以函数的形式进行定义和使用。同时也介绍了如何定义类,以及类的属性的定义,类的方法的定义及使用,从而让我们有多种手段进行代码封装和更好的复用。

最后介绍了一个Python中比较中的概念,模块。通过模块我们可以将类和函数通过文件进行管理及复用,从而便于使用。模块是Python的一个非常重要的概念,这里仅做了简单的介绍,读者可以通过其他相关资料进行学习理解。

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: